{
  "schema": "https://l0g.fr/openapi.json#/components/schemas/BlackBoxSurface",
  "version": "2",
  "generated": "2026-10-16T23:25:18Z",
  "title": "Black Box Recorder l0g",
  "question": "Rejouer uniquement les états effectivement archivés au moment de leur publication.",
  "coverage": {
    "frames": 638,
    "firstFrameDate": "2026-07-16",
    "lastFrameDate": "2026-10-16",
    "instruments": [
      "debt",
      "energie",
      "eu",
      "us",
      "yen"
    ],
    "pointInTime": true,
    "archiveAvailable": true
  },
  "replay": {
    "acceptedDateFormat": "YYYY-MM-DD",
    "rule": "Sélectionner la dernière frame append-only dont date <= date demandée. Aucun état passé n’est recalculé.",
    "archiveStartDate": "2026-07-16",
    "example": {
      "requestedDate": "2026-07-16",
      "result": "replayable"
    }
  },
  "archive": {
    "branch": "black-box-archive",
    "layout": "frames/*.json",
    "appendOnly": true,
    "hashAlgorithm": "sha-256",
    "validation": "Chaque frame hashée référence la frame précédente ; CI refuse modification, renommage ou suppression."
  },
  "inputs": {
    "signals": "https://l0g.fr/api/v1/signals/history.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"
  },
  "frames": [
    {
      "schemaVersion": "2",
      "frameId": "20260716T131030+0200-1bafd71d1a81-29493474875-1",
      "date": "2026-07-16",
      "observedAt": "2026-07-16T11:01:23.000Z",
      "retrievedAt": "2026-07-16T11:11:10.486Z",
      "computedAt": "2026-07-16T13:10:30+02:00",
      "gitSha": "1bafd71d1a81ae23bb307baa703e1b335d206584",
      "previousFrameHash": null,
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29493474875",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "5b8a0e8bd9b7f7b1144fa69adc91a0c4ea1dcad4346ee7159b11eaccea5aacfb",
          "bytes": 6467,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "492068f3ef78547bc56d4246174c287046de68f50ab9021bc4a4847a1105b65a",
          "bytes": 76245,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "a2795fc1ca50f30fd4e592f43a5de58d814a6652ab5b8fb8b0aaec0373276890",
          "bytes": 1265202,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "a9475987ce423349e73108b47bb36db9470208a2c535a34f90b912ca148a3e57",
          "bytes": 2831955,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "f1e39e9195f9d86bf490854b3c7b99890333d8c795ff1f2c5d42c034c0a222bf",
          "bytes": 925166,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "13cc27b304197ef09e4b334fa304ede9ca8c34df482f6dc0fee0370e459f863c",
          "bytes": 829869,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "6f425a9aeb354e27755588c71cfc2431c2fb094b5b70b307e1b9f62060489a22",
          "bytes": 29278,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "c3c1701a5a40f1fb1250dc07ba508135d287a84d2b267b10c9748be115a92c40",
          "bytes": 13791,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "126dffbd4342abe8b85f2d31c24ada9c2ccf7ed395deaedf2f89f68735b3cc89",
          "bytes": 203615,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "f1996c86f80ace691fc7b6302f71010f34862f3a7e9601cdec10dd9b886cd467",
          "bytes": 141153,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "0bcbf96d688e4f1b8ff496be1798c2a9ece0ae382681593b16099664c4ecad40",
          "bytes": 11274,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "a20e9cbff9eadf77af13f9b7de9db72889fc600140ecd8027c21ec9a57e96759",
          "bytes": 6457,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "868567199540d0acccbeb2ea5bbe6f9a70887c1cc59d60d1da03140ee9dd8eb0",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-16T11:01:23.000Z:51631272a1a6",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-16T11:01:23.000Z",
          "sourcePublishedAt": "2026-07-16T11:01:23.000Z",
          "retrievedAt": "2026-07-16T11:11:10.486Z",
          "computedAt": "2026-07-16T13:10:30+02:00",
          "value": 55,
          "rawValue": 54.85763378518908,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "51631272a1a6945f4f3203591b6fd21b19029e3519b5d5afc00d14084f439339",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-16T11:01:23.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-16T11:01:23.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T13:10:30+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-16T11:01:23.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-16T11:01:23.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T13:10:30+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-16T11:01:23.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-16T11:01:23.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T13:10:30+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-16T11:01:23.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-16T11:01:23.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T13:10:30+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-16T13:10:30+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-16T11:01:23.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T13:10:30+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T11:01:23.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-16T11:01:23.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T13:10:30+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T11:01:23.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-16T11:01:23.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T13:10:30+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T11:01:23.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-16T11:01:23.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T13:10:30+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T11:01:23.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-16T11:01:23.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T13:10:30+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T11:01:23.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/"
        }
      },
      "changes": {
        "generated": "2026-07-16T13:10:30+02:00",
        "latest": [
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "d61b62d313df9d03e18d4d4c7876ffa7a0b900f679f744f3f685d6337e506780",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "2ce406db3886b599ecf6e1197e56345b7165001c6b7c79d404ca2868f987ce70",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "35abf4f74c27f3d53ed985c2d68cb8a50f356909e8565c3443b5606da0670c01",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "aa2c0074e39131a9",
            "date": "2026-07-15T20:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "stablecoins-the-marginal-buyer-of-us-treasuries",
            "title": "Stablecoins, the marginal buyer of US Treasuries",
            "url": "https://l0g.fr/en/analysis/stablecoins-the-marginal-buyer-of-us-treasuries/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Stablecoins, the marginal buyer of US Treasuries.",
            "objectId": "article:en:stablecoins-the-marginal-buyer-of-us-treasuries",
            "previousVersion": null,
            "currentVersion": "2026-07-15T20:15:00.000Z",
            "previousHash": null,
            "currentHash": "19b8aa0b5436f72bab06471b583a8207d012238f053cbfaf01483005ff21c56f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add487e40dcd2183",
            "date": "2026-07-15T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "stablecoins-acheteur-marginal-bon-du-tresor",
            "title": "Les stablecoins, acheteur marginal du bon du Trésor américain",
            "url": "https://l0g.fr/posts/stablecoins-acheteur-marginal-bon-du-tresor/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les stablecoins, acheteur marginal du bon du Trésor américain.",
            "objectId": "article:stablecoins-acheteur-marginal-bon-du-tresor",
            "previousVersion": null,
            "currentVersion": "2026-07-15T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "b4da5345274d63e7d24fee354fbb76333c04c10abf070954d12df5e18d8f3386",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "024c1d2c34962687",
            "date": "2026-07-15T16:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "valeur-residuelle-garantie-credit-infrastructure-ia",
            "title": "La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA",
            "url": "https://l0g.fr/posts/valeur-residuelle-garantie-credit-infrastructure-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA.",
            "objectId": "article:valeur-residuelle-garantie-credit-infrastructure-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-15T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "704e534ddea7ab921017b55a74d6ccfca3680dc57ffe6e7d0fae5ddcaafdf071",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4fa655bc8d4580e1",
            "date": "2026-07-14T14:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "iran-war-tankers-and-energy-infrastructure-inventory",
            "title": "Iran war: an inventory of the oil and gas ships and infrastructure struck",
            "url": "https://l0g.fr/en/analysis/iran-war-tankers-and-energy-infrastructure-inventory/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Iran war: an inventory of the oil and gas ships and infrastructure struck.",
            "objectId": "article:en:iran-war-tankers-and-energy-infrastructure-inventory",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:20:00.000Z",
            "previousHash": null,
            "currentHash": "c29ce2147bc26dc7b3a8070b67d113424333e281231d7d3242e5ff4d52d80a17",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9294180323712fae",
            "date": "2026-07-14T14:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-2026-iran-war-economic-political-earthquake",
            "title": "The 2026 Iran war: anatomy of a global economic and political earthquake",
            "url": "https://l0g.fr/en/analysis/the-2026-iran-war-economic-political-earthquake/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The 2026 Iran war: anatomy of a global economic and political earthquake.",
            "objectId": "article:en:the-2026-iran-war-economic-political-earthquake",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:10:00.000Z",
            "previousHash": null,
            "currentHash": "19d1300388e44124a385f38adeb03318d89cb6371f6b7f09afa4754925e59c38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "17a257e77781c867",
            "date": "2026-07-14T14:00:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "hormuz-supply-chain-the-bill-is-already-here",
            "title": "Hormuz: the supply chain takes the hit, the bill is already here",
            "url": "https://l0g.fr/en/analysis/hormuz-supply-chain-the-bill-is-already-here/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Hormuz: the supply chain takes the hit, the bill is already here.",
            "objectId": "article:en:hormuz-supply-chain-the-bill-is-already-here",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:00:00.000Z",
            "previousHash": null,
            "currentHash": "e5000fa469ee41f3e9563227f8dfc043c54b73f23c1065a7ec52281f27c72a7e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4390bd6e0815a791",
            "date": "2026-07-14T13:50:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "cushing-the-terminal-that-sets-wti",
            "title": "Cushing: the Oklahoma terminal that sets the US oil price",
            "url": "https://l0g.fr/en/analysis/cushing-the-terminal-that-sets-wti/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Cushing: the Oklahoma terminal that sets the US oil price.",
            "objectId": "article:en:cushing-the-terminal-that-sets-wti",
            "previousVersion": null,
            "currentVersion": "2026-07-14T13:50:00.000Z",
            "previousHash": null,
            "currentHash": "b15e1187b1ac4768ebca0a47a56d9413a4297f1890ae60c40182bf3eea61a4dc",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "74960f26bfe37b5a44800e8cb4fa4430947224730a899842409501c4c4c62803"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260716T135234+0200-716fc09d404c-29496033870-1",
      "date": "2026-07-16",
      "observedAt": "2026-07-16T11:45:42.000Z",
      "retrievedAt": "2026-07-16T11:53:27.016Z",
      "computedAt": "2026-07-16T13:52:34+02:00",
      "gitSha": "716fc09d404cb5862453477f221c6f5ef7649641",
      "previousFrameHash": "74960f26bfe37b5a44800e8cb4fa4430947224730a899842409501c4c4c62803",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29496033870",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "7f11a77d60e6cc7c8eee8f605f1e9e679e18a1bc1cb2cef7c8fae92036738472",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "c1f4974e1ea4f0975626d0c3d9919077ef2ffc37cddb8b8f94a214ac826b2c26",
          "bytes": 1278564,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "2c2ef5eaf1cf928124325eb3737c4a15187b265ef8ef8ccaaf84cb6ae14f71c6",
          "bytes": 2831955,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "1bf9b312c75c2c9a3225e4e75712dead69bd9da09a0f67c7f19adf30215d19ba",
          "bytes": 940741,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "dba0edb3e9bd3b51d0f8780116e0230b9d04409e6fdaacec805e8bb63166ef3c",
          "bytes": 830097,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "cd0970a29582206c3c16f781e0d23c0fcf4bb0a15e2473e4c83cdfcc4689fab1",
          "bytes": 29278,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "4f16ede3b398c1ffa73c64e51c1ea512c11ec80e75f3429e02be1e704f33aec6",
          "bytes": 13932,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "8fe5e118b30997bf10a1ddeeba7d74756eaa719ebff8408aa8465718213d9475",
          "bytes": 203615,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "7f86c0c990bcefdddaf0bd14f26d6ff9c810a2b877ec1d61665939f391f97f23",
          "bytes": 145305,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "d4aee12d8648ad31ba044e7f5fd02b6717cd137af1a12be4a3d9fe9b59b93ac5",
          "bytes": 11245,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "2f76692c52b96150b913f82acbe26930308df014573b1f26138ee0f9ff32d3c9",
          "bytes": 6428,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "0dbae55d0f65ced0f398a28dd452dfd23cd364d33af4fa8b2084c0b99eeea95e",
          "bytes": 12790,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-16T11:45:42.000Z:56a4d1a008a1",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-16T11:45:42.000Z",
          "sourcePublishedAt": "2026-07-16T11:45:42.000Z",
          "retrievedAt": "2026-07-16T11:53:27.016Z",
          "computedAt": "2026-07-16T13:52:34+02:00",
          "value": 54,
          "rawValue": 54.205866146840165,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "56a4d1a008a1215bc2d92d39e37fa05c2f5fb4754108d11beeb6331ef5a9d516",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-16T11:45:42.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-16T11:45:42.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T13:52:34+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-16T11:45:42.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-16T11:45:42.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T13:52:34+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-16T11:45:42.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-16T11:45:42.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T13:52:34+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-16T11:45:42.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-16T11:45:42.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T13:52:34+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-16T13:52:34+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-16T11:45:42.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T13:52:34+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T11:45:42.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-16T11:45:42.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T13:52:34+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T11:45:42.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-16T11:45:42.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T13:52:34+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T11:45:42.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-16T11:45:42.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T13:52:34+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T11:45:42.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-16T11:45:42.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T13:52:34+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T11:45:42.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/"
        }
      },
      "changes": {
        "generated": "2026-07-16T13:52:34+02:00",
        "latest": [
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "10dbe49c01d4afc31cc3e90d2941def50069deab4c433e950ab8ad5ca5bc5e26",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "d56b7ffe925c665d87a1af9c787ac04ffc7f8d93c4ddf141bbf003d4a353749a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "21c872d4b231db6b1855c074c3bdd2d79d3d770ade71b09297b546b01b4161be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "aa2c0074e39131a9",
            "date": "2026-07-15T20:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "stablecoins-the-marginal-buyer-of-us-treasuries",
            "title": "Stablecoins, the marginal buyer of US Treasuries",
            "url": "https://l0g.fr/en/analysis/stablecoins-the-marginal-buyer-of-us-treasuries/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Stablecoins, the marginal buyer of US Treasuries.",
            "objectId": "article:en:stablecoins-the-marginal-buyer-of-us-treasuries",
            "previousVersion": null,
            "currentVersion": "2026-07-15T20:15:00.000Z",
            "previousHash": null,
            "currentHash": "19b8aa0b5436f72bab06471b583a8207d012238f053cbfaf01483005ff21c56f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add487e40dcd2183",
            "date": "2026-07-15T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "stablecoins-acheteur-marginal-bon-du-tresor",
            "title": "Les stablecoins, acheteur marginal du bon du Trésor américain",
            "url": "https://l0g.fr/posts/stablecoins-acheteur-marginal-bon-du-tresor/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les stablecoins, acheteur marginal du bon du Trésor américain.",
            "objectId": "article:stablecoins-acheteur-marginal-bon-du-tresor",
            "previousVersion": null,
            "currentVersion": "2026-07-15T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "64d172782987132dde6a5c061993ee2576e708c6735e90cf40ec461401beb4da",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "024c1d2c34962687",
            "date": "2026-07-15T16:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "valeur-residuelle-garantie-credit-infrastructure-ia",
            "title": "La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA",
            "url": "https://l0g.fr/posts/valeur-residuelle-garantie-credit-infrastructure-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA.",
            "objectId": "article:valeur-residuelle-garantie-credit-infrastructure-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-15T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "18ca846a4c2f068ead7ad5e68ec1bb30a83026e444f5eab624522722bdfa5b9f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4fa655bc8d4580e1",
            "date": "2026-07-14T14:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "iran-war-tankers-and-energy-infrastructure-inventory",
            "title": "Iran war: an inventory of the oil and gas ships and infrastructure struck",
            "url": "https://l0g.fr/en/analysis/iran-war-tankers-and-energy-infrastructure-inventory/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Iran war: an inventory of the oil and gas ships and infrastructure struck.",
            "objectId": "article:en:iran-war-tankers-and-energy-infrastructure-inventory",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:20:00.000Z",
            "previousHash": null,
            "currentHash": "c29ce2147bc26dc7b3a8070b67d113424333e281231d7d3242e5ff4d52d80a17",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9294180323712fae",
            "date": "2026-07-14T14:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-2026-iran-war-economic-political-earthquake",
            "title": "The 2026 Iran war: anatomy of a global economic and political earthquake",
            "url": "https://l0g.fr/en/analysis/the-2026-iran-war-economic-political-earthquake/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The 2026 Iran war: anatomy of a global economic and political earthquake.",
            "objectId": "article:en:the-2026-iran-war-economic-political-earthquake",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:10:00.000Z",
            "previousHash": null,
            "currentHash": "19d1300388e44124a385f38adeb03318d89cb6371f6b7f09afa4754925e59c38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "17a257e77781c867",
            "date": "2026-07-14T14:00:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "hormuz-supply-chain-the-bill-is-already-here",
            "title": "Hormuz: the supply chain takes the hit, the bill is already here",
            "url": "https://l0g.fr/en/analysis/hormuz-supply-chain-the-bill-is-already-here/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Hormuz: the supply chain takes the hit, the bill is already here.",
            "objectId": "article:en:hormuz-supply-chain-the-bill-is-already-here",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:00:00.000Z",
            "previousHash": null,
            "currentHash": "e5000fa469ee41f3e9563227f8dfc043c54b73f23c1065a7ec52281f27c72a7e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4390bd6e0815a791",
            "date": "2026-07-14T13:50:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "cushing-the-terminal-that-sets-wti",
            "title": "Cushing: the Oklahoma terminal that sets the US oil price",
            "url": "https://l0g.fr/en/analysis/cushing-the-terminal-that-sets-wti/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Cushing: the Oklahoma terminal that sets the US oil price.",
            "objectId": "article:en:cushing-the-terminal-that-sets-wti",
            "previousVersion": null,
            "currentVersion": "2026-07-14T13:50:00.000Z",
            "previousHash": null,
            "currentHash": "b15e1187b1ac4768ebca0a47a56d9413a4297f1890ae60c40182bf3eea61a4dc",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "a5905c89bf2c69cc18c1425d39fb133e63c66f51e8ad541b62608699e59019cb"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260716T160547+0200-dfdc6518341f-29505074504-1",
      "date": "2026-07-16",
      "observedAt": "2026-07-16T13:54:26.000Z",
      "retrievedAt": "2026-07-16T14:06:41.794Z",
      "computedAt": "2026-07-16T16:05:47+02:00",
      "gitSha": "dfdc6518341fcfab3057673128c81a95a5f2c708",
      "previousFrameHash": "a5905c89bf2c69cc18c1425d39fb133e63c66f51e8ad541b62608699e59019cb",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29505074504",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "7f11a77d60e6cc7c8eee8f605f1e9e679e18a1bc1cb2cef7c8fae92036738472",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "12be00672b870007c4d6e7cc5e9424c5a903e9ecb8eba7d4127cb6ad4b5e5f9e",
          "bytes": 1278564,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "2c2ef5eaf1cf928124325eb3737c4a15187b265ef8ef8ccaaf84cb6ae14f71c6",
          "bytes": 2831955,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "5aceff0f010c173a0466b2812553fbde09f612bad37bf2ce85e31341c81b8017",
          "bytes": 940741,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "fb1c6c7a618c7aeb3093f97f9f0a4784de636a10ad146ffcf39f3945be17b3f9",
          "bytes": 830097,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "cd0970a29582206c3c16f781e0d23c0fcf4bb0a15e2473e4c83cdfcc4689fab1",
          "bytes": 29278,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "2073602e19716bdb45f3112b126edb95cde94344313c735adbf4126fc1d2a6d4",
          "bytes": 13932,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "3343bc53189d9f7d9b805db386c60e4bff4a88d250cbdc39f7c3acdbd99b9574",
          "bytes": 203615,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "d6cbc5e9716d8daece6902407595a0647ca8334f331e65a3181f138fa5c4e149",
          "bytes": 145305,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "007a0aaf927a6cb402638630064486270c3546953c48b5ffc408369b7c4f0b2e",
          "bytes": 11245,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "d2e6dd1494ec9b60d6c5dea6f39ea5ce54beec3f604d3ac87a4ca88d8bfa65bf",
          "bytes": 6428,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "9502fa9352af8e79ff12a58cb8a33b3f57516663ff422381b2e23cdcb6cc0aad",
          "bytes": 12790,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-16T13:54:26.000Z:9b91c4bc66c8",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-16T13:54:26.000Z",
          "sourcePublishedAt": "2026-07-16T13:54:26.000Z",
          "retrievedAt": "2026-07-16T14:06:41.794Z",
          "computedAt": "2026-07-16T16:05:47+02:00",
          "value": 54,
          "rawValue": 54.205866146840165,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "9b91c4bc66c88c1a389c3c95139e4fd6f378d9241f1003ca0adb669d26d7ae25",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-16T13:54:26.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-16T13:54:26.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T16:05:47+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-16T13:54:26.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-16T13:54:26.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T16:05:47+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-16T13:54:26.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-16T13:54:26.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T16:05:47+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-16T13:54:26.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-16T13:54:26.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T16:05:47+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-16T16:05:47+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-16T13:54:26.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T16:05:47+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T13:54:26.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-16T13:54:26.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T16:05:47+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T13:54:26.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-16T13:54:26.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T16:05:47+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T13:54:26.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-16T13:54:26.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T16:05:47+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T13:54:26.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-16T13:54:26.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T16:05:47+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T13:54:26.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/"
        }
      },
      "changes": {
        "generated": "2026-07-16T16:05:47+02:00",
        "latest": [
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "8a257f8e642c209a5323211918628389c1fb96a4c80819fc76f10bacba42dbaa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "98de659a694de535ef1019c5e62cdb0b7169eecfddcbdd4462d4bc5c0b441ce1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "35f0276049bf564f75f0cbad7dfd7df64d0689fa604ed3ffa04a76a2e9095232",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "aa2c0074e39131a9",
            "date": "2026-07-15T20:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "stablecoins-the-marginal-buyer-of-us-treasuries",
            "title": "Stablecoins, the marginal buyer of US Treasuries",
            "url": "https://l0g.fr/en/analysis/stablecoins-the-marginal-buyer-of-us-treasuries/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Stablecoins, the marginal buyer of US Treasuries.",
            "objectId": "article:en:stablecoins-the-marginal-buyer-of-us-treasuries",
            "previousVersion": null,
            "currentVersion": "2026-07-15T20:15:00.000Z",
            "previousHash": null,
            "currentHash": "19b8aa0b5436f72bab06471b583a8207d012238f053cbfaf01483005ff21c56f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add487e40dcd2183",
            "date": "2026-07-15T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "stablecoins-acheteur-marginal-bon-du-tresor",
            "title": "Les stablecoins, acheteur marginal du bon du Trésor américain",
            "url": "https://l0g.fr/posts/stablecoins-acheteur-marginal-bon-du-tresor/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les stablecoins, acheteur marginal du bon du Trésor américain.",
            "objectId": "article:stablecoins-acheteur-marginal-bon-du-tresor",
            "previousVersion": null,
            "currentVersion": "2026-07-15T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "390fa7fbbdc9a4f4e7d0a1cd1c1160d9f390f9cb18c13418afc9f5980c15d328",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "024c1d2c34962687",
            "date": "2026-07-15T16:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "valeur-residuelle-garantie-credit-infrastructure-ia",
            "title": "La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA",
            "url": "https://l0g.fr/posts/valeur-residuelle-garantie-credit-infrastructure-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA.",
            "objectId": "article:valeur-residuelle-garantie-credit-infrastructure-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-15T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "0a488d485e68e9984675589716680df335393a0564e8718100e8cd9c9e5bf00a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4fa655bc8d4580e1",
            "date": "2026-07-14T14:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "iran-war-tankers-and-energy-infrastructure-inventory",
            "title": "Iran war: an inventory of the oil and gas ships and infrastructure struck",
            "url": "https://l0g.fr/en/analysis/iran-war-tankers-and-energy-infrastructure-inventory/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Iran war: an inventory of the oil and gas ships and infrastructure struck.",
            "objectId": "article:en:iran-war-tankers-and-energy-infrastructure-inventory",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:20:00.000Z",
            "previousHash": null,
            "currentHash": "c29ce2147bc26dc7b3a8070b67d113424333e281231d7d3242e5ff4d52d80a17",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9294180323712fae",
            "date": "2026-07-14T14:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-2026-iran-war-economic-political-earthquake",
            "title": "The 2026 Iran war: anatomy of a global economic and political earthquake",
            "url": "https://l0g.fr/en/analysis/the-2026-iran-war-economic-political-earthquake/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The 2026 Iran war: anatomy of a global economic and political earthquake.",
            "objectId": "article:en:the-2026-iran-war-economic-political-earthquake",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:10:00.000Z",
            "previousHash": null,
            "currentHash": "19d1300388e44124a385f38adeb03318d89cb6371f6b7f09afa4754925e59c38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "17a257e77781c867",
            "date": "2026-07-14T14:00:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "hormuz-supply-chain-the-bill-is-already-here",
            "title": "Hormuz: the supply chain takes the hit, the bill is already here",
            "url": "https://l0g.fr/en/analysis/hormuz-supply-chain-the-bill-is-already-here/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Hormuz: the supply chain takes the hit, the bill is already here.",
            "objectId": "article:en:hormuz-supply-chain-the-bill-is-already-here",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:00:00.000Z",
            "previousHash": null,
            "currentHash": "e5000fa469ee41f3e9563227f8dfc043c54b73f23c1065a7ec52281f27c72a7e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4390bd6e0815a791",
            "date": "2026-07-14T13:50:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "cushing-the-terminal-that-sets-wti",
            "title": "Cushing: the Oklahoma terminal that sets the US oil price",
            "url": "https://l0g.fr/en/analysis/cushing-the-terminal-that-sets-wti/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Cushing: the Oklahoma terminal that sets the US oil price.",
            "objectId": "article:en:cushing-the-terminal-that-sets-wti",
            "previousVersion": null,
            "currentVersion": "2026-07-14T13:50:00.000Z",
            "previousHash": null,
            "currentHash": "b15e1187b1ac4768ebca0a47a56d9413a4297f1890ae60c40182bf3eea61a4dc",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "1bc35f608b9115090d72d60a7ce95ff808bf5e9c6c06582c2e45571df89bb8af"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260716T161601+0200-811c37fabc74-29510721214-1",
      "date": "2026-07-16",
      "observedAt": "2026-07-16T15:10:55.000Z",
      "retrievedAt": "2026-07-16T15:21:27.739Z",
      "computedAt": "2026-07-16T16:16:01+02:00",
      "gitSha": "811c37fabc747dea0687ace5ab694586c7b71a32",
      "previousFrameHash": "1bc35f608b9115090d72d60a7ce95ff808bf5e9c6c06582c2e45571df89bb8af",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29510721214",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "7f11a77d60e6cc7c8eee8f605f1e9e679e18a1bc1cb2cef7c8fae92036738472",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "c71a7f0c0c5dc75e914a0af8ef098f939e3c9a9159b35a6783b5504d9f7651b6",
          "bytes": 1278564,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "2c2ef5eaf1cf928124325eb3737c4a15187b265ef8ef8ccaaf84cb6ae14f71c6",
          "bytes": 2831955,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "4951cf38948b73044c27fde2feb13c98b7b3d1c488e79853396cb532be8485aa",
          "bytes": 940741,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "7d2e8816712fb50f15be2f3d5f6503692b45a937924def4ab2982b57f5536b13",
          "bytes": 830097,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "cd0970a29582206c3c16f781e0d23c0fcf4bb0a15e2473e4c83cdfcc4689fab1",
          "bytes": 29278,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "d3ec6f3a30152ab902ea0f5389c80811faa72ef0e33ad3a1f65527469e7c22d9",
          "bytes": 13932,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "b962f5d05992680d8b212b0f0e1a3d8e9a2a21f32e59ec20313cfe5264176bd5",
          "bytes": 203615,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "018d20d6ed049ce15327db29c2e3f442dde162058bb569510bdbd51726beafbe",
          "bytes": 145305,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "5e9d9b7c6ab9b42d28154f498a595fed2ee969b9265bfae7b750b88af728eca7",
          "bytes": 11244,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "09fb8706a0c4261f3ffc6ea6ecd2ef3a0afea99b9506896b1cd6f765e513dcca",
          "bytes": 6427,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "495e402266028f0102aef05c58a1d68a067df4af868f459b1eb71a285753b233",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-16T15:10:55.000Z:d2da4aaae574",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-16T15:10:55.000Z",
          "sourcePublishedAt": "2026-07-16T15:10:55.000Z",
          "retrievedAt": "2026-07-16T15:21:27.739Z",
          "computedAt": "2026-07-16T16:16:01+02:00",
          "value": 54,
          "rawValue": 54.19478403312738,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "d2da4aaae574d00cdbb48968ca2611067d0b254706797aeb757622928d4756c6",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-16T15:10:55.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-16T15:10:55.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T16:16:01+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-16T15:10:55.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-16T15:10:55.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T16:16:01+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-16T15:10:55.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-16T15:10:55.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T16:16:01+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-16T15:10:55.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-16T15:10:55.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T16:16:01+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-16T16:16:01+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-16T15:10:55.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T16:16:01+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:10:55.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-16T15:10:55.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T16:16:01+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:10:55.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-16T15:10:55.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T16:16:01+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:10:55.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-16T15:10:55.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T16:16:01+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:10:55.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-16T15:10:55.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T16:16:01+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:10:55.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/"
        }
      },
      "changes": {
        "generated": "2026-07-16T16:16:01+02:00",
        "latest": [
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "6a4430a2cc2114e773000b8e5179410fc0dbc556b17a29902e4d1d4d7fc5b007",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "73ff076d81fb988b79ad35045facf38406f2a316f735957f6c28b76b6a388b02",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "21f03c1d322224c105bf844a8e1072c559691f1e1d54200028413aed87783267",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "aa2c0074e39131a9",
            "date": "2026-07-15T20:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "stablecoins-the-marginal-buyer-of-us-treasuries",
            "title": "Stablecoins, the marginal buyer of US Treasuries",
            "url": "https://l0g.fr/en/analysis/stablecoins-the-marginal-buyer-of-us-treasuries/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Stablecoins, the marginal buyer of US Treasuries.",
            "objectId": "article:en:stablecoins-the-marginal-buyer-of-us-treasuries",
            "previousVersion": null,
            "currentVersion": "2026-07-15T20:15:00.000Z",
            "previousHash": null,
            "currentHash": "19b8aa0b5436f72bab06471b583a8207d012238f053cbfaf01483005ff21c56f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add487e40dcd2183",
            "date": "2026-07-15T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "stablecoins-acheteur-marginal-bon-du-tresor",
            "title": "Les stablecoins, acheteur marginal du bon du Trésor américain",
            "url": "https://l0g.fr/posts/stablecoins-acheteur-marginal-bon-du-tresor/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les stablecoins, acheteur marginal du bon du Trésor américain.",
            "objectId": "article:stablecoins-acheteur-marginal-bon-du-tresor",
            "previousVersion": null,
            "currentVersion": "2026-07-15T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "c804c83e3b186597c1b9c9c2104697a6dfe18dd81ec720ce6f79c4ae2ec4d9cb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "024c1d2c34962687",
            "date": "2026-07-15T16:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "valeur-residuelle-garantie-credit-infrastructure-ia",
            "title": "La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA",
            "url": "https://l0g.fr/posts/valeur-residuelle-garantie-credit-infrastructure-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA.",
            "objectId": "article:valeur-residuelle-garantie-credit-infrastructure-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-15T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "cf8a961fe8ce557e214d4efd421313fcb7e438a62e2cbf559493f27a007b6d20",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4fa655bc8d4580e1",
            "date": "2026-07-14T14:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "iran-war-tankers-and-energy-infrastructure-inventory",
            "title": "Iran war: an inventory of the oil and gas ships and infrastructure struck",
            "url": "https://l0g.fr/en/analysis/iran-war-tankers-and-energy-infrastructure-inventory/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Iran war: an inventory of the oil and gas ships and infrastructure struck.",
            "objectId": "article:en:iran-war-tankers-and-energy-infrastructure-inventory",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:20:00.000Z",
            "previousHash": null,
            "currentHash": "c29ce2147bc26dc7b3a8070b67d113424333e281231d7d3242e5ff4d52d80a17",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9294180323712fae",
            "date": "2026-07-14T14:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-2026-iran-war-economic-political-earthquake",
            "title": "The 2026 Iran war: anatomy of a global economic and political earthquake",
            "url": "https://l0g.fr/en/analysis/the-2026-iran-war-economic-political-earthquake/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The 2026 Iran war: anatomy of a global economic and political earthquake.",
            "objectId": "article:en:the-2026-iran-war-economic-political-earthquake",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:10:00.000Z",
            "previousHash": null,
            "currentHash": "19d1300388e44124a385f38adeb03318d89cb6371f6b7f09afa4754925e59c38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "17a257e77781c867",
            "date": "2026-07-14T14:00:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "hormuz-supply-chain-the-bill-is-already-here",
            "title": "Hormuz: the supply chain takes the hit, the bill is already here",
            "url": "https://l0g.fr/en/analysis/hormuz-supply-chain-the-bill-is-already-here/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Hormuz: the supply chain takes the hit, the bill is already here.",
            "objectId": "article:en:hormuz-supply-chain-the-bill-is-already-here",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:00:00.000Z",
            "previousHash": null,
            "currentHash": "e5000fa469ee41f3e9563227f8dfc043c54b73f23c1065a7ec52281f27c72a7e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4390bd6e0815a791",
            "date": "2026-07-14T13:50:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "cushing-the-terminal-that-sets-wti",
            "title": "Cushing: the Oklahoma terminal that sets the US oil price",
            "url": "https://l0g.fr/en/analysis/cushing-the-terminal-that-sets-wti/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Cushing: the Oklahoma terminal that sets the US oil price.",
            "objectId": "article:en:cushing-the-terminal-that-sets-wti",
            "previousVersion": null,
            "currentVersion": "2026-07-14T13:50:00.000Z",
            "previousHash": null,
            "currentHash": "b15e1187b1ac4768ebca0a47a56d9413a4297f1890ae60c40182bf3eea61a4dc",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "c1c8f73754df12169130203dd308c330f1a46d090e15551034ff7e5c586ff10c"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260716T173441+0200-0bb986d75769-29511782756-1",
      "date": "2026-07-16",
      "observedAt": "2026-07-16T15:26:19.000Z",
      "retrievedAt": "2026-07-16T15:35:35.386Z",
      "computedAt": "2026-07-16T17:34:41+02:00",
      "gitSha": "0bb986d75769d3880f1041643b0131b5807e68b2",
      "previousFrameHash": "c1c8f73754df12169130203dd308c330f1a46d090e15551034ff7e5c586ff10c",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29511782756",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "dae2997ac17e1e668afa5ce88345a37f9c6313b805c79b8c448ccaa30c9604e0",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "806d9e1ed21968fb33e01ed3e84fe663420b36c1b2da711178bdb9eb6077f1a6",
          "bytes": 1308825,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "bfb0df5617a07c9653a82669fd8832f69c5022bb55a1ca6e033a850a972ee31b",
          "bytes": 2860359,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "61478d10c6ba60dc9f2651bbcd86200250ba813574a7e8d37c236acb615713b4",
          "bytes": 977941,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "9011c51d988c36164bfcd0862aaafc3edcd0311539884bcde5be81dcbd02e3cb",
          "bytes": 864950,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "8e528bce2306004331ebdab19c10bccc6690fb29ab0225f823d277396577b8a2",
          "bytes": 30030,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "1c43a14fc136efd12ed488f21bd885ee68b8f042da296d23a54a24323aaad860",
          "bytes": 13841,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "5d163c3c5559e7d205e1e5c5395a127f252d6adf7c1ade3d88a64f405df20454",
          "bytes": 205154,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "9079d31afbfdb3900d38dbdabd6d55fb121be6fb7d67c2fbe3d6021fbed876d6",
          "bytes": 144302,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "1ad12cc4e8b3def95a374e40c5d08c89fac2aa7b0ec0b8c306b0441f5b30e728",
          "bytes": 11244,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "e6d3fd537aa1cdf0727de5fb3b0a6d382a32c8d10b15746b99c10a92cf102247",
          "bytes": 6427,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "33c6c8db4411f9e9e7292faacd8b6c0b3997a6e74816e2b44574dce73f2dc35a",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-16T15:26:19.000Z:7e9abbb5bb37",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-16T15:26:19.000Z",
          "sourcePublishedAt": "2026-07-16T15:26:19.000Z",
          "retrievedAt": "2026-07-16T15:35:35.386Z",
          "computedAt": "2026-07-16T17:34:41+02:00",
          "value": 54,
          "rawValue": 54.19478403312738,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "7e9abbb5bb379708bebf8f946efd5bb4d96b2df47980b4f883df3c95b7697ec2",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-16T15:26:19.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-16T15:26:19.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:34:41+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-16T15:26:19.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-16T15:26:19.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:34:41+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-16T15:26:19.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-16T15:26:19.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:34:41+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-16T15:26:19.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-16T15:26:19.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:34:41+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-16T17:34:41+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-16T15:26:19.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:34:41+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:26:19.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-16T15:26:19.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:34:41+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:26:19.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-16T15:26:19.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:34:41+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:26:19.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-16T15:26:19.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:34:41+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:26:19.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-16T15:26:19.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:34:41+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:26:19.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/"
        }
      },
      "changes": {
        "generated": "2026-07-16T17:34:41+02:00",
        "latest": [
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "ae67ca32188bacf551926f023c1f46796a198e57623260b0fa3a655222fa102a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "73c63c3cee4747661eb7abc179eade7eece18021989594835ac0591d4f78dcb9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "42f2797fc74e99f8dfd484368ebf7a5715346872f837ca95f2310348c6e97836",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "aee2abe14ea77c15004389ba13be229b7f3973b4d72990e6d8d1f671a5d0bf6e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "aa2c0074e39131a9",
            "date": "2026-07-15T20:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "stablecoins-the-marginal-buyer-of-us-treasuries",
            "title": "Stablecoins, the marginal buyer of US Treasuries",
            "url": "https://l0g.fr/en/analysis/stablecoins-the-marginal-buyer-of-us-treasuries/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Stablecoins, the marginal buyer of US Treasuries.",
            "objectId": "article:en:stablecoins-the-marginal-buyer-of-us-treasuries",
            "previousVersion": null,
            "currentVersion": "2026-07-15T20:15:00.000Z",
            "previousHash": null,
            "currentHash": "19b8aa0b5436f72bab06471b583a8207d012238f053cbfaf01483005ff21c56f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add487e40dcd2183",
            "date": "2026-07-15T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "stablecoins-acheteur-marginal-bon-du-tresor",
            "title": "Les stablecoins, acheteur marginal du bon du Trésor américain",
            "url": "https://l0g.fr/posts/stablecoins-acheteur-marginal-bon-du-tresor/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les stablecoins, acheteur marginal du bon du Trésor américain.",
            "objectId": "article:stablecoins-acheteur-marginal-bon-du-tresor",
            "previousVersion": null,
            "currentVersion": "2026-07-15T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "89013d87ee3807b29997ef7a904dd7613632d313410450cd72733360de1c0e53",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "024c1d2c34962687",
            "date": "2026-07-15T16:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "valeur-residuelle-garantie-credit-infrastructure-ia",
            "title": "La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA",
            "url": "https://l0g.fr/posts/valeur-residuelle-garantie-credit-infrastructure-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA.",
            "objectId": "article:valeur-residuelle-garantie-credit-infrastructure-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-15T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "0e99902c8cb666c1a143ce4a80ba1e0363ee66fd8a9cdd8a71705a862ca19c6d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4fa655bc8d4580e1",
            "date": "2026-07-14T14:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "iran-war-tankers-and-energy-infrastructure-inventory",
            "title": "Iran war: an inventory of the oil and gas ships and infrastructure struck",
            "url": "https://l0g.fr/en/analysis/iran-war-tankers-and-energy-infrastructure-inventory/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Iran war: an inventory of the oil and gas ships and infrastructure struck.",
            "objectId": "article:en:iran-war-tankers-and-energy-infrastructure-inventory",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:20:00.000Z",
            "previousHash": null,
            "currentHash": "c29ce2147bc26dc7b3a8070b67d113424333e281231d7d3242e5ff4d52d80a17",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9294180323712fae",
            "date": "2026-07-14T14:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-2026-iran-war-economic-political-earthquake",
            "title": "The 2026 Iran war: anatomy of a global economic and political earthquake",
            "url": "https://l0g.fr/en/analysis/the-2026-iran-war-economic-political-earthquake/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The 2026 Iran war: anatomy of a global economic and political earthquake.",
            "objectId": "article:en:the-2026-iran-war-economic-political-earthquake",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:10:00.000Z",
            "previousHash": null,
            "currentHash": "19d1300388e44124a385f38adeb03318d89cb6371f6b7f09afa4754925e59c38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "9515674595c9f1edff4413213e103a46a15efb5d0067b2b684a8ce8d354886ea"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260716T175249+0200-21d1b086d234-29513164786-1",
      "date": "2026-07-16",
      "observedAt": "2026-07-16T15:41:27.000Z",
      "retrievedAt": "2026-07-16T15:53:49.645Z",
      "computedAt": "2026-07-16T17:52:49+02:00",
      "gitSha": "21d1b086d234100ed455ccbf499d0a332dff2492",
      "previousFrameHash": "9515674595c9f1edff4413213e103a46a15efb5d0067b2b684a8ce8d354886ea",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29513164786",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "dae2997ac17e1e668afa5ce88345a37f9c6313b805c79b8c448ccaa30c9604e0",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "2c5c13647536aad35bf2e5d686653d68682fe6af1dfcad0e81704009b6543fe2",
          "bytes": 1308825,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "bfb0df5617a07c9653a82669fd8832f69c5022bb55a1ca6e033a850a972ee31b",
          "bytes": 2860359,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "b3eba9129535855373de539c7b633c8c1f8ec218c16d12b461200a095dab0fc4",
          "bytes": 977941,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "61f2882e07e2fc3a6b96d9b8f303ba6932b403d72aff7ac4844f367407b22d61",
          "bytes": 864950,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "8e528bce2306004331ebdab19c10bccc6690fb29ab0225f823d277396577b8a2",
          "bytes": 30030,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "4440d960e002da1f2588832ff0790ede53a4d6f757f85b6b88deaf8a27bee9bd",
          "bytes": 13841,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "235a8c79ce08cac29e983c38afd08422e7a4712ed8ee7711af8638de6f8d7ada",
          "bytes": 205154,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "81b9f61eb6a26408c082de6c5be5fa37965f02555b806f693c3f78cdd41f68ae",
          "bytes": 144302,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "2ac0272ead96a4431efde4a4b77ef0b6e5b9f103242f9f247aa94323fd02ad08",
          "bytes": 11244,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "222734810e447ce9d5aa9c80964ffd75a06a19d027ca9697933178da88a516bf",
          "bytes": 6427,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "1c3c67095b564849806f3fcb376a16b0cd3a47eedf2d245dfee9d4ffc3740e79",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-16T15:41:27.000Z:2ee9ad745ea0",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-16T15:41:27.000Z",
          "sourcePublishedAt": "2026-07-16T15:41:27.000Z",
          "retrievedAt": "2026-07-16T15:53:49.645Z",
          "computedAt": "2026-07-16T17:52:49+02:00",
          "value": 54,
          "rawValue": 54.19478403312738,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "2ee9ad745ea0dd44766dfc5f92aa907f5eeb2fac5911f67d76b22d78f116b50b",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-16T15:41:27.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-16T15:41:27.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:52:49+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-16T15:41:27.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-16T15:41:27.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:52:49+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-16T15:41:27.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-16T15:41:27.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:52:49+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-16T15:41:27.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-16T15:41:27.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:52:49+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-16T17:52:49+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-16T15:41:27.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:52:49+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:41:27.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-16T15:41:27.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:52:49+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:41:27.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-16T15:41:27.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:52:49+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:41:27.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-16T15:41:27.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:52:49+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:41:27.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-16T15:41:27.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:52:49+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:41:27.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/"
        }
      },
      "changes": {
        "generated": "2026-07-16T17:52:49+02:00",
        "latest": [
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "bcf3385d6e6e50bfe90542e989b4915d111568c8f290c8f3249795971cda6658",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "7dc8e910631e4bf87d652ed3d99ce0258e2b1535b344e876b22fd5391abf0c7b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "f2d5d69bdc6b00d2895ee0d6e538a1ec0e85870ddd2e72f4654d8351f4df63f1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "b735d43330d0deee2a865e6fe86bc44103ecec976ce00fdf22dfcdc73d58dd1b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "aa2c0074e39131a9",
            "date": "2026-07-15T20:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "stablecoins-the-marginal-buyer-of-us-treasuries",
            "title": "Stablecoins, the marginal buyer of US Treasuries",
            "url": "https://l0g.fr/en/analysis/stablecoins-the-marginal-buyer-of-us-treasuries/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Stablecoins, the marginal buyer of US Treasuries.",
            "objectId": "article:en:stablecoins-the-marginal-buyer-of-us-treasuries",
            "previousVersion": null,
            "currentVersion": "2026-07-15T20:15:00.000Z",
            "previousHash": null,
            "currentHash": "19b8aa0b5436f72bab06471b583a8207d012238f053cbfaf01483005ff21c56f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add487e40dcd2183",
            "date": "2026-07-15T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "stablecoins-acheteur-marginal-bon-du-tresor",
            "title": "Les stablecoins, acheteur marginal du bon du Trésor américain",
            "url": "https://l0g.fr/posts/stablecoins-acheteur-marginal-bon-du-tresor/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les stablecoins, acheteur marginal du bon du Trésor américain.",
            "objectId": "article:stablecoins-acheteur-marginal-bon-du-tresor",
            "previousVersion": null,
            "currentVersion": "2026-07-15T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "3e38c7258e7d224d9d532a9596df7ee3894d78ee4e922b72e4c4ba8d8071551f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "024c1d2c34962687",
            "date": "2026-07-15T16:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "valeur-residuelle-garantie-credit-infrastructure-ia",
            "title": "La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA",
            "url": "https://l0g.fr/posts/valeur-residuelle-garantie-credit-infrastructure-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA.",
            "objectId": "article:valeur-residuelle-garantie-credit-infrastructure-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-15T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "a3db5507033b27cde1db113879b611d38cb4a77c3ea62d3ded4151302528c3e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4fa655bc8d4580e1",
            "date": "2026-07-14T14:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "iran-war-tankers-and-energy-infrastructure-inventory",
            "title": "Iran war: an inventory of the oil and gas ships and infrastructure struck",
            "url": "https://l0g.fr/en/analysis/iran-war-tankers-and-energy-infrastructure-inventory/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Iran war: an inventory of the oil and gas ships and infrastructure struck.",
            "objectId": "article:en:iran-war-tankers-and-energy-infrastructure-inventory",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:20:00.000Z",
            "previousHash": null,
            "currentHash": "c29ce2147bc26dc7b3a8070b67d113424333e281231d7d3242e5ff4d52d80a17",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9294180323712fae",
            "date": "2026-07-14T14:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-2026-iran-war-economic-political-earthquake",
            "title": "The 2026 Iran war: anatomy of a global economic and political earthquake",
            "url": "https://l0g.fr/en/analysis/the-2026-iran-war-economic-political-earthquake/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The 2026 Iran war: anatomy of a global economic and political earthquake.",
            "objectId": "article:en:the-2026-iran-war-economic-political-earthquake",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:10:00.000Z",
            "previousHash": null,
            "currentHash": "19d1300388e44124a385f38adeb03318d89cb6371f6b7f09afa4754925e59c38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "23d7286096a01df0e732b418e70c09ce5b4d5535480e7ad4fc2582c78c74d435"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260716T175617+0200-2d057f0c9be0-29513418807-1",
      "date": "2026-07-16",
      "observedAt": "2026-07-16T15:56:25.000Z",
      "retrievedAt": "2026-07-16T15:57:15.348Z",
      "computedAt": "2026-07-16T17:56:17+02:00",
      "gitSha": "2d057f0c9be0174f0a3d9159c8df55ee643b5374",
      "previousFrameHash": "23d7286096a01df0e732b418e70c09ce5b4d5535480e7ad4fc2582c78c74d435",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29513418807",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "dae2997ac17e1e668afa5ce88345a37f9c6313b805c79b8c448ccaa30c9604e0",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "43e77ad62326ba15114467836d9831d28e68e78c5b8fffcbfe22b12e884cb053",
          "bytes": 1309373,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "2ad6cd4baad5ed545900d2b90794442915879035a80beafd5f53f57ac52b8777",
          "bytes": 2860377,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "f6e1a66e2715846595ef1ce4b5636112037ea7c625953928f3ecef3438c7f5dc",
          "bytes": 977941,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "b59dd52fd7b700b08403d5d3c4649b413c764a176217c0e79f8fc9ef38495079",
          "bytes": 864950,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "8e528bce2306004331ebdab19c10bccc6690fb29ab0225f823d277396577b8a2",
          "bytes": 30030,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "deb0236517b9f18f8b57741161bb91a39570b7af6b36833feb5969761ece65e4",
          "bytes": 13841,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "2b7f137aceec3c413f1b73d6a47093b9c901b880987dea5f0921e450079d9b6e",
          "bytes": 205988,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "8f85a6fb39d6c64b182e1cebd47ba80a91389a133ab332292132b163d1012206",
          "bytes": 146801,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "4fb0ef15080e76ef4db22710b1c67e1f886bb8c6facdaa54b55b601a89fd53c5",
          "bytes": 11244,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "5ddb264d8c1482375ed20f4aa292b621c0a5617804046ba5f3de9a848696a9e0",
          "bytes": 6427,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "4e58ac19dbed76288119d88132578b928e5f7329d42bea5ff5b7ab7ec8392c82",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-16T15:56:25.000Z:550694bb8939",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-16T15:56:25.000Z",
          "sourcePublishedAt": "2026-07-16T15:56:25.000Z",
          "retrievedAt": "2026-07-16T15:57:15.348Z",
          "computedAt": "2026-07-16T17:56:17+02:00",
          "value": 54,
          "rawValue": 54.19478403312738,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "550694bb8939a4a38e9d402a8c6598fd218f90838845db99382a0717509da944",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-16T15:56:25.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-16T15:56:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:56:17+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-16T15:56:25.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-16T15:56:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:56:17+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-16T15:56:25.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-16T15:56:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:56:17+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-16T15:56:25.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-16T15:56:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:56:17+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-16T17:56:17+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-16T15:56:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:56:17+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:56:25.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-16T15:56:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:56:17+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:56:25.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-16T15:56:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:56:17+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:56:25.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-16T15:56:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:56:17+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:56:25.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-16T15:56:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:56:17+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:56:25.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/"
        }
      },
      "changes": {
        "generated": "2026-07-16T17:56:17+02:00",
        "latest": [
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "534e729019dbccec55de048367ca67cb5f66b0ccaf2ce78525958b12fd9d96ff",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "f1a2fa35427330845dd3f2e7f8ad08a88e51e2581552e6d1c8303cf5dc313adb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "cce06a3474880cd27c1ef014218bf45032de54f1b29aff9366c032193a5ca45f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2238a7dd8477ded9",
            "date": "2026-07-16T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-16-protocole",
            "title": "l0g Editorial Protocol 1.0 stable",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Publication du noyau normatif versionné : exigences EP-001 à EP-009, schémas article et paquet de preuves, article exemple, tests de conformité, empreintes, licences et métadonnées de citation.",
            "objectId": "policy:2026-07-16-protocole",
            "previousVersion": null,
            "currentVersion": "2026-07-16T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "14fb82b405f4ec4157b4538dc6f29569ebbd75faf59706475d94238ecda3fa46",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "6cdf20d089f44e336a4a8c09d417473ac17fd65ba45f7c7c6363a2d008a5ee18",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "aa2c0074e39131a9",
            "date": "2026-07-15T20:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "stablecoins-the-marginal-buyer-of-us-treasuries",
            "title": "Stablecoins, the marginal buyer of US Treasuries",
            "url": "https://l0g.fr/en/analysis/stablecoins-the-marginal-buyer-of-us-treasuries/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Stablecoins, the marginal buyer of US Treasuries.",
            "objectId": "article:en:stablecoins-the-marginal-buyer-of-us-treasuries",
            "previousVersion": null,
            "currentVersion": "2026-07-15T20:15:00.000Z",
            "previousHash": null,
            "currentHash": "19b8aa0b5436f72bab06471b583a8207d012238f053cbfaf01483005ff21c56f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add487e40dcd2183",
            "date": "2026-07-15T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "stablecoins-acheteur-marginal-bon-du-tresor",
            "title": "Les stablecoins, acheteur marginal du bon du Trésor américain",
            "url": "https://l0g.fr/posts/stablecoins-acheteur-marginal-bon-du-tresor/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les stablecoins, acheteur marginal du bon du Trésor américain.",
            "objectId": "article:stablecoins-acheteur-marginal-bon-du-tresor",
            "previousVersion": null,
            "currentVersion": "2026-07-15T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "483deffb922ede78eddc8325a38225c8dc6f380298020ecf46813fb8767ad82b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "024c1d2c34962687",
            "date": "2026-07-15T16:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "valeur-residuelle-garantie-credit-infrastructure-ia",
            "title": "La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA",
            "url": "https://l0g.fr/posts/valeur-residuelle-garantie-credit-infrastructure-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA.",
            "objectId": "article:valeur-residuelle-garantie-credit-infrastructure-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-15T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "a1c71972c23a831fd39b474a686b8ed83b0f3917a6c7d81dbb29224957156bf2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4fa655bc8d4580e1",
            "date": "2026-07-14T14:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "iran-war-tankers-and-energy-infrastructure-inventory",
            "title": "Iran war: an inventory of the oil and gas ships and infrastructure struck",
            "url": "https://l0g.fr/en/analysis/iran-war-tankers-and-energy-infrastructure-inventory/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Iran war: an inventory of the oil and gas ships and infrastructure struck.",
            "objectId": "article:en:iran-war-tankers-and-energy-infrastructure-inventory",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:20:00.000Z",
            "previousHash": null,
            "currentHash": "c29ce2147bc26dc7b3a8070b67d113424333e281231d7d3242e5ff4d52d80a17",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "d07ba7817764dfe97acb787319a27570e17b0a930d7caa672db0c32e974b83d9"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260716T175934+0200-7d922722cfce-29513647527-1",
      "date": "2026-07-16",
      "observedAt": "2026-07-16T15:56:25.000Z",
      "retrievedAt": "2026-07-16T16:00:30.963Z",
      "computedAt": "2026-07-16T17:59:34+02:00",
      "gitSha": "7d922722cfce841fa77d059f063ed102f3ceec6c",
      "previousFrameHash": "d07ba7817764dfe97acb787319a27570e17b0a930d7caa672db0c32e974b83d9",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29513647527",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "dae2997ac17e1e668afa5ce88345a37f9c6313b805c79b8c448ccaa30c9604e0",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "445dee2319dbed6b7da09285f6d5cec4156963917e815b46b4b34682ea3b23fd",
          "bytes": 1309373,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "2ad6cd4baad5ed545900d2b90794442915879035a80beafd5f53f57ac52b8777",
          "bytes": 2860377,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "03398beee7993386c662a7fc515c7eac3e8f249a48b82a68fb78e8b204a914aa",
          "bytes": 977941,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "94d67c0e5ae8fcf9faabecc28d5188917c9ab455fafbdf8a5a0573373d249c14",
          "bytes": 864950,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "8e528bce2306004331ebdab19c10bccc6690fb29ab0225f823d277396577b8a2",
          "bytes": 30030,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "10c9a181a04752b23395faa118162dc9ed1bdb7c8f179469c329badc37059ffc",
          "bytes": 13841,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "8c5460718f296b679cab253a56a02e6867af09a79b6fdbabdcf0ce5bfb36d200",
          "bytes": 205988,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "8783f2ac1d7ed4b0fa5ece2b951483c25798277ac64b8b42ee14b0920fe106fe",
          "bytes": 146801,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "22fdb20174e0a518d4c8c4aa674f6521a3736c541e14832813e8ba10713d5363",
          "bytes": 11244,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "f415e92edcd941f59a8488f079203fcb10b86c50a23026080ed581f33751f122",
          "bytes": 6427,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "32debae834de8d3679571a327fd937a0ee9482bc26e2e607c58496e9b5fe92e3",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-16T15:56:25.000Z:e0f012a829e4",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-16T15:56:25.000Z",
          "sourcePublishedAt": "2026-07-16T15:56:25.000Z",
          "retrievedAt": "2026-07-16T16:00:30.963Z",
          "computedAt": "2026-07-16T17:59:34+02:00",
          "value": 54,
          "rawValue": 54.19478403312738,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "e0f012a829e4b9bcf64b077be072325ef1458ccae238bfb38f59c0df7b514d6d",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-16T15:56:25.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-16T15:56:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:59:34+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-16T15:56:25.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-16T15:56:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:59:34+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-16T15:56:25.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-16T15:56:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:59:34+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-16T15:56:25.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-16T15:56:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T17:59:34+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-16T17:59:34+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-16T15:56:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:59:34+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:56:25.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-16T15:56:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:59:34+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:56:25.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-16T15:56:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:59:34+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:56:25.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-16T15:56:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:59:34+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:56:25.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-16T15:56:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T17:59:34+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T15:56:25.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/"
        }
      },
      "changes": {
        "generated": "2026-07-16T17:59:34+02:00",
        "latest": [
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "4716d679e2108c58f8d79f61420e8ee2a0cd88edbcb833917d62133fd28a8536",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "8d1bb3bd52ff4d95a52eb2f58c99648c49a2e9306db9df86a9b4ad6663d72a74",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "0fffd8701c9d8684b5d3cc7e7bf6c4e435d2efe51db61d3ccdb789db85bde94c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2238a7dd8477ded9",
            "date": "2026-07-16T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-16-protocole",
            "title": "l0g Editorial Protocol 1.0 stable",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Publication du noyau normatif versionné : exigences EP-001 à EP-009, schémas article et paquet de preuves, article exemple, tests de conformité, empreintes, licences et métadonnées de citation.",
            "objectId": "policy:2026-07-16-protocole",
            "previousVersion": null,
            "currentVersion": "2026-07-16T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "14fb82b405f4ec4157b4538dc6f29569ebbd75faf59706475d94238ecda3fa46",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "d831883289d92444542ecf85246bfa3d49b4d6c2a35db496dbe0d1fc480d16a7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "aa2c0074e39131a9",
            "date": "2026-07-15T20:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "stablecoins-the-marginal-buyer-of-us-treasuries",
            "title": "Stablecoins, the marginal buyer of US Treasuries",
            "url": "https://l0g.fr/en/analysis/stablecoins-the-marginal-buyer-of-us-treasuries/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Stablecoins, the marginal buyer of US Treasuries.",
            "objectId": "article:en:stablecoins-the-marginal-buyer-of-us-treasuries",
            "previousVersion": null,
            "currentVersion": "2026-07-15T20:15:00.000Z",
            "previousHash": null,
            "currentHash": "19b8aa0b5436f72bab06471b583a8207d012238f053cbfaf01483005ff21c56f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add487e40dcd2183",
            "date": "2026-07-15T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "stablecoins-acheteur-marginal-bon-du-tresor",
            "title": "Les stablecoins, acheteur marginal du bon du Trésor américain",
            "url": "https://l0g.fr/posts/stablecoins-acheteur-marginal-bon-du-tresor/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les stablecoins, acheteur marginal du bon du Trésor américain.",
            "objectId": "article:stablecoins-acheteur-marginal-bon-du-tresor",
            "previousVersion": null,
            "currentVersion": "2026-07-15T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "7cf59c710f0f390f45e4f263f4867f5f38c476e8f3c54687f352d6c860e05145",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "024c1d2c34962687",
            "date": "2026-07-15T16:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "valeur-residuelle-garantie-credit-infrastructure-ia",
            "title": "La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA",
            "url": "https://l0g.fr/posts/valeur-residuelle-garantie-credit-infrastructure-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA.",
            "objectId": "article:valeur-residuelle-garantie-credit-infrastructure-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-15T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "ceac2ee7dded52b750200a28c9d2fa4c0b3295c7ee3609f0fbffe3e6bf70327e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4fa655bc8d4580e1",
            "date": "2026-07-14T14:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "iran-war-tankers-and-energy-infrastructure-inventory",
            "title": "Iran war: an inventory of the oil and gas ships and infrastructure struck",
            "url": "https://l0g.fr/en/analysis/iran-war-tankers-and-energy-infrastructure-inventory/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Iran war: an inventory of the oil and gas ships and infrastructure struck.",
            "objectId": "article:en:iran-war-tankers-and-energy-infrastructure-inventory",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:20:00.000Z",
            "previousHash": null,
            "currentHash": "c29ce2147bc26dc7b3a8070b67d113424333e281231d7d3242e5ff4d52d80a17",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "d81efd7d0261ffa0e5963dd4e46c385af27c5176d3f7312061c481df087c0a84"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260716T190453+0200-89fe7a2eaeb5-29518302908-1",
      "date": "2026-07-16",
      "observedAt": "2026-07-16T16:57:14.000Z",
      "retrievedAt": "2026-07-16T17:05:44.450Z",
      "computedAt": "2026-07-16T19:04:53+02:00",
      "gitSha": "89fe7a2eaeb5e5ab941ff46a54f5aaead7604c1b",
      "previousFrameHash": "d81efd7d0261ffa0e5963dd4e46c385af27c5176d3f7312061c481df087c0a84",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29518302908",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "dae2997ac17e1e668afa5ce88345a37f9c6313b805c79b8c448ccaa30c9604e0",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "53f180eee5b93ebe5557f46d323472e0ddfdec07e35ce0ddef8fc5d357858ff1",
          "bytes": 1309373,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "2ad6cd4baad5ed545900d2b90794442915879035a80beafd5f53f57ac52b8777",
          "bytes": 2860377,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "7068d135ce9c90a25ab742f042e78ceebe75d5b735e14318bd2d9ac7c09c1f5d",
          "bytes": 977941,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "66d611752798c4e951bf1a44ce59c195b0bb3b82fd8a2ab900e9d1c423c04d09",
          "bytes": 864950,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "8e528bce2306004331ebdab19c10bccc6690fb29ab0225f823d277396577b8a2",
          "bytes": 30030,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "7befb2d91a13ade03fa0935d334e1507dde85e942dc8acaea4f8239fa07c1668",
          "bytes": 13841,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "1ba2395dc6c46314e9ebe05b448b212e19eb42d7b96980049c53c3887133046f",
          "bytes": 205988,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "c8f08c848978632cdf2bab9e07ecd6072581f84d17965935c4fc1ac0140735d8",
          "bytes": 146339,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "98fe37c86d35c96f2435e017ae17908ff79bbe7149661eacac964e1dc13e22cd",
          "bytes": 11244,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "5be47adb033c412ed8af7da92be613f962a1df9229dca5a4077a64ac151fa0ed",
          "bytes": 6427,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "d32cffba6078d3619921b15dfe046b2695215df00ac6a2a147c0915c853ec5b0",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-16T16:57:14.000Z:1db5cbd0de9d",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-16T16:57:14.000Z",
          "sourcePublishedAt": "2026-07-16T16:57:14.000Z",
          "retrievedAt": "2026-07-16T17:05:44.450Z",
          "computedAt": "2026-07-16T19:04:53+02:00",
          "value": 54,
          "rawValue": 54.19478403312738,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "1db5cbd0de9d70320b884b1fc6a9a2684246fc4439d48413a95ea6caafc227a3",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-16T16:57:14.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-16T16:57:14.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T19:04:53+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-16T16:57:14.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-16T16:57:14.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T19:04:53+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-16T16:57:14.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-16T16:57:14.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T19:04:53+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-16T16:57:14.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-16T16:57:14.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T19:04:53+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-16T19:04:53+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-16T16:57:14.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T19:04:53+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T16:57:14.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-16T16:57:14.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T19:04:53+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T16:57:14.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-16T16:57:14.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T19:04:53+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T16:57:14.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-16T16:57:14.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T19:04:53+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T16:57:14.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-16T16:57:14.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T19:04:53+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T16:57:14.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/"
        }
      },
      "changes": {
        "generated": "2026-07-16T19:04:53+02:00",
        "latest": [
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "a58ce040d3fa93edc2500dc9720ff4fa146873896ecd80c731751d1fce49c6c4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "2bdfaa88309452c6664f41b8b7b81a1908dcb3afe1c9ffacbdedf327bec71f5d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "e138f652e0d3496597595dca0dd9fcffc9e3e797fad8478c613318263b5929b6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2238a7dd8477ded9",
            "date": "2026-07-16T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-16-protocole",
            "title": "l0g Editorial Protocol 1.0 stable",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Publication du noyau normatif versionné : exigences EP-001 à EP-009, schémas article et paquet de preuves, article exemple, tests de conformité, empreintes, licences et métadonnées de citation.",
            "objectId": "policy:2026-07-16-protocole",
            "previousVersion": null,
            "currentVersion": "2026-07-16T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "14fb82b405f4ec4157b4538dc6f29569ebbd75faf59706475d94238ecda3fa46",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "68640464904ee00cbdfd48baf3e1d55ce11df2dae975333659e947bdd1eb267c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "aa2c0074e39131a9",
            "date": "2026-07-15T20:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "stablecoins-the-marginal-buyer-of-us-treasuries",
            "title": "Stablecoins, the marginal buyer of US Treasuries",
            "url": "https://l0g.fr/en/analysis/stablecoins-the-marginal-buyer-of-us-treasuries/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Stablecoins, the marginal buyer of US Treasuries.",
            "objectId": "article:en:stablecoins-the-marginal-buyer-of-us-treasuries",
            "previousVersion": null,
            "currentVersion": "2026-07-15T20:15:00.000Z",
            "previousHash": null,
            "currentHash": "19b8aa0b5436f72bab06471b583a8207d012238f053cbfaf01483005ff21c56f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add487e40dcd2183",
            "date": "2026-07-15T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "stablecoins-acheteur-marginal-bon-du-tresor",
            "title": "Les stablecoins, acheteur marginal du bon du Trésor américain",
            "url": "https://l0g.fr/posts/stablecoins-acheteur-marginal-bon-du-tresor/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les stablecoins, acheteur marginal du bon du Trésor américain.",
            "objectId": "article:stablecoins-acheteur-marginal-bon-du-tresor",
            "previousVersion": null,
            "currentVersion": "2026-07-15T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "bac428f58d1a7b9aeb64edbbcebf095319f201883695f67cda2de6386ff4183e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "024c1d2c34962687",
            "date": "2026-07-15T16:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "valeur-residuelle-garantie-credit-infrastructure-ia",
            "title": "La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA",
            "url": "https://l0g.fr/posts/valeur-residuelle-garantie-credit-infrastructure-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA.",
            "objectId": "article:valeur-residuelle-garantie-credit-infrastructure-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-15T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "9b26e35dfb54ffc44ace8af0040f5e50ebd671e378823f131443db6c8c5bfe94",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4fa655bc8d4580e1",
            "date": "2026-07-14T14:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "iran-war-tankers-and-energy-infrastructure-inventory",
            "title": "Iran war: an inventory of the oil and gas ships and infrastructure struck",
            "url": "https://l0g.fr/en/analysis/iran-war-tankers-and-energy-infrastructure-inventory/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Iran war: an inventory of the oil and gas ships and infrastructure struck.",
            "objectId": "article:en:iran-war-tankers-and-energy-infrastructure-inventory",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:20:00.000Z",
            "previousHash": null,
            "currentHash": "c29ce2147bc26dc7b3a8070b67d113424333e281231d7d3242e5ff4d52d80a17",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "8e8b2a76c3699068ce12a5cbf7bcc81aaa3137e5b156b07fee836c434af1794e"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260716T193757+0200-df6ea63ed8ea-29520586461-1",
      "date": "2026-07-16",
      "observedAt": "2026-07-16T17:27:25.000Z",
      "retrievedAt": "2026-07-16T17:38:54.952Z",
      "computedAt": "2026-07-16T19:37:57+02:00",
      "gitSha": "df6ea63ed8eac25b9e0053dacaccec57cfc6350b",
      "previousFrameHash": "8e8b2a76c3699068ce12a5cbf7bcc81aaa3137e5b156b07fee836c434af1794e",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29520586461",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "dae2997ac17e1e668afa5ce88345a37f9c6313b805c79b8c448ccaa30c9604e0",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "fcb85bb35da54234d8fc9d1cdbf402aa6b250bc6ef4e0f96542e1ba80b1ab94d",
          "bytes": 1309373,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "2ad6cd4baad5ed545900d2b90794442915879035a80beafd5f53f57ac52b8777",
          "bytes": 2860377,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "e8eb8cfafba6e29ddc7f3caf5af609db042f2e2e3c89808956da45f62b78e99e",
          "bytes": 977941,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "41a56776d4d317931866d8545cf7279e54fe3619b526429e19431b2440e35ee3",
          "bytes": 864950,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "8e528bce2306004331ebdab19c10bccc6690fb29ab0225f823d277396577b8a2",
          "bytes": 30030,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "31889099add1229515cd003f2fb878ac8cdec7007205cf060ee7d89aa6b2833b",
          "bytes": 13841,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "e8fb7c0b9b7b0c3344175c50fdc7388ab8280a0baa6985ceb8e41867a90fa45e",
          "bytes": 205988,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "00dea875d8f970d143e89aaded192a80105f16d6bf1639228b07595cd371e54a",
          "bytes": 146339,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "bd87afb548a27129e7d5d3f571b35a2b693914335f58a6d768b560e9b8c93e69",
          "bytes": 11244,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "e9374a44889b02e70ab2337302d7f686a74d865816ba9837d761856ed7aa8866",
          "bytes": 6427,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "ef8938ece984ed8074a2157e8706ba483119a4ff3d4c254b706316c78105b645",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-16T17:27:25.000Z:1fa7608ded91",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-16T17:27:25.000Z",
          "sourcePublishedAt": "2026-07-16T17:27:25.000Z",
          "retrievedAt": "2026-07-16T17:38:54.952Z",
          "computedAt": "2026-07-16T19:37:57+02:00",
          "value": 54,
          "rawValue": 54.19478403312738,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "1fa7608ded915b669d9c181b77c453f01cc190970821b49fbfe4593569daa7dc",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-16T17:27:25.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-16T17:27:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T19:37:57+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-16T17:27:25.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-16T17:27:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T19:37:57+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-16T17:27:25.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-16T17:27:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T19:37:57+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-16T17:27:25.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-16T17:27:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T19:37:57+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-16T19:37:57+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-16T17:27:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T19:37:57+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T17:27:25.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-16T17:27:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T19:37:57+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T17:27:25.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-16T17:27:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T19:37:57+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T17:27:25.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-16T17:27:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T19:37:57+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T17:27:25.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-16T17:27:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T19:37:57+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T17:27:25.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/"
        }
      },
      "changes": {
        "generated": "2026-07-16T19:37:57+02:00",
        "latest": [
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "3e95de4630dd06a408c984ba812df3d897f20528de3286d9eb83478e31786d0d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "d5f10a2a2a24cc82759265d2a0db7c35be65c2014ea462e752078f24805cde5d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "8ec203f51c7339bd57196d358b2242fc191c43a97cfab943d17b5076f6a820d7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2238a7dd8477ded9",
            "date": "2026-07-16T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-16-protocole",
            "title": "l0g Editorial Protocol 1.0 stable",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Publication du noyau normatif versionné : exigences EP-001 à EP-009, schémas article et paquet de preuves, article exemple, tests de conformité, empreintes, licences et métadonnées de citation.",
            "objectId": "policy:2026-07-16-protocole",
            "previousVersion": null,
            "currentVersion": "2026-07-16T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "14fb82b405f4ec4157b4538dc6f29569ebbd75faf59706475d94238ecda3fa46",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "62557610ae8e65800515ad1d3870c1724c5c117a5c41a377ef303bff3ce64063",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "aa2c0074e39131a9",
            "date": "2026-07-15T20:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "stablecoins-the-marginal-buyer-of-us-treasuries",
            "title": "Stablecoins, the marginal buyer of US Treasuries",
            "url": "https://l0g.fr/en/analysis/stablecoins-the-marginal-buyer-of-us-treasuries/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Stablecoins, the marginal buyer of US Treasuries.",
            "objectId": "article:en:stablecoins-the-marginal-buyer-of-us-treasuries",
            "previousVersion": null,
            "currentVersion": "2026-07-15T20:15:00.000Z",
            "previousHash": null,
            "currentHash": "19b8aa0b5436f72bab06471b583a8207d012238f053cbfaf01483005ff21c56f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add487e40dcd2183",
            "date": "2026-07-15T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "stablecoins-acheteur-marginal-bon-du-tresor",
            "title": "Les stablecoins, acheteur marginal du bon du Trésor américain",
            "url": "https://l0g.fr/posts/stablecoins-acheteur-marginal-bon-du-tresor/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les stablecoins, acheteur marginal du bon du Trésor américain.",
            "objectId": "article:stablecoins-acheteur-marginal-bon-du-tresor",
            "previousVersion": null,
            "currentVersion": "2026-07-15T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "f6554f042d433588259539f2d67204290cad55b9eb214f88d83bbf2f3e487459",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "024c1d2c34962687",
            "date": "2026-07-15T16:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "valeur-residuelle-garantie-credit-infrastructure-ia",
            "title": "La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA",
            "url": "https://l0g.fr/posts/valeur-residuelle-garantie-credit-infrastructure-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA.",
            "objectId": "article:valeur-residuelle-garantie-credit-infrastructure-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-15T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "158cba1e48f50b0a675c8a27afe18896ed35e42296407b40735be5496bd3e504",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4fa655bc8d4580e1",
            "date": "2026-07-14T14:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "iran-war-tankers-and-energy-infrastructure-inventory",
            "title": "Iran war: an inventory of the oil and gas ships and infrastructure struck",
            "url": "https://l0g.fr/en/analysis/iran-war-tankers-and-energy-infrastructure-inventory/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Iran war: an inventory of the oil and gas ships and infrastructure struck.",
            "objectId": "article:en:iran-war-tankers-and-energy-infrastructure-inventory",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:20:00.000Z",
            "previousHash": null,
            "currentHash": "c29ce2147bc26dc7b3a8070b67d113424333e281231d7d3242e5ff4d52d80a17",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "f4b25047964bc171f66dc1b0d3e8bf58238cec048a75f1ef636ba439cc7d9c3c"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260716T210837+0200-354e51b4a417-29526844230-1",
      "date": "2026-07-16",
      "observedAt": "2026-07-16T18:58:09.000Z",
      "retrievedAt": "2026-07-16T19:09:35.430Z",
      "computedAt": "2026-07-16T21:08:37+02:00",
      "gitSha": "354e51b4a4179f4191df6ca13f34d8b06aae1a2b",
      "previousFrameHash": "f4b25047964bc171f66dc1b0d3e8bf58238cec048a75f1ef636ba439cc7d9c3c",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29526844230",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "dae2997ac17e1e668afa5ce88345a37f9c6313b805c79b8c448ccaa30c9604e0",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "64cd2d58f8bdf3ff78f9442a92d2eef0bfabfab8f09e2910f551e4930b19712d",
          "bytes": 1309373,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "2ad6cd4baad5ed545900d2b90794442915879035a80beafd5f53f57ac52b8777",
          "bytes": 2860377,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "e3fb2480734c4c5f94352398b82c5a00152ddabb8d538a9878dcb6a10c4851d7",
          "bytes": 977941,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "2fec7ca686675f715cfd9380ae7f8dce1da10e020c9516c4c6ddd738bbb7daa8",
          "bytes": 864950,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "8e528bce2306004331ebdab19c10bccc6690fb29ab0225f823d277396577b8a2",
          "bytes": 30030,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "cc8ea21e3877e783850a6e013098c852064e015289355fbfa04aeaa7c0417928",
          "bytes": 13841,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "fbc3edb9cced8f235540761eeefd4feafb375f4b303f589e0da41dbfc8f5ee80",
          "bytes": 205988,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "d1f1a2970011113cc117b7059169cc9c2d44630a5c6d17c4700be669843ae771",
          "bytes": 146511,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "bdf4e02347af31348500191ddf2cc28c897806166902ddae2da7f09c54232086",
          "bytes": 11243,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "551551ba8c511fe4a958029c93aba322a37e43eb66942c3dfd91228483183ef9",
          "bytes": 6426,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "4f83b3c97b48efd14534b00dd58ed14e12c9bc9ea98d47e5f067bf2d915881c2",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-16T18:58:09.000Z:c005c5a3cfd2",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-16T18:58:09.000Z",
          "sourcePublishedAt": "2026-07-16T18:58:09.000Z",
          "retrievedAt": "2026-07-16T19:09:35.430Z",
          "computedAt": "2026-07-16T21:08:37+02:00",
          "value": 54,
          "rawValue": 54.19444694484612,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "c005c5a3cfd241291685aea52809c0e01874b24d44e2a7c46149bc77e2780fd0",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-16T18:58:09.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-16T18:58:09.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T21:08:37+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-16T18:58:09.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-16T18:58:09.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T21:08:37+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-16T18:58:09.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-16T18:58:09.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T21:08:37+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-16T18:58:09.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-16T18:58:09.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T21:08:37+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-16T21:08:37+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-16T18:58:09.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T21:08:37+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T18:58:09.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-16T18:58:09.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T21:08:37+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T18:58:09.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-16T18:58:09.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T21:08:37+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T18:58:09.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-16T18:58:09.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T21:08:37+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T18:58:09.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-16T18:58:09.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T21:08:37+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T18:58:09.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/"
        }
      },
      "changes": {
        "generated": "2026-07-16T21:08:37+02:00",
        "latest": [
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "f9295f0bf69e919ddfb268e1620eafb7ad770a595193c95754d239177a9607c7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "ca84802eafa22a3088c02c6ad427421cbd3766f7c632a718b4a9e6512c7423f6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "a0c9562251a6311ff418ef87b9e4a15f52eb3c966db10d54802012ca0fa536f2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2238a7dd8477ded9",
            "date": "2026-07-16T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-16-protocole",
            "title": "l0g Editorial Protocol 1.0 stable",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Publication du noyau normatif versionné : exigences EP-001 à EP-009, schémas article et paquet de preuves, article exemple, tests de conformité, empreintes, licences et métadonnées de citation.",
            "objectId": "policy:2026-07-16-protocole",
            "previousVersion": null,
            "currentVersion": "2026-07-16T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "14fb82b405f4ec4157b4538dc6f29569ebbd75faf59706475d94238ecda3fa46",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "d772ba3e97ebbcd6deb39ead409d1c3e4b3da37449e19ce25275a06955371655",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "aa2c0074e39131a9",
            "date": "2026-07-15T20:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "stablecoins-the-marginal-buyer-of-us-treasuries",
            "title": "Stablecoins, the marginal buyer of US Treasuries",
            "url": "https://l0g.fr/en/analysis/stablecoins-the-marginal-buyer-of-us-treasuries/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Stablecoins, the marginal buyer of US Treasuries.",
            "objectId": "article:en:stablecoins-the-marginal-buyer-of-us-treasuries",
            "previousVersion": null,
            "currentVersion": "2026-07-15T20:15:00.000Z",
            "previousHash": null,
            "currentHash": "19b8aa0b5436f72bab06471b583a8207d012238f053cbfaf01483005ff21c56f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add487e40dcd2183",
            "date": "2026-07-15T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "stablecoins-acheteur-marginal-bon-du-tresor",
            "title": "Les stablecoins, acheteur marginal du bon du Trésor américain",
            "url": "https://l0g.fr/posts/stablecoins-acheteur-marginal-bon-du-tresor/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les stablecoins, acheteur marginal du bon du Trésor américain.",
            "objectId": "article:stablecoins-acheteur-marginal-bon-du-tresor",
            "previousVersion": null,
            "currentVersion": "2026-07-15T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "58c9b7386fcf926c5a72759415b0c1507e82c80b804bb4983b4492c3b2566a9e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "024c1d2c34962687",
            "date": "2026-07-15T16:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "valeur-residuelle-garantie-credit-infrastructure-ia",
            "title": "La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA",
            "url": "https://l0g.fr/posts/valeur-residuelle-garantie-credit-infrastructure-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La valeur résiduelle garantie, l'angle mort du crédit qui finance l'IA.",
            "objectId": "article:valeur-residuelle-garantie-credit-infrastructure-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-15T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "4394bc442b7a4297569de877c1bf47b21fa760ed8c5303daffa677659b964262",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4fa655bc8d4580e1",
            "date": "2026-07-14T14:20:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "iran-war-tankers-and-energy-infrastructure-inventory",
            "title": "Iran war: an inventory of the oil and gas ships and infrastructure struck",
            "url": "https://l0g.fr/en/analysis/iran-war-tankers-and-energy-infrastructure-inventory/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Iran war: an inventory of the oil and gas ships and infrastructure struck.",
            "objectId": "article:en:iran-war-tankers-and-energy-infrastructure-inventory",
            "previousVersion": null,
            "currentVersion": "2026-07-14T14:20:00.000Z",
            "previousHash": null,
            "currentHash": "c29ce2147bc26dc7b3a8070b67d113424333e281231d7d3242e5ff4d52d80a17",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "37bb586edd822a086a51b08ed709f4772a188528032d05f7f1edd178af3ba6b0"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260716T212111+0200-495a98c342f0-29527658335-1",
      "date": "2026-07-16",
      "observedAt": "2026-07-16T19:13:14.000Z",
      "retrievedAt": "2026-07-16T19:21:53.546Z",
      "computedAt": "2026-07-16T21:21:11+02:00",
      "gitSha": "495a98c342f030e78c79969ba4294ac715a31967",
      "previousFrameHash": "37bb586edd822a086a51b08ed709f4772a188528032d05f7f1edd178af3ba6b0",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29527658335",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "d2665e851695c0927c808f5fb2bbe37a872c192553d5c341a1ff7db97bce783e",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "c1b10732d041c23d38e5fdc557a0114f60e3c2d2d6b2c378504188f07c039dee",
          "bytes": 1339770,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ebf0bafa477d9976feb364b0641e4de69ba0c59de0a4f10239a6858910de6f0c",
          "bytes": 2885694,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "76e7c6101d450912b1c15b8ba4f22d4e100163c69d6a867e65e1081d297f414e",
          "bytes": 1015348,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "424d1676e760172e61258ae267ec1c8d09a4f309d1f3f3b2924fcf6980037100",
          "bytes": 897098,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "ccda80f819a7c8453f43b2ca546b7fba907a7c7f3ec67616e8820b2e268ec37a",
          "bytes": 30355,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "c7715043c0cb18da9ee8f44f0358628b31118e31e407cd0a77ea0fc87b72118d",
          "bytes": 13791,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "a387b28fe9e411f40806536a7fe42c9289f147cb35ea10d49bbe6d633339a512",
          "bytes": 207684,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "18bab0e96d36b4705eb69b5b0526a56fb37a30322524a0e831ef4872f318e016",
          "bytes": 150162,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "b93eb8511065b8785b88dbe9d910ad40bc14ba9765ce16dd6b46313fa141507a",
          "bytes": 11243,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "884b6c6e8729f54a694504b03fc63ddfdbd3053acac5fbd866b7f4c61f131c0b",
          "bytes": 6426,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "99237f1608ec8962a674b18bbe115037cdf6595233cbbac44f1959178a485746",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-16T19:13:14.000Z:779a90f5320a",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-16T19:13:14.000Z",
          "sourcePublishedAt": "2026-07-16T19:13:14.000Z",
          "retrievedAt": "2026-07-16T19:21:53.546Z",
          "computedAt": "2026-07-16T21:21:11+02:00",
          "value": 54,
          "rawValue": 54.19444694484612,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "779a90f5320a42243f434798da0fc541f0d17767599ae6cbdb6d9c1eac9403f8",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-16T19:13:14.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-16T19:13:14.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T21:21:11+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-16T19:13:14.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-16T19:13:14.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T21:21:11+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-16T19:13:14.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-16T19:13:14.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T21:21:11+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-16T19:13:14.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-16T19:13:14.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-16T21:21:11+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-16T21:21:11+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-16T19:13:14.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T21:21:11+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T19:13:14.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-16T19:13:14.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T21:21:11+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T19:13:14.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-16T19:13:14.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T21:21:11+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T19:13:14.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-16T19:13:14.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T21:21:11+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T19:13:14.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-16T19:13:14.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-16T21:21:11+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-23T19:13:14.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/"
        }
      },
      "changes": {
        "generated": "2026-07-16T21:21:11+02:00",
        "latest": [
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "ba623f65f9295f42b5743cc965af6dc60f0e1986176887843248921a0df0f692",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "64ffb15ea9ccf84e8cc68761242dfb31f758c8fa48a1a80af5543c0b71729a3e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "88331ebe02d4755421f5dfdc602054879e7304339f6bfce6726923f05282e0a7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "3128c6e62e3ae6b42eee7a766983b2c2e75976f1fb03fb3d7498ecd2bf0f5804",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2238a7dd8477ded9",
            "date": "2026-07-16T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-16-protocole",
            "title": "l0g Editorial Protocol 1.0 stable",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Publication du noyau normatif versionné : exigences EP-001 à EP-009, schémas article et paquet de preuves, article exemple, tests de conformité, empreintes, licences et métadonnées de citation.",
            "objectId": "policy:2026-07-16-protocole",
            "previousVersion": null,
            "currentVersion": "2026-07-16T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "14fb82b405f4ec4157b4538dc6f29569ebbd75faf59706475d94238ecda3fa46",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "71d51eec006cccad9521388ad21f52e4d8ac0e4af043b4ed1d69df675592f826",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "aa2c0074e39131a9",
            "date": "2026-07-15T20:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "stablecoins-the-marginal-buyer-of-us-treasuries",
            "title": "Stablecoins, the marginal buyer of US Treasuries",
            "url": "https://l0g.fr/en/analysis/stablecoins-the-marginal-buyer-of-us-treasuries/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Stablecoins, the marginal buyer of US Treasuries.",
            "objectId": "article:en:stablecoins-the-marginal-buyer-of-us-treasuries",
            "previousVersion": null,
            "currentVersion": "2026-07-15T20:15:00.000Z",
            "previousHash": null,
            "currentHash": "19b8aa0b5436f72bab06471b583a8207d012238f053cbfaf01483005ff21c56f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add487e40dcd2183",
            "date": "2026-07-15T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "stablecoins-acheteur-marginal-bon-du-tresor",
            "title": "Les stablecoins, acheteur marginal du bon du Trésor américain",
            "url": "https://l0g.fr/posts/stablecoins-acheteur-marginal-bon-du-tresor/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les stablecoins, acheteur marginal du bon du Trésor américain.",
            "objectId": "article:stablecoins-acheteur-marginal-bon-du-tresor",
            "previousVersion": null,
            "currentVersion": "2026-07-15T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "7884c1b1aff1edf01ee510bc348f97089d05f38466777d162e7d94ec62117cc8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "9698787bde5ab292d35664df377101d9654f47d5e18c9840a811e8c3bb1c61e0"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T093042+0200-478d5e448e94-29563647376-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T07:36:34.000Z",
      "retrievedAt": "2026-07-17T07:37:38.049Z",
      "computedAt": "2026-07-17T09:30:42+02:00",
      "gitSha": "478d5e448e9442a7ebc3d1d9e207b6586eafe6d5",
      "previousFrameHash": "9698787bde5ab292d35664df377101d9654f47d5e18c9840a811e8c3bb1c61e0",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29563647376",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "d2665e851695c0927c808f5fb2bbe37a872c192553d5c341a1ff7db97bce783e",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "f06925884c36c0deec4d66be38bc76feaad05de6f960efbb65aa13196b4611fa",
          "bytes": 1339770,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ebf0bafa477d9976feb364b0641e4de69ba0c59de0a4f10239a6858910de6f0c",
          "bytes": 2885694,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "761cd1390ab51937a10c758f61cae9a7b799300bafcb4cf9c2f38f901f1730a8",
          "bytes": 1015348,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "354a2632b2aad34e053704978da7bff13028074c8489a03dccc7a2d3b834cc41",
          "bytes": 897098,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "ccda80f819a7c8453f43b2ca546b7fba907a7c7f3ec67616e8820b2e268ec37a",
          "bytes": 30355,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "5cdd32f45182dfe9284ec4078c24131d451a97a1623cb75ebbc49d40f306e8fa",
          "bytes": 13791,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "58b8676b1990bb522a41fc4b5ed49a70bb4c78c630874b13e042da9ea224f082",
          "bytes": 207684,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "8c3463b26ac3f7ca2101076bb918a7fbe8b9ea1a6e16edf864beefc85d87775e",
          "bytes": 147490,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "acb31e9ecb5975042c4515dfd91bc61b22668a7fdf5dcae0b20f20a7db82c982",
          "bytes": 11246,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "def2d80f9ca0d0471cf8cc36194b275835f3831454cb380c86c6a9a304c650c7",
          "bytes": 6429,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "4ab93dfce94dd9661abc37c6f0a3adaecf3a687a01596fe2d2fd71568fd43cc0",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-17T07:36:34.000Z:fa12113a5845",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-17T07:36:34.000Z",
          "sourcePublishedAt": "2026-07-17T07:36:34.000Z",
          "retrievedAt": "2026-07-17T07:37:38.049Z",
          "computedAt": "2026-07-17T09:30:42+02:00",
          "value": 54,
          "rawValue": 54.17179771094327,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "fa12113a58456b3ec0ec7d2aa040ce54912feca5f247155be441127b5174f619",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-17T07:36:34.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-17T07:36:34.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T09:30:42+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-17T07:36:34.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-17T07:36:34.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T09:30:42+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-17T07:36:34.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-17T07:36:34.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T09:30:42+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-17T07:36:34.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-17T07:36:34.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T09:30:42+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T09:30:42+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T07:36:34.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T09:30:42+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T07:36:34.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-17T07:36:34.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T09:30:42+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T07:36:34.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-17T07:36:34.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T09:30:42+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T07:36:34.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-17T07:36:34.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T09:30:42+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T07:36:34.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-17T07:36:34.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T09:30:42+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T07:36:34.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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T09:30:42+02:00",
        "latest": [
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "671778c802da731a01f4c0884764f6e3a0ac4b115bdd957efc6927f3b76f8c30",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "c1cd0eea0fdce741ca3838f779248ed338157b6e440faed35efe06bf56b5f557",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "2f75f183ae5bcac1572476497b36b4eb472c1ee258ce3b055a2afec6abfcce8e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "59036c3711ffa7aae6cbd3019d53039fcbaba2b00c6900a61740051e1a46a3b2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2238a7dd8477ded9",
            "date": "2026-07-16T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-16-protocole",
            "title": "l0g Editorial Protocol 1.0 stable",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Publication du noyau normatif versionné : exigences EP-001 à EP-009, schémas article et paquet de preuves, article exemple, tests de conformité, empreintes, licences et métadonnées de citation.",
            "objectId": "policy:2026-07-16-protocole",
            "previousVersion": null,
            "currentVersion": "2026-07-16T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "14fb82b405f4ec4157b4538dc6f29569ebbd75faf59706475d94238ecda3fa46",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "00788e00099b9822f0eabcf112336658232b070fc618abc06490cb0a66ad8d39",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "aa2c0074e39131a9",
            "date": "2026-07-15T20:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "stablecoins-the-marginal-buyer-of-us-treasuries",
            "title": "Stablecoins, the marginal buyer of US Treasuries",
            "url": "https://l0g.fr/en/analysis/stablecoins-the-marginal-buyer-of-us-treasuries/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Stablecoins, the marginal buyer of US Treasuries.",
            "objectId": "article:en:stablecoins-the-marginal-buyer-of-us-treasuries",
            "previousVersion": null,
            "currentVersion": "2026-07-15T20:15:00.000Z",
            "previousHash": null,
            "currentHash": "19b8aa0b5436f72bab06471b583a8207d012238f053cbfaf01483005ff21c56f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add487e40dcd2183",
            "date": "2026-07-15T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "stablecoins-acheteur-marginal-bon-du-tresor",
            "title": "Les stablecoins, acheteur marginal du bon du Trésor américain",
            "url": "https://l0g.fr/posts/stablecoins-acheteur-marginal-bon-du-tresor/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les stablecoins, acheteur marginal du bon du Trésor américain.",
            "objectId": "article:stablecoins-acheteur-marginal-bon-du-tresor",
            "previousVersion": null,
            "currentVersion": "2026-07-15T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "43bd758bde5ef8da1a4f6207a5e8fac5740d9ec2720588de66fab6582c10fb00",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "92e99f7507c35b638a068cff0bd9685d3e5e188f5f647bcdb6ebf67be1cf8641"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T094546+0200-3e8daa20af64-29564124198-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T07:36:34.000Z",
      "retrievedAt": "2026-07-17T07:46:24.599Z",
      "computedAt": "2026-07-17T09:45:46+02:00",
      "gitSha": "3e8daa20af6445a20aeddb6476a8ad6f9b894ae4",
      "previousFrameHash": "92e99f7507c35b638a068cff0bd9685d3e5e188f5f647bcdb6ebf67be1cf8641",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29564124198",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "d2665e851695c0927c808f5fb2bbe37a872c192553d5c341a1ff7db97bce783e",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "b663abcf960d5083378985f3cd69280a2d286e800e05f92a5b00f48967b58b34",
          "bytes": 1339770,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ebf0bafa477d9976feb364b0641e4de69ba0c59de0a4f10239a6858910de6f0c",
          "bytes": 2885694,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "ea3ef99ff33f2bc7c32de84a6838fe175659cb685fa9c3c4954b8bc4a2ff1b18",
          "bytes": 1015348,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "412b88248c0487aad379b73e25484a965a6bf4f1ca113ed38b2479799f6ab265",
          "bytes": 897098,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "ccda80f819a7c8453f43b2ca546b7fba907a7c7f3ec67616e8820b2e268ec37a",
          "bytes": 30355,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "061f0667f06e8cc3ccfbf74abb914f58069efcfdcb64f48acf4165aeaa09f9ec",
          "bytes": 13791,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "4ec0abca41ad4f255374c805ef295d6f2b82c8c5b5bc4ec4d27d7b71ffdd065d",
          "bytes": 207684,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "7dfbe603cff9efe758fe3da19e770c108cedf5c118cabc79fa76290a5897f0e1",
          "bytes": 147490,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "baf4582b6718681a0c4d75f9d4d06741d7a105411b5c827f4e96191a5db1129f",
          "bytes": 11246,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "f6b34f13392d086b4bd703e0ded4455fce9d21ed3e44238cdee22c4a498dfd5a",
          "bytes": 6429,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "9bc7314ba79a643bac04d7a4e1369a8d6d44f3dd4f67e6dbb5a924e4df3c0b5a",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-17T07:36:34.000Z:6070bde47455",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-17T07:36:34.000Z",
          "sourcePublishedAt": "2026-07-17T07:36:34.000Z",
          "retrievedAt": "2026-07-17T07:46:24.599Z",
          "computedAt": "2026-07-17T09:45:46+02:00",
          "value": 54,
          "rawValue": 54.17179771094327,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "6070bde47455313a709d9f8a37fd132997f187b2392a838703e8c6413c510e46",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-17T07:36:34.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-17T07:36:34.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T09:45:46+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-17T07:36:34.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-17T07:36:34.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T09:45:46+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-17T07:36:34.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-17T07:36:34.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T09:45:46+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-17T07:36:34.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-17T07:36:34.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T09:45:46+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T09:45:46+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T07:36:34.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T09:45:46+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T07:36:34.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-17T07:36:34.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T09:45:46+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T07:36:34.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-17T07:36:34.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T09:45:46+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T07:36:34.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-17T07:36:34.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T09:45:46+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T07:36:34.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-17T07:36:34.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T09:45:46+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T07:36:34.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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T09:45:46+02:00",
        "latest": [
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "0b5fe595f608346a0d064a54766815c1b99826036c94d26b652da15803c9032b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "373f4be4d57cad3e78633ef183e49477d298e9640ae521615ddc46525fda590c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "08ce1284e65c6478d5b847daf9f33ec1faa961c567dbd520c7933ce2f6c7ec18",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "a4d5894b2786ab0bd47e1c5d89446989aa3b791da1940396fbebbb40e1020b48",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2238a7dd8477ded9",
            "date": "2026-07-16T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-16-protocole",
            "title": "l0g Editorial Protocol 1.0 stable",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Publication du noyau normatif versionné : exigences EP-001 à EP-009, schémas article et paquet de preuves, article exemple, tests de conformité, empreintes, licences et métadonnées de citation.",
            "objectId": "policy:2026-07-16-protocole",
            "previousVersion": null,
            "currentVersion": "2026-07-16T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "14fb82b405f4ec4157b4538dc6f29569ebbd75faf59706475d94238ecda3fa46",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "169ccec8d92a3b28d4b512c4a4d27dae9015286acd1c6ada83612e5265ef9d62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "aa2c0074e39131a9",
            "date": "2026-07-15T20:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "stablecoins-the-marginal-buyer-of-us-treasuries",
            "title": "Stablecoins, the marginal buyer of US Treasuries",
            "url": "https://l0g.fr/en/analysis/stablecoins-the-marginal-buyer-of-us-treasuries/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Stablecoins, the marginal buyer of US Treasuries.",
            "objectId": "article:en:stablecoins-the-marginal-buyer-of-us-treasuries",
            "previousVersion": null,
            "currentVersion": "2026-07-15T20:15:00.000Z",
            "previousHash": null,
            "currentHash": "19b8aa0b5436f72bab06471b583a8207d012238f053cbfaf01483005ff21c56f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add487e40dcd2183",
            "date": "2026-07-15T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "stablecoins-acheteur-marginal-bon-du-tresor",
            "title": "Les stablecoins, acheteur marginal du bon du Trésor américain",
            "url": "https://l0g.fr/posts/stablecoins-acheteur-marginal-bon-du-tresor/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les stablecoins, acheteur marginal du bon du Trésor américain.",
            "objectId": "article:stablecoins-acheteur-marginal-bon-du-tresor",
            "previousVersion": null,
            "currentVersion": "2026-07-15T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "2165c116021248bd2d24445b8f2eb3d98e04f9b6a553935929b6443816b707ac",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "92f49a34c22a9a9de1a6ecfd7d74a79390718636bf0be22c99c497e2dadecaca"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T100532+0200-04a04f9e1c91-29565244455-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T07:51:46.000Z",
      "retrievedAt": "2026-07-17T08:06:21.428Z",
      "computedAt": "2026-07-17T10:05:32+02:00",
      "gitSha": "04a04f9e1c917babd2a103f2d9e8c7f8a9c3213c",
      "previousFrameHash": "92f49a34c22a9a9de1a6ecfd7d74a79390718636bf0be22c99c497e2dadecaca",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29565244455",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "d2665e851695c0927c808f5fb2bbe37a872c192553d5c341a1ff7db97bce783e",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "6b6e4fb83e10b3ceb5d8be9993daba65ea556a26964b154248d7c4d3cdd88420",
          "bytes": 1339770,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ebf0bafa477d9976feb364b0641e4de69ba0c59de0a4f10239a6858910de6f0c",
          "bytes": 2885694,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "e92912c6b9baf22a3a331a22ebeaacfc0f8d575b59aef4ad6c29286474fa5af5",
          "bytes": 1015348,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "7dbe381a813026d5d50f6fcb1d51c5fbc987017dec7a73300664cea586fbb42a",
          "bytes": 897098,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "ccda80f819a7c8453f43b2ca546b7fba907a7c7f3ec67616e8820b2e268ec37a",
          "bytes": 30355,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "bac1ac0dc1adbd5ee141e9ec77bcc979aa44d7acb869f53c1c41133cae30d772",
          "bytes": 13791,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "a22fc77225bfd9429fcdd8408c4586f4ca22217f30041ce422e014d5b638dee5",
          "bytes": 207684,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "41d45e5451a7bf1f4dbd5e9395cecb836adc8f33030d20f9e848199c0c1e22d5",
          "bytes": 147020,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "d3d754da2d84232c50b5adb37b01c4de8de0e367652efa7758f0f259e109a831",
          "bytes": 11246,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "52aa839b3fd14fb4b01f51bbdd693cc73b403e0d9deefb445051c3762c470170",
          "bytes": 6429,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "33a05c6cd4418ae5e107216d4783117a3a13cc062d323e397f863a900a904b45",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-17T07:51:46.000Z:bacf5adcb937",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-17T07:51:46.000Z",
          "sourcePublishedAt": "2026-07-17T07:51:46.000Z",
          "retrievedAt": "2026-07-17T08:06:21.428Z",
          "computedAt": "2026-07-17T10:05:32+02:00",
          "value": 54,
          "rawValue": 54.17179771094327,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "bacf5adcb93710949dae36322fd486e9a347ecb9a015c0a79826a4f99828d25d",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-17T07:51:46.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-17T07:51:46.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T10:05:32+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-17T07:51:46.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-17T07:51:46.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T10:05:32+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-17T07:51:46.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-17T07:51:46.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T10:05:32+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-17T07:51:46.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-17T07:51:46.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T10:05:32+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T10:05:32+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T07:51:46.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T10:05:32+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T07:51:46.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-17T07:51:46.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T10:05:32+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T07:51:46.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-17T07:51:46.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T10:05:32+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T07:51:46.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-17T07:51:46.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T10:05:32+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T07:51:46.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-17T07:51:46.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T10:05:32+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T07:51:46.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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T10:05:32+02:00",
        "latest": [
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "fea84e926bc76a49394065c4239ad09b284e13d2d60e8be9547862e5a5f12e83",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "8c01c1eb8d578bf51da0478481a6d779509a55abd3679470f9ff51062d73e20f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "357fec40092784204cebe91365b3300043ec82b14079891390d751f912d6dcc3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "6bfb17dfc3f2aee4f3e64223441392dc78f4f1a1ef76c1f612fda4e53cdef0c8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2238a7dd8477ded9",
            "date": "2026-07-16T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-16-protocole",
            "title": "l0g Editorial Protocol 1.0 stable",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Publication du noyau normatif versionné : exigences EP-001 à EP-009, schémas article et paquet de preuves, article exemple, tests de conformité, empreintes, licences et métadonnées de citation.",
            "objectId": "policy:2026-07-16-protocole",
            "previousVersion": null,
            "currentVersion": "2026-07-16T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "14fb82b405f4ec4157b4538dc6f29569ebbd75faf59706475d94238ecda3fa46",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "e0149032811d05fe4af75eb9e9fef564406356976ae00a52c026cbe9db3c3369",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "aa2c0074e39131a9",
            "date": "2026-07-15T20:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "stablecoins-the-marginal-buyer-of-us-treasuries",
            "title": "Stablecoins, the marginal buyer of US Treasuries",
            "url": "https://l0g.fr/en/analysis/stablecoins-the-marginal-buyer-of-us-treasuries/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Stablecoins, the marginal buyer of US Treasuries.",
            "objectId": "article:en:stablecoins-the-marginal-buyer-of-us-treasuries",
            "previousVersion": null,
            "currentVersion": "2026-07-15T20:15:00.000Z",
            "previousHash": null,
            "currentHash": "19b8aa0b5436f72bab06471b583a8207d012238f053cbfaf01483005ff21c56f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add487e40dcd2183",
            "date": "2026-07-15T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "stablecoins-acheteur-marginal-bon-du-tresor",
            "title": "Les stablecoins, acheteur marginal du bon du Trésor américain",
            "url": "https://l0g.fr/posts/stablecoins-acheteur-marginal-bon-du-tresor/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les stablecoins, acheteur marginal du bon du Trésor américain.",
            "objectId": "article:stablecoins-acheteur-marginal-bon-du-tresor",
            "previousVersion": null,
            "currentVersion": "2026-07-15T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "5ce57835a1584c377da2541cd9e97674bc2d2baf77de895972e6b2bd5c2de58a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "553f48e29b9278b75c2bc9a673cb0e7c88ee8292a966be4658bdde14aa0b7e99"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T115613+0200-f54f0aee0c7f-29571776953-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T09:52:59.000Z",
      "retrievedAt": "2026-07-17T09:57:49.595Z",
      "computedAt": "2026-07-17T11:56:13+02:00",
      "gitSha": "f54f0aee0c7f5f48ccb57845f62043dcfd32c159",
      "previousFrameHash": "553f48e29b9278b75c2bc9a673cb0e7c88ee8292a966be4658bdde14aa0b7e99",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29571776953",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "f8b5e6b4e9752e920c5a5347ba02d7f2d0d24a37d2373a8b0073d5cbaa29d666",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "2dd1050a9a3695417fe9b6b27d0a053c076626c56f737ae128e943ec0dd38e15",
          "bytes": 1392069,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "51010346ed6ac5c41961eb7a7e2666e516d7e253cb9fcf6330dcda429005c462",
          "bytes": 2922304,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "83155c57a87c7aa7fa34c0289f9593d951b2dcfc5b962c7e37d74e84eed94244",
          "bytes": 1083491,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "20249b65366caeb02a2ec2a253fea6de42915f17e44eff724d1fd6b4c22860ba",
          "bytes": 951425,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "01e10eedd10cec29392320bb97538d7c5b364c2489dbfb952e2297ea23f6f915",
          "bytes": 31027,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "943f00e3aaace39dbf32d92b01d34975ff0f7f2b14f0382225b7cf299c94535e",
          "bytes": 13763,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "d3abd9d9ca0f60e8584cf61b0b4f73ed24d43ab9929d7e6ab568072a82c521ce",
          "bytes": 209353,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "45d7414db334e5fcc767fcd8d5920d8922964f9ac9663197db1c6e875502501b",
          "bytes": 151182,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "66bf81de5fa2b0500bc1431ecafd1eba931dc6ca099b7d02145610c24744f53a",
          "bytes": 11246,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "46357cdb7aa1dfca300410874eef0d59e38883bdadc44d39ba32b142fba548f2",
          "bytes": 6429,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "93cdd93c3a6c8ec258db12d87c81e88b9cf2ce4bab109e5774ad35c168fdb9d7",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-17T09:52:59.000Z:ad90758e084a",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-17T09:52:59.000Z",
          "sourcePublishedAt": "2026-07-17T09:52:59.000Z",
          "retrievedAt": "2026-07-17T09:57:49.595Z",
          "computedAt": "2026-07-17T11:56:13+02:00",
          "value": 54,
          "rawValue": 54.17179771094327,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "ad90758e084a0bf1b75a8be02c9c2be409c905267e241704a74b97cf38ebacd8",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-17T09:52:59.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-17T09:52:59.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T11:56:13+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-17T09:52:59.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-17T09:52:59.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T11:56:13+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-17T09:52:59.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-17T09:52:59.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T11:56:13+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-17T09:52:59.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-17T09:52:59.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T11:56:13+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T11:56:13+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T09:52:59.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T11:56:13+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T09:52:59.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-17T09:52:59.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T11:56:13+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T09:52:59.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-17T09:52:59.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T11:56:13+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T09:52:59.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-17T09:52:59.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T11:56:13+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T09:52:59.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-17T09:52:59.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T11:56:13+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T09:52:59.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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T11:56:13+02:00",
        "latest": [
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "bdd4cccf592b38b0cc434ab8d1bf306728135e04f88e9234078c48e7d405d42c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "3d89695f63b1a26932e0b4b2e587b3c539f22be662fc608533316b51c14b7931",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "a0e531cbf6d270b3f30b902fd63b860a13c8ecbcc04475571787f336c54866f1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "be209dab2ecc66bf90bea3702f1298cc2a2c52c70e56c3422693276198468567",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "a60534d1d3bd36b4fbc3956aab58bd685ffc9d9ad146a35bde209132ea903ddc",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2238a7dd8477ded9",
            "date": "2026-07-16T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-16-protocole",
            "title": "l0g Editorial Protocol 1.0 stable",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Publication du noyau normatif versionné : exigences EP-001 à EP-009, schémas article et paquet de preuves, article exemple, tests de conformité, empreintes, licences et métadonnées de citation.",
            "objectId": "policy:2026-07-16-protocole",
            "previousVersion": null,
            "currentVersion": "2026-07-16T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "14fb82b405f4ec4157b4538dc6f29569ebbd75faf59706475d94238ecda3fa46",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3efc06f1704060e8",
            "date": "2026-07-15T21:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "basel-iii-rollback-us-regulators-bank-capital",
            "title": "Basel III in reverse: US regulators hand capital back to the banks",
            "url": "https://l0g.fr/en/analysis/basel-iii-rollback-us-regulators-bank-capital/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Basel III in reverse: US regulators hand capital back to the banks.",
            "objectId": "article:en:basel-iii-rollback-us-regulators-bank-capital",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:40:00.000Z",
            "previousHash": null,
            "currentHash": "e73208e5762d22401ec5ca752658c08457a0c53f57f23764b237ebbaa074c564",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "143ee60a91a1ba91",
            "date": "2026-07-15T21:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bale-iii-rollback-regulateurs-us-capital-bancaire",
            "title": "Bâle III à l'envers : les régulateurs américains rendent du capital aux banques",
            "url": "https://l0g.fr/posts/bale-iii-rollback-regulateurs-us-capital-bancaire/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Bâle III à l'envers : les régulateurs américains rendent du capital aux banques.",
            "objectId": "article:bale-iii-rollback-regulateurs-us-capital-bancaire",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:15:00.000Z",
            "previousHash": null,
            "currentHash": "626dd62d9aa9cee137c7e3d5486bce09adff1525824e2ac74eacbc61b2876f55",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "9437bdbc7ffebd5c58e0df7c76254b524691a985c98b1d4460438441409dfcc7"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T154322+0200-6a9ace526eca-29585064858-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T13:40:50.000Z",
      "retrievedAt": "2026-07-17T13:43:59.364Z",
      "computedAt": "2026-07-17T15:43:22+02:00",
      "gitSha": "6a9ace526ecaed3d233e2dbe5ef83ea8d83f5f3a",
      "previousFrameHash": "9437bdbc7ffebd5c58e0df7c76254b524691a985c98b1d4460438441409dfcc7",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29585064858",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "553930b115322c9bccec563a3ba31c582f581105fd2096bbe2cb1ba874b3be76",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "b2e25aa7687b230ec38f09ee4a04b29cf77a74efeeaec682e8efca8dc2133a87",
          "bytes": 1439918,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "7b587ccd572af83334f352a0ca1037bb2211cd94677b372ab5aff3576fd849b3",
          "bytes": 2959377,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "4279ab3657ee15b8e265e7f3792d6b8bb1d31b0b854f7d1228c23d6cd6abfe7c",
          "bytes": 1146551,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "ccf91dcd3cbf74a10963d26665c9705b5553affc512d81a76f282984ea0d4099",
          "bytes": 1006424,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "81c8af8638f0c275fd692d20f6a105ebc6f75b40398a2db633bc67a567574f80",
          "bytes": 32024,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "773eb01d9665315e55ffcc67e4ff2436a209cb0cb0c3e9c6f82a880fbd7840f6",
          "bytes": 13759,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "8789b29db9766194e73d88e3efa5863d9a784edcc2029d5fd4cb576d72b647e0",
          "bytes": 211046,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "99db3cdf906eac1ffd88c32fe55a8379f828ae980560a453828a5703da63c90e",
          "bytes": 148787,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "38cd1fa0fbd030bf4ef419fa1c58a85f325fc1a793fc7de257d98218a31f2c92",
          "bytes": 11135,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "b4dd45e007067ec3fe26f15624da7187b523a35c92dc212d6db705036f424a81",
          "bytes": 6318,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "01197f83ec8abc36a9afca595e3fb8b6aa2c81f6d4237b5cdc4d5cf97dc0422d",
          "bytes": 12790,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-17T13:40:50.000Z:4e2b63aa4619",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-17T13:40:50.000Z",
          "sourcePublishedAt": "2026-07-17T13:40:50.000Z",
          "retrievedAt": "2026-07-17T13:43:59.364Z",
          "computedAt": "2026-07-17T15:43:22+02:00",
          "value": 52,
          "rawValue": 52.366732947049826,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "4e2b63aa4619e197cb77afdc6b76c9ed208f714df0338e94aac9bbf614e0ff99",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-17T13:40:50.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-17T13:40:50.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T15:43:22+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-17T13:40:50.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-17T13:40:50.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T15:43:22+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-17T13:40:50.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-17T13:40:50.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T15:43:22+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-17T13:40:50.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-17T13:40:50.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T15:43:22+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T15:43:22+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T13:40:50.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T15:43:22+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T13:40:50.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-17T13:40:50.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T15:43:22+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T13:40:50.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-17T13:40:50.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T15:43:22+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T13:40:50.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-17T13:40:50.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T15:43:22+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T13:40:50.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-17T13:40:50.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T15:43:22+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T13:40:50.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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T15:43:22+02:00",
        "latest": [
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "ce128eb1586bd8ac2c7e96258bd0eab970de50a5fe269bcd1909fc6c7de6cbc9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "88830a8b0cbc7af53ef50bc8840ce859e20171f1b99f14fdca49e37a632e2958",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "f85e764175203f29c23af2a7856edb5713c0fd01f3c1239b5f37e8aec6cadef0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "6b551ec75c526640eb3a43bdf57ccf897dce4990c81793b192ee0d7e2b657f89",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "e0a9760f55f4ac24099d51bad3b38fcbf8322e62551e3c2e895dba2bec9faac8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "763d4e15baaa6cc2b902a67492cca0330eb00bcd42014e94405880c5ce81949d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2238a7dd8477ded9",
            "date": "2026-07-16T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-16-protocole",
            "title": "l0g Editorial Protocol 1.0 stable",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Publication du noyau normatif versionné : exigences EP-001 à EP-009, schémas article et paquet de preuves, article exemple, tests de conformité, empreintes, licences et métadonnées de citation.",
            "objectId": "policy:2026-07-16-protocole",
            "previousVersion": null,
            "currentVersion": "2026-07-16T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "14fb82b405f4ec4157b4538dc6f29569ebbd75faf59706475d94238ecda3fa46",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "f698d913ebb04e2fe60aca8fc6cc1bf36ecf5f6c7cb88a667549849376f3bc2a"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T171523+0200-2477574de0ef-29591379088-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T15:11:41.000Z",
      "retrievedAt": "2026-07-17T15:16:14.946Z",
      "computedAt": "2026-07-17T17:15:23+02:00",
      "gitSha": "2477574de0ef99342d5d9cb245b2fcc0e63ad96a",
      "previousFrameHash": "f698d913ebb04e2fe60aca8fc6cc1bf36ecf5f6c7cb88a667549849376f3bc2a",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29591379088",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "553930b115322c9bccec563a3ba31c582f581105fd2096bbe2cb1ba874b3be76",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "6e8062ef016ae0ffd02ecde9ae19d820abe9e1d19d453ce18d0607ec3d1fed58",
          "bytes": 1439918,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "7b587ccd572af83334f352a0ca1037bb2211cd94677b372ab5aff3576fd849b3",
          "bytes": 2959377,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "78f8d9d5497890679f1ac2d6032c90339cb159776a6717938135c17db9195fb7",
          "bytes": 1146551,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "af1bfd56cd48fe7e141e0c457b00c663b9288ad4cfa9bb69541795ec38671a01",
          "bytes": 1006424,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "81c8af8638f0c275fd692d20f6a105ebc6f75b40398a2db633bc67a567574f80",
          "bytes": 32024,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "644213f54c19339f1effe178b223a0d94b03cda9af75a2a9519ca9d5e6ce794f",
          "bytes": 13759,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "1144bc1109f506fe1351d0ac701092d9b71c37ddff0a4c80d64b5b171bb20fce",
          "bytes": 211046,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "78fe076634a0488ddf520796404cbe3c82232d5c39c09e92a020867f9a3968ec",
          "bytes": 149161,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "8cdf986dc09fe9d1bdd0458879317a05be9379a3584499f6d9a9197a80f35240",
          "bytes": 11246,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "a9f87edbb45f171dbc71401697caa8d1301e8d4976380f916462ee5d8bcab0a7",
          "bytes": 6429,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "3cffb21ddc1d42a5cf5cea9cc58d4ffef2dac8ecf39d820b2cd3fc3d01bd2fdb",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-17T15:11:41.000Z:c3574f1c2c1e",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-17T15:11:41.000Z",
          "sourcePublishedAt": "2026-07-17T15:11:41.000Z",
          "retrievedAt": "2026-07-17T15:16:14.946Z",
          "computedAt": "2026-07-17T17:15:23+02:00",
          "value": 54,
          "rawValue": 54.17179771094327,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "c3574f1c2c1e8960fa4418cf384c4688acad54c60fc9031914ccbf4778fee036",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-17T15:11:41.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-17T15:11:41.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T17:15:23+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-17T15:11:41.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-17T15:11:41.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T17:15:23+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-17T15:11:41.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-17T15:11:41.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T17:15:23+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-17T15:11:41.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-17T15:11:41.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T17:15:23+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T17:15:23+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T15:11:41.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T17:15:23+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T15:11:41.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-17T15:11:41.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T17:15:23+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T15:11:41.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-17T15:11:41.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T17:15:23+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T15:11:41.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-17T15:11:41.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T17:15:23+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T15:11:41.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-17T15:11:41.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T17:15:23+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T15:11:41.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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T17:15:23+02:00",
        "latest": [
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "2218d2df3c7df6107771d1148dab064d4319696cb829729c62c5e1abc2f12f1f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "716fb17dca98e77bf7378a8dd86b125a7edfdbb8e77f947ab8435d0eb03144ec",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "107be676eacfc8dbe8f1108f339cc021404ca2176a8af6571923789aeebd4264",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "0029f8d6d6fd0cc8dafc0bfbde06cf1d4041cb92015d661424caf0079fbe5245",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "3d5066997f91d9a83b44557eb8057187b939bd954f6efe9475d0c1deccb8da3f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "492d77d4aaabda0cc41419ae56714879f7df9834d95ba8f908973abbf63eacc8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2238a7dd8477ded9",
            "date": "2026-07-16T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-16-protocole",
            "title": "l0g Editorial Protocol 1.0 stable",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Publication du noyau normatif versionné : exigences EP-001 à EP-009, schémas article et paquet de preuves, article exemple, tests de conformité, empreintes, licences et métadonnées de citation.",
            "objectId": "policy:2026-07-16-protocole",
            "previousVersion": null,
            "currentVersion": "2026-07-16T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "14fb82b405f4ec4157b4538dc6f29569ebbd75faf59706475d94238ecda3fa46",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "27f47db51a8e024a0e1bc48059af244fc7cb4494c615ca13a2595d81cca819b6"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T174024+0200-563997fb3d18-29593168021-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T15:42:17.000Z",
      "retrievedAt": "2026-07-17T15:42:19.615Z",
      "computedAt": "2026-07-17T17:40:24+02:00",
      "gitSha": "563997fb3d187bad77de328e7356aaa115409106",
      "previousFrameHash": "27f47db51a8e024a0e1bc48059af244fc7cb4494c615ca13a2595d81cca819b6",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29593168021",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "553930b115322c9bccec563a3ba31c582f581105fd2096bbe2cb1ba874b3be76",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "568f9253e3aaf33a2d8a7678c1a136e4ace0b74426e2ad52020c55f2f2d41bae",
          "bytes": 1439918,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "7b587ccd572af83334f352a0ca1037bb2211cd94677b372ab5aff3576fd849b3",
          "bytes": 2959377,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "7aca246490b93b3bae77ffb96d42c2f9f0f81af319ea4b2a4ab5fa8759700358",
          "bytes": 1146551,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "4ee440bbf3478a3751a766f4a4b7d9255c49d53afe2e0c05097fd473f2173133",
          "bytes": 1006424,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "81c8af8638f0c275fd692d20f6a105ebc6f75b40398a2db633bc67a567574f80",
          "bytes": 32024,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "95e2308faad762e689a4f6a26dcfee6fcc20c47e24162eae4f726150c96e5778",
          "bytes": 13759,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "342f474733f0aaff7a37a140864eaacff5e8fbf24b3bbd5f94f09928b2563bfb",
          "bytes": 211046,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "a21bf3d933e89f84ed959ffc8778632cc9393a79e870b8114e3a90ec060f15af",
          "bytes": 149161,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "c9c907b6145f18670b911acdc6d129c844a23467b1b8a431e19668358fd1d88b",
          "bytes": 11246,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "7e99b89b16d8946a657473b075a6d3ee0385c9c8868b7d87e02f7383f23e6468",
          "bytes": 6429,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "56b489f474eada26df91242bd8008f277544a62d2bccf3e19e1442c831a48457",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-17T15:42:17.000Z:d8aa376c9946",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-17T15:42:17.000Z",
          "sourcePublishedAt": "2026-07-17T15:42:17.000Z",
          "retrievedAt": "2026-07-17T15:42:19.615Z",
          "computedAt": "2026-07-17T17:40:24+02:00",
          "value": 54,
          "rawValue": 54.17179771094327,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "d8aa376c994693f1598e184b2266482d998f6ba54055b361aa81c5e8a33546d8",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-17T15:42:17.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-17T15:42:17.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T17:40:24+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-17T15:42:17.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-17T15:42:17.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T17:40:24+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-17T15:42:17.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-17T15:42:17.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T17:40:24+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-17T15:42:17.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-17T15:42:17.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T17:40:24+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T17:40:24+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T15:42:17.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T17:40:24+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T15:42:17.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-17T15:42:17.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T17:40:24+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T15:42:17.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-17T15:42:17.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T17:40:24+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T15:42:17.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-17T15:42:17.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T17:40:24+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T15:42:17.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-17T15:42:17.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T17:40:24+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T15:42:17.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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T17:40:24+02:00",
        "latest": [
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "b768d3fcd73e108f14b9d0c69294fab4820bb08c4c7053e17e304228da2b114e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "fbb6880126657ed9fada41102d626229511120133da4243dc1bbe72c540fab19",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "bdda5d267dc9e500bc96ddeaf97e6a4cb8c5a23d0eecd0aa2544c5672792e058",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "412944fd66ae25cee53b702d9ffdf783a78fa631edd874c09ba18f355c2eb1ed",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "7050f140aa43df36bf1ad83dab353e2a6c2a5e7e5208942ee75cfa8e6618abb4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "c20ab459abe6bd63f5166fac8492e204c7bbe4a46fc72b3e0d0940c029c8a3e9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2238a7dd8477ded9",
            "date": "2026-07-16T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-16-protocole",
            "title": "l0g Editorial Protocol 1.0 stable",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Publication du noyau normatif versionné : exigences EP-001 à EP-009, schémas article et paquet de preuves, article exemple, tests de conformité, empreintes, licences et métadonnées de citation.",
            "objectId": "policy:2026-07-16-protocole",
            "previousVersion": null,
            "currentVersion": "2026-07-16T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "14fb82b405f4ec4157b4538dc6f29569ebbd75faf59706475d94238ecda3fa46",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "4da8aaf876530a9b583ff302ffd917eb3d0f5d1568f857407bbd22c2b04cfdd6"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T185803+0200-82f6dd2495f8-29598238419-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T16:58:08.000Z",
      "retrievedAt": "2026-07-17T16:59:00.295Z",
      "computedAt": "2026-07-17T18:58:03+02:00",
      "gitSha": "82f6dd2495f85634d2c4204b482dc1fe27891ded",
      "previousFrameHash": "4da8aaf876530a9b583ff302ffd917eb3d0f5d1568f857407bbd22c2b04cfdd6",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29598238419",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "553930b115322c9bccec563a3ba31c582f581105fd2096bbe2cb1ba874b3be76",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "c31622e6c875fd855708e86e48c68044541b4bd1b174dca4c2c100d247e49bce",
          "bytes": 1439918,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "7b587ccd572af83334f352a0ca1037bb2211cd94677b372ab5aff3576fd849b3",
          "bytes": 2959377,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "c6edd972181688a570fba782f17c4120c272a153ac5d9a0b324667b755b01372",
          "bytes": 1146551,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "078a9d8b80c44ca803a5fb62ddcd6b40dbae73388717033d369c0bc7977aa666",
          "bytes": 1006424,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "81c8af8638f0c275fd692d20f6a105ebc6f75b40398a2db633bc67a567574f80",
          "bytes": 32024,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "a83743ef911cb1125cbd32e0f952bc8d88db44f11222db232669bed2e404b370",
          "bytes": 13759,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "36c6cfa0f022affd41686e1a8ec5ecdba3978a91c48f21de12a204529866faea",
          "bytes": 211046,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "75045aaaddc2e945628f060b410f330f239012cb47be5f46ea36c342bd05ab53",
          "bytes": 149161,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "17733f24893f6cdb8e39dbe1879ba85d763b6d895c2933873111e5a04296f3ee",
          "bytes": 11246,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "238f797c2a4fa835b0e5b881cc5dc284b95c880a00d9c2ef5c6618238a5b0d4a",
          "bytes": 6429,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "16fc79e58917b60b3b44472c3f5e4907845850680573f27c2959ac4540e752f9",
          "bytes": 12788,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-17T16:58:08.000Z:bed8a7acba8a",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-17T16:58:08.000Z",
          "sourcePublishedAt": "2026-07-17T16:58:08.000Z",
          "retrievedAt": "2026-07-17T16:59:00.295Z",
          "computedAt": "2026-07-17T18:58:03+02:00",
          "value": 54,
          "rawValue": 54.17179771094327,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "bed8a7acba8a8181af0b34db649b36fb84c4706e95aeb016b2e94ed6470f52c5",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-17T16:58:08.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-17T16:58:08.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T18:58:03+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-17T16:58:08.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-17T16:58:08.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T18:58:03+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-17T16:58:08.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-17T16:58:08.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T18:58:03+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-17T16:58:08.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-17T16:58:08.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T18:58:03+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T18:58:03+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T16:58:08.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T18:58:03+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T16:58:08.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-17T16:58:08.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T18:58:03+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T16:58:08.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-17T16:58:08.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T18:58:03+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T16:58:08.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-17T16:58:08.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T18:58:03+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T16:58:08.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-17T16:58:08.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T18:58:03+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T16:58:08.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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T18:58:03+02:00",
        "latest": [
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "a49b710919c8d97e5f6c1e52888b9862d3a47059fafacaa024a70322a24779c8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "bb2227fd4fbc3aaa4cbce5f399eee13513ec0ca8e7dfb32885dacedf9dcc113c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "0643d9a58cdafd30198ecafa1409618284e445f4338ffb6797763ed7239e3dcb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "3b978f109a93b850a7bd5461cc4041f6d6a3671288c3127af01e6817307b007a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "3123cc725d018128d222b217cb10899fa4af8efa72cba647243dbf0165a7da89",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "12b5a5e9029b750f0e29be09069c96211748564e8c5de79b8b787c4940f13ccb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2238a7dd8477ded9",
            "date": "2026-07-16T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-16-protocole",
            "title": "l0g Editorial Protocol 1.0 stable",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Publication du noyau normatif versionné : exigences EP-001 à EP-009, schémas article et paquet de preuves, article exemple, tests de conformité, empreintes, licences et métadonnées de citation.",
            "objectId": "policy:2026-07-16-protocole",
            "previousVersion": null,
            "currentVersion": "2026-07-16T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "14fb82b405f4ec4157b4538dc6f29569ebbd75faf59706475d94238ecda3fa46",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "e1b89b25aedfcb268df12cc8495165c242cfa2fea4ed0f408afa6a3ea2a45c2a"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T203130+0200-58e17f02191b-29604147143-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T18:29:07.000Z",
      "retrievedAt": "2026-07-17T18:32:24.442Z",
      "computedAt": "2026-07-17T20:31:30+02:00",
      "gitSha": "58e17f02191b45333ca6cdd65989d07669ed9b30",
      "previousFrameHash": "e1b89b25aedfcb268df12cc8495165c242cfa2fea4ed0f408afa6a3ea2a45c2a",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29604147143",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "553930b115322c9bccec563a3ba31c582f581105fd2096bbe2cb1ba874b3be76",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "3562552d3f45699a8ee5d4db596192f090b7ad18a4a183614ff53c21bb9cb4dd",
          "bytes": 1439918,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "7b587ccd572af83334f352a0ca1037bb2211cd94677b372ab5aff3576fd849b3",
          "bytes": 2959377,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "45cf57fa5d3b6131d782931214fe9a9bd594b3282d803afb7db2390291e8eb45",
          "bytes": 1146551,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "ac4589f7aa2a977db3650d82affbe6c8cfed574139ce90c73be419a4093c47a8",
          "bytes": 1006424,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "81c8af8638f0c275fd692d20f6a105ebc6f75b40398a2db633bc67a567574f80",
          "bytes": 32024,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "deca15ce18918bd9921c2c7a7d4834d8a4652ab38eb57cc81581be4cbdb08270",
          "bytes": 13759,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "caab344fb132e4f3970ad1e1a0377dd6c340f07d2b65cfc0148860b0d6e25432",
          "bytes": 211046,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "99eb95cd724d64703b62baa860d1c6c519d504d082d5c85057a36e280510b1ad",
          "bytes": 149335,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "19d0fe4eabb599ec530020d09c2ba53a5a8f2c1c8aeda0e46a001f3d7572da45",
          "bytes": 11247,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "582c7a7b48d55176b71d702aba1ea3f25bae2f0893a434ccced4b1e529d16f60",
          "bytes": 6430,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "b655e4c5c83a769e005468fefc0a274bfed41c5925b74a78a68abedf03898243",
          "bytes": 12786,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-17T18:29:07.000Z:4eb93b6a70b9",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-17T18:29:07.000Z",
          "sourcePublishedAt": "2026-07-17T18:29:07.000Z",
          "retrievedAt": "2026-07-17T18:32:24.442Z",
          "computedAt": "2026-07-17T20:31:30+02:00",
          "value": 54,
          "rawValue": 54.1450415961738,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "4eb93b6a70b984d82f0b676b33f54264bb739261771541afc4114b5f0216848c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-17T18:29:07.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-17T18:29:07.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T20:31:30+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-17T18:29:07.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-17T18:29:07.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T20:31:30+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-17T18:29:07.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-17T18:29:07.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T20:31:30+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-17T18:29:07.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-17T18:29:07.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T20:31:30+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T20:31:30+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T18:29:07.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T20:31:30+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T18:29:07.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-17T18:29:07.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T20:31:30+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T18:29:07.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-17T18:29:07.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T20:31:30+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T18:29:07.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-17T18:29:07.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T20:31:30+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T18:29:07.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-17T18:29:07.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T20:31:30+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T18:29:07.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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T20:31:30+02:00",
        "latest": [
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "83960b0d7e2f8408e33d0d4a800ad387cea89f3e4e5211a722c31cfe8ff803f2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "ed0135105f11324636b892ee75d2f154047dd1d833f141827e71613f917a4861",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "064cbb9acc4dd54918b06b319cbf9cbb3fa3e33de08010f7242ee288ff858be3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "bb3751768181adf365b466753bd72a4c0d7eba84fe781ce638d4cbac15ae832f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "a0dcad599cd159fea2a4bd2a90a75057ef5bff5c18738ad306081525b0bce831",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "516b541342cd58ea2e4c6f42b229d7f2956fcac7fa25b17f3b89ec4835c10d72",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2238a7dd8477ded9",
            "date": "2026-07-16T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-16-protocole",
            "title": "l0g Editorial Protocol 1.0 stable",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Publication du noyau normatif versionné : exigences EP-001 à EP-009, schémas article et paquet de preuves, article exemple, tests de conformité, empreintes, licences et métadonnées de citation.",
            "objectId": "policy:2026-07-16-protocole",
            "previousVersion": null,
            "currentVersion": "2026-07-16T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "14fb82b405f4ec4157b4538dc6f29569ebbd75faf59706475d94238ecda3fa46",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1f6601bd8b0dc41c",
            "date": "2026-07-15T21:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "residual-value-guarantee-ai-infrastructure-credit",
            "title": "The residual value guarantee, the blind spot of the credit that finances AI",
            "url": "https://l0g.fr/en/analysis/residual-value-guarantee-ai-infrastructure-credit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The residual value guarantee, the blind spot of the credit that finances AI.",
            "objectId": "article:en:residual-value-guarantee-ai-infrastructure-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-15T21:55:00.000Z",
            "previousHash": null,
            "currentHash": "6fb9a8f587ffbacb595dd11e4a32fc84909b62999e2b34b7a754ff8ec335ab75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "7efa714ad95d4754a4822ff0743be3ae3b2b5b7dcee8dbb449076a5406e3b618"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T204352+0200-3432b22814c5-29604905350-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T18:44:11.000Z",
      "retrievedAt": "2026-07-17T18:44:27.907Z",
      "computedAt": "2026-07-17T20:43:52+02:00",
      "gitSha": "3432b22814c576bdad2464277d8bbf324371899e",
      "previousFrameHash": "7efa714ad95d4754a4822ff0743be3ae3b2b5b7dcee8dbb449076a5406e3b618",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29604905350",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "7af1b44c8111b552f7b6c9a1d01edc239595a7ec1f1deecb765ed4ce130cfba7",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "b5f0b210a90ec793c60513851c7c89fbbe4b4e8d0e0c080cf87ff7f4a21415f5",
          "bytes": 1487399,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ad294e0140448c825b3482d13b214cc41fa78f112b2706ac8c81bfbf2e08cc40",
          "bytes": 2990081,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "6c1a61aaff247146d02a372454b8ee293cb99bfa2c2e3525eec9c7f06f1a8eb1",
          "bytes": 1210514,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "ad16844f0598b52e0dba20cf226ecdf1bb3a663dd8b089398fb304e25d9abd32",
          "bytes": 1059765,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "0df4b42edaf73f5f2e0b743d735ff9b2256e71044338cabd6b5dbd981aba2f3c",
          "bytes": 32351,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "447a6a1d012d3823f2114f943854c61abdae70fa087c57c34ed9d78113ca0435",
          "bytes": 13696,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "329a6ce85b517e33c32c51e16bb4cc81e06011cc86ccbb51ba28c49c64dbd72b",
          "bytes": 212673,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "be88445164dcde442709508f97d62e16dbd9a00e1af5bb08825f5f1f66c62b5a",
          "bytes": 149808,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "2b01f743e40c0d7d96206eb67a8c6990a1fc5290d6b7c7892b1ee43bb392b600",
          "bytes": 11247,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "240fb31fbe1ca7e4f9c478c3ca29279b5d2d7a72f7779b06a89a4bad35373989",
          "bytes": 6430,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "83a5cbcb0db8d7c787c2b964e8efdf503fa54e1bd5868421e6b4d89760aa7345",
          "bytes": 12786,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-17T18:44:11.000Z:45cee9f61af3",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-17T18:44:11.000Z",
          "sourcePublishedAt": "2026-07-17T18:44:11.000Z",
          "retrievedAt": "2026-07-17T18:44:27.907Z",
          "computedAt": "2026-07-17T20:43:52+02:00",
          "value": 54,
          "rawValue": 54.1450415961738,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "45cee9f61af3fd11b8dfdee2b889ed59ca193050c70e47a2ef8ee0588d003afe",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-17T18:44:11.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-17T18:44:11.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T20:43:52+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-17T18:44:11.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-17T18:44:11.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T20:43:52+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-17T18:44:11.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-17T18:44:11.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T20:43:52+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-17T18:44:11.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-17T18:44:11.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T20:43:52+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T20:43:52+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T18:44:11.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T20:43:52+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T18:44:11.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-17T18:44:11.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T20:43:52+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T18:44:11.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-17T18:44:11.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T20:43:52+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T18:44:11.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-17T18:44:11.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T20:43:52+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T18:44:11.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-17T18:44:11.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T20:43:52+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T18:44:11.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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T20:43:52+02:00",
        "latest": [
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "81bab9d3d866d5f1a28b08604a4b73a9b156a6b696f3b349be909ffe288faa55",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "6c5c5e452ed6f8b0c330119267c1bc4745da2ec756b1ed9050f61449a1dc8eb4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "d02ab1c93772add63cf13166bcd14f9ad71d658ea33e66011de07e8b55213670",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "aa993324a79537f646871b9a2c89b24b1fa3146e5fed0454ac090e69f09be8a0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "2cfb62338af041af02caa52e14d613946c5ca329b612d7e762d588fe7e136a90",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "5ae34a742ebb72b0b2d206c5e4208d6598eefa26ac27b449f11f3267458d42c2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "15d42666827ac3937395c945d9625ca6dae4f3e321194c953500dbe150f613f0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "cf871a91664443b4713c51010cbf950893ab30a0baf47d08cd575783c95432d3"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T210602+0200-cced278a7582-29606313054-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T18:59:25.000Z",
      "retrievedAt": "2026-07-17T19:07:00.260Z",
      "computedAt": "2026-07-17T21:06:02+02:00",
      "gitSha": "cced278a758216f228f9fb31f115a5dbf4a5769e",
      "previousFrameHash": "cf871a91664443b4713c51010cbf950893ab30a0baf47d08cd575783c95432d3",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29606313054",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "7af1b44c8111b552f7b6c9a1d01edc239595a7ec1f1deecb765ed4ce130cfba7",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "3a990c96a73f6cd9f98bf6da0edf5c521b5286a635668927ef7790e41370f9db",
          "bytes": 1487399,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ad294e0140448c825b3482d13b214cc41fa78f112b2706ac8c81bfbf2e08cc40",
          "bytes": 2990081,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "a342c76539d2dd654c0d1d7d967767fe091f199d0c3a4ef01eb5db61ca7b36f9",
          "bytes": 1210514,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "f39a0f2fcb5f2d1c89e69a447242c20eb42c1e5438cff07c06829a0ede6351ec",
          "bytes": 1059765,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "0df4b42edaf73f5f2e0b743d735ff9b2256e71044338cabd6b5dbd981aba2f3c",
          "bytes": 32351,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "ab59b86b7604cb13311d4abb7004f2221dc20d2341f8b051d1fce825a41f106c",
          "bytes": 13696,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "8e8a119e5bbc22fcb34243589cfd813532b54af50132dfa93f86f8d7d4da8586",
          "bytes": 212673,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "f8d6f52c4521d6ff1ad56415a73527b688a2debb6f9a4720c05559cb435049cf",
          "bytes": 149808,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "6423d04a1c2c4f026752435aab5c771ca914f012a48849d89257591be34f1c85",
          "bytes": 11247,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "f542ca17c3832e74588cb1d96f8ca5c3b05a8918f2fb98219a74fd4a51b61ca2",
          "bytes": 6430,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "7cefb6cf12450790595b33d08dba5ad1c8c792cf950b9b3edb31aeea311b4723",
          "bytes": 12786,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-17T18:59:25.000Z:f9588ac599aa",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-17T18:59:25.000Z",
          "sourcePublishedAt": "2026-07-17T18:59:25.000Z",
          "retrievedAt": "2026-07-17T19:07:00.260Z",
          "computedAt": "2026-07-17T21:06:02+02:00",
          "value": 54,
          "rawValue": 54.1450415961738,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "f9588ac599aae75447bd75e755b1887f1c2cac81d0916a79b95b7da5005fb393",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-17T18:59:25.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-17T18:59:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:06:02+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-17T18:59:25.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-17T18:59:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:06:02+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-17T18:59:25.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-17T18:59:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:06:02+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-17T18:59:25.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-17T18:59:25.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:06:02+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T21:06:02+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T18:59:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:06:02+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T18:59:25.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-17T18:59:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:06:02+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T18:59:25.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-17T18:59:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:06:02+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T18:59:25.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-17T18:59:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:06:02+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T18:59:25.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-17T18:59:25.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:06:02+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T18:59:25.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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T21:06:02+02:00",
        "latest": [
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "64cec7dab5e847e480d3bd1b0074949ad34c27791239a063c5116d6b2ee48c41",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "7742d73a7e910b80111774bde986c701cb6e769da576e3f6f66ffccffb012a33",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "9f8cb4ef5884e393a20562c78e808417e64b7eecd8fefe716cbca620e4b56472",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "be2cb8219bf9e603241eca1132a9d8b93c8d7691422555eed285e539eea38cc4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "d87eef6d8949ba1edcbd67b564566aa7b165a469fe42846a707d5520709ebcec",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "5be1b1159be53b13c851b5a94d757fa67338404d00d0a5249aa2274994c2ac1d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "49fe72303845c6c5d8710846efa7ad895a2130f297971ed01c394e476312f47c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "e84486cf72e1c37bf24fc41ee27ea9104bd668732c1988cf1fdda163173e23da"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T212544+0200-0091b2ea0dc6-29607497511-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T19:14:28.000Z",
      "retrievedAt": "2026-07-17T19:26:36.632Z",
      "computedAt": "2026-07-17T21:25:44+02:00",
      "gitSha": "0091b2ea0dc6dd20363cd1086dbb5878fd724cf4",
      "previousFrameHash": "e84486cf72e1c37bf24fc41ee27ea9104bd668732c1988cf1fdda163173e23da",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29607497511",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "7af1b44c8111b552f7b6c9a1d01edc239595a7ec1f1deecb765ed4ce130cfba7",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "ed9b42c777597b5acaa4208ed6b37fe8334769a34cf936deb99695ef7d4e77b4",
          "bytes": 1487399,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ad294e0140448c825b3482d13b214cc41fa78f112b2706ac8c81bfbf2e08cc40",
          "bytes": 2990081,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "c05fc77b3c53b55ccdde56948fdee2084d56b941635c8e2b03505d8ddc2e9759",
          "bytes": 1210514,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "284af471fb8cd9f7536a72da3bb609b710de6f7b48700290ff4cf705d88f317b",
          "bytes": 1059765,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "0df4b42edaf73f5f2e0b743d735ff9b2256e71044338cabd6b5dbd981aba2f3c",
          "bytes": 32351,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "cb7fe7c14259218e8a93f956d151880b8b1d35059d93e197d298f08a849df98b",
          "bytes": 13696,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "d054409d89a5052b36b9a39782d59e959dacf97fd54ecfd66875bfee039257fc",
          "bytes": 212673,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "7813bfe5fb5dac666c4f900e1dce644ae660d38dd826ed0a24c0cbf987f995e0",
          "bytes": 149808,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "d61b10d5b519561bcd10dd480efcd9f114a058b4688e4e1fdedff08c744f4721",
          "bytes": 11247,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "ae852cf764a1ce9590a57d59a76202e66c19efb3b83a64cd865a62b90cf0bffc",
          "bytes": 6430,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "e8614038d1e0c457f10f864c0d6192f024e3a15a3881ab00e021e04465b14c7c",
          "bytes": 12786,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-17T19:14:28.000Z:a472f30481ec",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-17T19:14:28.000Z",
          "sourcePublishedAt": "2026-07-17T19:14:28.000Z",
          "retrievedAt": "2026-07-17T19:26:36.632Z",
          "computedAt": "2026-07-17T21:25:44+02:00",
          "value": 54,
          "rawValue": 54.1450415961738,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "a472f30481ec47cf1ed2df33b2e4160b26c2aeb323384c42cbc16a82dda7cd7d",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-17T19:14:28.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-17T19:14:28.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:25:44+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-17T19:14:28.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-17T19:14:28.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:25:44+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-17T19:14:28.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-17T19:14:28.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:25:44+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-17T19:14:28.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-17T19:14:28.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:25:44+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T21:25:44+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T19:14:28.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:25:44+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T19:14:28.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-17T19:14:28.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:25:44+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T19:14:28.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-17T19:14:28.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:25:44+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T19:14:28.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-17T19:14:28.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:25:44+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T19:14:28.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-17T19:14:28.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:25:44+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T19:14:28.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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T21:25:44+02:00",
        "latest": [
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "1292691b6e4502fe7c595185717447982d72b9547af78b6978e7d65f6984a081",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "5160b37e006427c3023c6d76b92514490dba295726aa0f495cdd735929681609",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "8bc47df50ecbc624ec255bf7b02c1589c86242997b446469d393fd02906796e9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "5b484a1a8919ad935123bf170340cf35be6367157949448767e1d0ca37a5831b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "583bc35ec76f3f660a93ad893716d9efaf80386c818cf07bb8caddab2154e90a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "74a2901097da5204077e12f640664769de67138d9b45792e708942f6925cc24b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "2f2f7684d250e1166681e4aef1339b2ecc6d02fadea67c23c56fe6ed9a7240e5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "3e8ce636267165a8a9d3177559fb9530eea37847a7332338949ebe5bbe673d01"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T213939+0200-8a0e81095394-29608360752-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T19:29:46.000Z",
      "retrievedAt": "2026-07-17T19:40:29.618Z",
      "computedAt": "2026-07-17T21:39:39+02:00",
      "gitSha": "8a0e810953940ea2b086a21bbdfb2bae115a733e",
      "previousFrameHash": "3e8ce636267165a8a9d3177559fb9530eea37847a7332338949ebe5bbe673d01",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29608360752",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "7af1b44c8111b552f7b6c9a1d01edc239595a7ec1f1deecb765ed4ce130cfba7",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "264a18ea732bd6ae7bfd402c24c84f6f67ec3fdf773819e995482b4ce2b99248",
          "bytes": 1487399,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ad294e0140448c825b3482d13b214cc41fa78f112b2706ac8c81bfbf2e08cc40",
          "bytes": 2990081,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "514f506948ad794d2e8866b950f075e3a98a69107ffd6b06ff6d646f2c2b1469",
          "bytes": 1210514,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "4e260b1ad6d2fe0f7da6ae8281f5f7b0137a671cd39859a458188b1024e5c75e",
          "bytes": 1059765,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "0df4b42edaf73f5f2e0b743d735ff9b2256e71044338cabd6b5dbd981aba2f3c",
          "bytes": 32351,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "89c2fd723b2dc1ea1ccf751176dd227b5c22bfd8a8cd11eb1164fb4cb99f8d41",
          "bytes": 13696,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "b749535abd2997911936d9b3f324265d259e7bf13b1ce0d76301499ae8232c8c",
          "bytes": 212673,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "929c3fe2ad7acbe707f561b837cf5fe334442c7b2f0a64f89212aea225104e16",
          "bytes": 149808,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "2c669f3ff3d5cb7036612667a7a8efd74a5ea698388152cab8c79ed8ae95b99d",
          "bytes": 11247,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "495175f4abc92b285207c0a3030e4123eade07e7a02fb05cde83da8cb7dcdf40",
          "bytes": 6430,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "71b972e61c422026ab8b0409e60ad7f1232a7f42983c48e3e839ac6e34dd9136",
          "bytes": 12786,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-17T19:29:46.000Z:4c5de4104650",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-17T19:29:46.000Z",
          "sourcePublishedAt": "2026-07-17T19:29:46.000Z",
          "retrievedAt": "2026-07-17T19:40:29.618Z",
          "computedAt": "2026-07-17T21:39:39+02:00",
          "value": 54,
          "rawValue": 54.1450415961738,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "4c5de4104650d08c911da9a0dc40e6055afd2e98713d2083a6377f13afe3ec68",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-17T19:29:46.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-17T19:29:46.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:39:39+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-17T19:29:46.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-17T19:29:46.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:39:39+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-17T19:29:46.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-17T19:29:46.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:39:39+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-17T19:29:46.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-17T19:29:46.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:39:39+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T21:39:39+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T19:29:46.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:39:39+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T19:29:46.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-17T19:29:46.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:39:39+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T19:29:46.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-17T19:29:46.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:39:39+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T19:29:46.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-17T19:29:46.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:39:39+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T19:29:46.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-17T19:29:46.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:39:39+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T19:29:46.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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T21:39:39+02:00",
        "latest": [
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "4c56ab715a621a1e8a874ed547ac4be54a2a2ffdfcdb9710b725244f2311ba3d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "10961d4abbf143ff43316ad952ae21642a68f153d5cfcf9379e5112cb9e80f37",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "0cf2adc1726409d82618d3366c4c95b502e60ebb8457ea72a85670538ce23839",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "069bc139a3c93918246447ce98bff0d40fc9f650cc69134f932f79a47045a28e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "31d3da15697cd4a5d7f5e869661182dacdd0a07c34b9a1f3c2430067754e06ae",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "275e55e0c1c6688a6744e41e880b4ee9372554a2dc57a8bb2b50ff26af52a090",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "d1149b5e02e6319c3d5485b8a97f75511533d2cb7e704059beac06ebdcc2a1fc",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "b55286d917f845ca772bb16afe73f9ffa4f39c4af81b272b0652a2b8a7a8a705"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T214921+0200-532f85455d8d-29608960971-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T19:44:57.000Z",
      "retrievedAt": "2026-07-17T19:50:10.858Z",
      "computedAt": "2026-07-17T21:49:21+02:00",
      "gitSha": "532f85455d8d7d076f37eb3b87bd06ec06a441fc",
      "previousFrameHash": "b55286d917f845ca772bb16afe73f9ffa4f39c4af81b272b0652a2b8a7a8a705",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29608960971",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "7af1b44c8111b552f7b6c9a1d01edc239595a7ec1f1deecb765ed4ce130cfba7",
          "bytes": 6778,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "0442adedd90954bbfd3e0beab5c0591e75a885d6fc8267fff9f917712dda9c91",
          "bytes": 77781,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "8857a35d7fb39f25e811a044a48bc4848548bdb242b972bde789ca89b72265e4",
          "bytes": 1487399,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ad294e0140448c825b3482d13b214cc41fa78f112b2706ac8c81bfbf2e08cc40",
          "bytes": 2990081,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "867eb0d09f7302eb3d354b014fdefe8ec7ffa6875d40a077062616131913ef44",
          "bytes": 1210514,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "9d19b0bd308a4fce1654703ed199dc28c28e37742a1521cde198114d84be6101",
          "bytes": 1059765,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "0df4b42edaf73f5f2e0b743d735ff9b2256e71044338cabd6b5dbd981aba2f3c",
          "bytes": 32351,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "1889a69d9f5607d4aae28bfa5c9279a3a8d3a3480bd395834b976b9c07911e3d",
          "bytes": 13696,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "7234ca251917afde9ec3e017666d93da775ed0d50428d3d9dab2d26ee1211917",
          "bytes": 212673,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "a1e590f2342f4504ddcfa462917dc9d9608f3a9c8929e47b9562d6ae08e68c85",
          "bytes": 149058,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "2ed5049320c41c8f4412f4474ceb9f9eea0e4f0189badf56b34c539c2aa851b3",
          "bytes": 11247,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "e856c1cb8fd51213537e0f8b0896419d397d11bb0660fd65adb8112fc65d6d20",
          "bytes": 6430,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "7316ef8a3275dc355be4d5fc8c96e6537446a1dd98145bda7b0635b6c3402cd4",
          "bytes": 12786,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:debt:2026-07-17T19:44:57.000Z:12c7a3ce27aa",
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-17T19:44:57.000Z",
          "sourcePublishedAt": "2026-07-17T19:44:57.000Z",
          "retrievedAt": "2026-07-17T19:50:10.858Z",
          "computedAt": "2026-07-17T21:49:21+02:00",
          "value": 54,
          "rawValue": 54.1450415961738,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "12c7a3ce27aa9d04eeabee5136bb9126a17ded7ea0ee478e8bdcd7b21f25e02d",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:energie:2026-07-17T19:44:57.000Z:8c60a31ea583",
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-17T19:44:57.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:49:21+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:eu:2026-07-17T19:44:57.000Z:5b37f213a051",
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-17T19:44:57.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:49:21+02:00",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:us:2026-07-17T19:44:57.000Z:6eeb16dc602e",
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-17T19:44:57.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:49:21+02:00",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "1",
          "recordId": "obs:yen:2026-07-17T19:44:57.000Z:1ae30525f14b",
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-17T19:44:57.000Z",
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:49:21+02:00",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalise par instrument, pas une probabilite.",
            "Les dates sourcePublishedAt et retrievedAt peuvent rester null si le dashboard amont ne les expose pas.",
            "La serie historique complete depend de l archive append-only public/signals-history.ndjson."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T21:49:21+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T19:44:57.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:49:21+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T19:44:57.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-17T19:44:57.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:49:21+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T19:44:57.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-17T19:44:57.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:49:21+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T19:44:57.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-17T19:44:57.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:49:21+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T19:44:57.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-17T19:44:57.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T21:49:21+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T19:44:57.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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T21:49:21+02:00",
        "latest": [
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "cd28f306b0be85327d8ee1c8dff8e782ba0592ab2cdd83b55457465ea7cfb32f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "9263ba45f4f84358670672d5a30bcfc61b8e947dbae5720e3b444e3604cbeb13",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "b1a6117dcb15f556d3d09a574ee280f956ff3916fa3cd3c891684d57ae320560",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "86ff5064e6a7d28c006d799e41db3f9cffdd2dfcdf032eef5a5038f23029d332",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "da915743b8264912e7f020b8505cda93b335a0e085d320aedb202e8aff79e336",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "68300b875f5d615c29a7439d1f6c6409f0596952141ad412cb784f596dd4d39f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ba947525b647ad1e",
            "date": "2026-07-16T07:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "title": "Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé",
            "url": "https://l0g.fr/posts/assureurs-vie-epargne-retraite-credit-prive-bermudes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Assureurs-vie : l'épargne retraite, carburant silencieux du crédit privé.",
            "objectId": "article:assureurs-vie-epargne-retraite-credit-prive-bermudes",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:45:00.000Z",
            "previousHash": null,
            "currentHash": "8005f58f408296eb9d863d4866bf659db8aee485c720ca074b8d42f28d214df9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "45b4db8188ae36e39eef8f12b9effe735061ce33d54f2b1c5424c1a16313e404"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T231236+0200-5f9e7a50cc98-29613944079-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T21:01:34.000Z",
      "retrievedAt": "2026-07-17T21:13:24.283Z",
      "computedAt": "2026-07-17T23:12:36+02:00",
      "gitSha": "5f9e7a50cc98727b0d820ec36d30c7493a31dab1",
      "previousFrameHash": "45b4db8188ae36e39eef8f12b9effe735061ce33d54f2b1c5424c1a16313e404",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29613944079",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "86dbab495ee4ff0d7c980c2a48071f1f3007c9b0dca9bc5a8fc952c8d0af757f",
          "bytes": 6995,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "bef2c541495d3aa47338b437ce4afcbc3d397b716965b8501cef4664094d5a86",
          "bytes": 85271,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "d52261ea2dc2a050a82549f8ae33f9ffc5cdb3782e0282e18d111d9147cf7ba4",
          "bytes": 1488033,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "042349d2b6f9958b69ebe9d0367609d74a0eb5894b51813dc5fd2e4eba0f8b02",
          "bytes": 2990081,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "28011403299b0bd00d11270958c40138d7e4de40682ec7ffa88a2e6410e9eeca",
          "bytes": 1210514,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "550427663695995b8feb6c3905fbeb10311b1d0926f709fbd46564d8fadd9a23",
          "bytes": 1059765,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "d232232f0cab8f7d95c0f2443a004a210289c906bf436d7e74332b1269213976",
          "bytes": 32351,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "d3b1c61fd03fe158779cae6dc51efe98c6b6feb343a5149b3f64f07744584b7a",
          "bytes": 13754,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "445d66091ccdcc73fb5b5251af80949eb5903e08e8e53237036cdcd01d484d97",
          "bytes": 213651,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "852f20d24a439fc417d74b53d0304a2d6ebb96d5712a25246cf6616eb76746c2",
          "bytes": 153352,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "a46cafe9a048bb71b6575e51d4db4a118876c9f37c9b8a9efefcf476d332b7b2",
          "bytes": 11248,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "8ae10b5853a62399639d3a18e1fad8568bd688ecb91c4c8840777a4626615592",
          "bytes": 6431,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "cbe29c1648b2bbb9aabcfb586ec69d28599cc7befa68dfdaf553ef252c335fde",
          "bytes": 269913,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-17T21:12:36.000Z:1865c13a16f3",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-17T21:12:36.000Z",
          "observedAt": "2026-07-17T21:01:34.000Z",
          "sourcePublishedAt": "2026-07-17T21:01:34.000Z",
          "retrievedAt": "2026-07-17T21:13:24.283Z",
          "computedAt": "2026-07-17T21:12:36.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.20727268757825,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "1865c13a16f32f9ab50f2e6543c875fe4d24619a3f2e1eab446a980e3e51d0a2",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-17T21:12:36.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-17T21:12:36.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:12:36.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-17T21:12:36.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-17T21:12:36.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:12:36.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-17T21:12:36.000Z:6eeb16dc602e",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-17T21:12:36.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:12:36.000Z",
          "archivedAt": null,
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-17T21:12:36.000Z:1ae30525f14b",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-17T21:12:36.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:12:36.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T23:12:36+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T21:01:34.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T23:12:36+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T21:01:34.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-17T21:01:34.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T23:12:36+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T21:01:34.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-17T21:01:34.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T23:12:36+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T21:01:34.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-17T21:01:34.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T23:12:36+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T21:01:34.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-17T21:01:34.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T23:12:36+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T21:01:34.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, seriesDate pour la publication des signaux, observedAt pour la date économique amont, 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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T23:12:36+02:00",
        "latest": [
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "6123ecbde5d3919cfbd06fa754fbb4f49ca6d65dff8fcbab1bd80b0c5ac2c87b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "e4bfc4cc9e9c48c180e3b1b748a97ccbc5f0806e1db8e0736e1a0905dafed36f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "bab5eda5f6430113a4c52cbfa667d736090a27985029b449fce904e3ccf98022",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "f90b9571e0f2196d1768942c30fe2b99c504d60a17521284c1438cac5f0ad57b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "2575c67b5dcf4da6938f6e6a7dd3e15f09bf70511029070cef04215ce6532621",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "def5902a102b3f6e447a3b94b8fc9062e8246b353e7b9bf6aa56b48c255352d2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "0918b6a366545d03b77adb4424d2f07f28bf5717b3546443e8bf295810a46a95"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T232952+0200-ffb5bfa19633-29614920553-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T21:15:47.000Z",
      "retrievedAt": "2026-07-17T21:30:42.420Z",
      "computedAt": "2026-07-17T23:29:52+02:00",
      "gitSha": "ffb5bfa19633a2990c1e406775a51f84d1cae2a7",
      "previousFrameHash": "0918b6a366545d03b77adb4424d2f07f28bf5717b3546443e8bf295810a46a95",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29614920553",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "86dbab495ee4ff0d7c980c2a48071f1f3007c9b0dca9bc5a8fc952c8d0af757f",
          "bytes": 6995,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "bef2c541495d3aa47338b437ce4afcbc3d397b716965b8501cef4664094d5a86",
          "bytes": 85271,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "69a628417ce934c0587c95e74c01449191e2a338c251de437051712cea8b2321",
          "bytes": 1488033,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "042349d2b6f9958b69ebe9d0367609d74a0eb5894b51813dc5fd2e4eba0f8b02",
          "bytes": 2990081,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "d61630928f4d2c9a1c95e922edac7679fae40a63f33110f8adfcef662eadda85",
          "bytes": 1210514,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "57909f5fbceb4fab296749d24891c3fcc09a658b80d518412d930f05b9fe912c",
          "bytes": 1059765,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "d232232f0cab8f7d95c0f2443a004a210289c906bf436d7e74332b1269213976",
          "bytes": 32351,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "a3a54c54e2ca696890f63b11d242108afe84cc457725dd9623d24aa30c57af6d",
          "bytes": 13754,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "c9c7307b241890bf97723a9c5012c93b83a7da820c75f22bc38f397fa4216834",
          "bytes": 213651,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "33bb927d309c4de10642fab682c67ae97646254ad33094e3a98372e21d924898",
          "bytes": 153699,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "943351e469ccc11c523c7fe9e17afcc4fb351bf973ee74b029fa0a975fa66f72",
          "bytes": 11250,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "01ef57ce8ae33104e7bc8fd1b3b7b07d1f098a1ff604d7044137e77ee493038a",
          "bytes": 6433,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "191351fcda88fb50b2a0ce59bcbd77b9b28f743016de3c73f1a47570d9c06588",
          "bytes": 278301,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-17T21:29:52.000Z:7d13ea4e3495",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-17T21:29:52.000Z",
          "observedAt": "2026-07-17T21:15:47.000Z",
          "sourcePublishedAt": "2026-07-17T21:15:47.000Z",
          "retrievedAt": "2026-07-17T21:30:42.420Z",
          "computedAt": "2026-07-17T21:29:52.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.26956191617821,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "7d13ea4e34957ada5b465708c4f5415957ac84a6fca91803dbe3d5287328e37a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-17T21:29:52.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-17T21:29:52.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:29:52.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-17T21:29:52.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-17T21:29:52.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:29:52.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-17T21:29:52.000Z:6eeb16dc602e",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-17T21:29:52.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:29:52.000Z",
          "archivedAt": null,
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-17T21:29:52.000Z:1ae30525f14b",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-17T21:29:52.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:29:52.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T23:29:52+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T21:15:47.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T23:29:52+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T21:15:47.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-17T21:15:47.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T23:29:52+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T21:15:47.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-17T21:15:47.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T23:29:52+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T21:15:47.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-17T21:15:47.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T23:29:52+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T21:15:47.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-17T21:15:47.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T23:29:52+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T21:15:47.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, seriesDate pour la publication des signaux, observedAt pour la date économique amont, 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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T23:29:52+02:00",
        "latest": [
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "504c64faf248c9640e7643b79d3bb2066c473e5b96111af7a17a48e102526328",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "a55d149711aa99dd1430481035cc21436dcb2119fcf55c1d3f03976105701a54",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "464d7ee5352086b4165649123cd03cf83e909006a72866f23f0e5e1d05866bdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "359774347cab2374927e5da1b2c6aab6d171665485aa9a75ded84c8855fcdfec",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "f15ad8a50e77416a66ff78bc47623ee627ed8eb7bc0cb807ebe86fe1cde3b3c2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "ac800f92cfa0bee98a6ed00bef4e7544c427a25cfa76feb2a5e825541768972e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "13dbd446ed30d1c0",
            "date": "2026-07-16T07:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "life-insurers-retirement-savings-private-credit-bermuda",
            "title": "Life insurers: retirement savings, the silent fuel of private credit",
            "url": "https://l0g.fr/en/analysis/life-insurers-retirement-savings-private-credit-bermuda/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Life insurers: retirement savings, the silent fuel of private credit.",
            "objectId": "article:en:life-insurers-retirement-savings-private-credit-bermuda",
            "previousVersion": null,
            "currentVersion": "2026-07-16T07:55:00.000Z",
            "previousHash": null,
            "currentHash": "19085c13479751bbf78ae2ad5099e6d5649be68c02662a6e686aa79be46d8ecd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "f4e2b212cb7c35e75d29b2928ee36396d18a8d8a9745616d83b0326ae2df6d63"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260717T234939+0200-6bba10e97b50-29615989185-1",
      "date": "2026-07-17",
      "observedAt": "2026-07-17T21:45:45.000Z",
      "retrievedAt": "2026-07-17T21:50:37.924Z",
      "computedAt": "2026-07-17T23:49:39+02:00",
      "gitSha": "6bba10e97b501e751dd411a732126e991166e128",
      "previousFrameHash": "f4e2b212cb7c35e75d29b2928ee36396d18a8d8a9745616d83b0326ae2df6d63",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29615989185",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "4194ce503197495ff171c63ed34f01c0837afc9387b9e8ea932a70855e4caf2c",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "17356a76da582bc7797851d820325b945ed84d688bc866e4949b0e6982b9f602",
          "bytes": 85207,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "24037b96e741550c829e586afdb685ad0c6997a4ebf5d6b79b7e822f6019c572",
          "bytes": 1001496,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "8eb0693ceadbaf906fe819a0d4a2b6c730201396539b4cc362f2a15a18c1bb00",
          "bytes": 2990081,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "b7ba4fd79923cd163de3abf3e720baa25e4884a60a6ea38af73c7c2ad680ff82",
          "bytes": 502080,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "ea48663d6afda2c12f866682505ddbbf63ea9fb1dafaa43fa754e48daaa1c41b",
          "bytes": 467953,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "71fb93ba7c3b6faf24615f87d87bee1a967cb69116980f16fdd3890e4b64b1f6",
          "bytes": 26836,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "852e43ca65ca161718fdfe7d46c0692f5a51a6793af29652e6bdd3c1085f0643",
          "bytes": 13754,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "e35aedef278178a442e7546d6ae5e4b6a7a2df77d51dcd7c3aea79078aabb22b",
          "bytes": 214614,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "5a72fdc1b5cb16cc89697232ed158807eee4255ae6d802f8deb582846f9da1a1",
          "bytes": 149045,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "5093a8d97886bb947fd5287d12f48e25becb330f4a9d93816cdfd0bcdde9b2cb",
          "bytes": 11250,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "772d9942d90dd7b32f09cb4df368fe446185a197325eac7e04136343b99a2ef5",
          "bytes": 6433,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "03dd78bde8b96340709492a8a7e595e7b73a2e9477d70cbfecd3f554c237fafa",
          "bytes": 286688,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-17T21:49:39.000Z:8e68dfeec9d0",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-17T21:49:39.000Z",
          "observedAt": "2026-07-17T21:45:45.000Z",
          "sourcePublishedAt": "2026-07-17T21:45:45.000Z",
          "retrievedAt": "2026-07-17T21:50:37.924Z",
          "computedAt": "2026-07-17T21:49:39.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.26956191617821,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "8e68dfeec9d0be8c499076eebd86f47899aacb7f8e8eff30d514fbf7b492bcd3",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-17T21:49:39.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-17T21:49:39.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:49:39.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-17T21:49:39.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-17T21:49:39.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:49:39.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-17T21:49:39.000Z:6eeb16dc602e",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-17T21:49:39.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:49:39.000Z",
          "archivedAt": null,
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-17T21:49:39.000Z:1ae30525f14b",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-17T21:49:39.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T21:49:39.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-17T23:49:39+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T21:45:45.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T23:49:39+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T21:45:45.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-17T21:45:45.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T23:49:39+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T21:45:45.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-17T21:45:45.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T23:49:39+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T21:45:45.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-17T21:45:45.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T23:49:39+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T21:45:45.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-17T21:45:45.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-17T23:49:39+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T21:45:45.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, seriesDate pour la publication des signaux, observedAt pour la date économique amont, 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/"
        }
      },
      "changes": {
        "generated": "2026-07-17T23:49:39+02:00",
        "latest": [
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "be32fd7439b5f802e1abee47ea33c52c4c0aee987ac5e58ce663e3f4e79dd619",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "2f2e1aa9a0bb57c9ba8a093f93703adb50f3afdddb9978a2b2a8cee72ed33156",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "00a49e53726d4ce17dc9853b67689440a8559e5aed92f46126853ba0e6341161",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "5307b073c68576a06685ca73ac3399bfdb60de965a70ccb722dd59f047dfd806",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5faafa5906e8cbff",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-méthode",
            "title": "Claims structurants typés et sélectionnés par le risque",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "La surface limite désormais chaque article à trois claims structurants maximum et supprime le type assertion non classée. Chaque claim est classée en fait, estimation, inférence ou scénario ; ce typage heuristique reste distinct d’une revue canonique complète.",
            "objectId": "policy:2026-07-17-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "e2d57e3bcf8e770acaa59831eade935fb003f6eac6d7abad428647706684873b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "dc2224d1ebabe16520425d8e7ac8451f98012706480085af660994ba52f7d370",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "a01ec1df24b53acf410da05dcf4a7fc3dad674467c3c99c87b302a9dd9f39165",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "40443b8f11458c1e50eaa378209cce6165491eba4385c9205d0f44507f7435f3"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260718T002435+0200-3c51fbf89bec-29617804460-1",
      "date": "2026-07-18",
      "observedAt": "2026-07-17T22:16:07.000Z",
      "retrievedAt": "2026-07-17T22:25:23.327Z",
      "computedAt": "2026-07-18T00:24:35+02:00",
      "gitSha": "3c51fbf89bec0c6ff5f273cbd9c286b354205b3b",
      "previousFrameHash": "40443b8f11458c1e50eaa378209cce6165491eba4385c9205d0f44507f7435f3",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29617804460",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "4194ce503197495ff171c63ed34f01c0837afc9387b9e8ea932a70855e4caf2c",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "17356a76da582bc7797851d820325b945ed84d688bc866e4949b0e6982b9f602",
          "bytes": 85207,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "f5558e5b416a642efacaa09b313e293d9bc487ffc2bebcd698614b4510436fbb",
          "bytes": 1001496,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "8eb0693ceadbaf906fe819a0d4a2b6c730201396539b4cc362f2a15a18c1bb00",
          "bytes": 2990081,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "4b0fa935c4500404b59311d4f036146f78993d70510abb0b0e0628ae1852551b",
          "bytes": 502080,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "9642a23bf7c3112477a2b90e21a1d578a042cc4c2945e39c29807679ca5feaac",
          "bytes": 467953,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "71fb93ba7c3b6faf24615f87d87bee1a967cb69116980f16fdd3890e4b64b1f6",
          "bytes": 26836,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "8d480b5696d033ff8748049071b91fadec8590dba702816a5c2217a81869c447",
          "bytes": 13754,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "522414c51f0305ae8f1eac17bb892e144ef26ec0ef7b4523167de62c0613a735",
          "bytes": 214614,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "cf01b5c048263fd829303aa3223afb33d8476140dd108476ece466a0c7f57d5f",
          "bytes": 149045,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "13f3dd4fa8dc727e723ab6449802a36806a392c2244c27ca5a18b9cdc9e82b57",
          "bytes": 11250,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "b83cf45beda2d89db8215d053020ce056a29f664b4ef0f6294a6607a891602f6",
          "bytes": 6433,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "d4e0bdcd57b08ee2cafc8c22df857d6d676ceef2c5a17ebad578a38a706f886c",
          "bytes": 295077,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-17T22:24:35.000Z:6c8478349c26",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-17T22:24:35.000Z",
          "observedAt": "2026-07-17T22:16:07.000Z",
          "sourcePublishedAt": "2026-07-17T22:16:07.000Z",
          "retrievedAt": "2026-07-17T22:25:23.327Z",
          "computedAt": "2026-07-17T22:24:35.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.269720892493694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "6c8478349c26b4e08d4b2f20a87b961559eca45b8c97e5ed2f3c1580baf7e1c2",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-17T22:24:35.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-17T22:24:35.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T22:24:35.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-17T22:24:35.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-17T22:24:35.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T22:24:35.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-17T22:24:35.000Z:6eeb16dc602e",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-17T22:24:35.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T22:24:35.000Z",
          "archivedAt": null,
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-17T22:24:35.000Z:1ae30525f14b",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-17T22:24:35.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-17T22:24:35.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-18T00:24:35+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-17T22:16:07.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-18T00:24:35+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T22:16:07.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-17T22:16:07.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-18T00:24:35+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T22:16:07.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-17T22:16:07.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-18T00:24:35+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T22:16:07.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-17T22:16:07.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-18T00:24:35+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T22:16:07.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-17T22:16:07.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-18T00:24:35+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-24T22:16:07.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, seriesDate pour la publication des signaux, observedAt pour la date économique amont, 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/"
        }
      },
      "changes": {
        "generated": "2026-07-18T00:24:35+02:00",
        "latest": [
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "006d528f6542b8e7226dede5a1d25c6500a9aefe4b55162bbac9c0d41d4d85b0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "0251fd9a35aa226924c90193325fa573990fc8505d2802b80d38e643410fb713",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "921881f58bec65f2107a842ad91bf29f67aa2044f88f9e2075c13e725994e228",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "07ba72b6f528305e89af4598e00208348ab2ddecd5b73cf4327e78674b1ad49b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5faafa5906e8cbff",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-méthode",
            "title": "Claims structurants typés et sélectionnés par le risque",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "La surface limite désormais chaque article à trois claims structurants maximum et supprime le type assertion non classée. Chaque claim est classée en fait, estimation, inférence ou scénario ; ce typage heuristique reste distinct d’une revue canonique complète.",
            "objectId": "policy:2026-07-17-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "e2d57e3bcf8e770acaa59831eade935fb003f6eac6d7abad428647706684873b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "46741feab5213a2ddfd4ccbca1d8695aadea65c8aa76f74e40889c1b0f2aec46",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "580583e322caa4e3",
            "date": "2026-07-16T12:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "les-horloges-d-aout-mou-usa-iran-echeances",
            "title": "Les horloges brisées du mémorandum USA-Iran",
            "url": "https://l0g.fr/posts/les-horloges-d-aout-mou-usa-iran-echeances/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Les horloges brisées du mémorandum USA-Iran.",
            "objectId": "article:les-horloges-d-aout-mou-usa-iran-echeances",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:30:00.000Z",
            "previousHash": null,
            "currentHash": "bd52616a3f9a7c26c1fd20f310e14156023711aee80d018ee32ffd6934e96745",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "d57ba2437fa5d678fe5220ce5eee5fc48630921106617f9655cb0076b017369f"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260718T021523+0200-5f48234a7296-29622698676-1",
      "date": "2026-07-18",
      "observedAt": "2026-07-18T00:02:13.000Z",
      "retrievedAt": "2026-07-18T00:16:21.457Z",
      "computedAt": "2026-07-18T02:15:23+02:00",
      "gitSha": "5f48234a7296c1b22eb0fc7f265870deaf4e0052",
      "previousFrameHash": "d57ba2437fa5d678fe5220ce5eee5fc48630921106617f9655cb0076b017369f",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29622698676",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "61444964ca0cf2e3315993cb8e30cf4d3550f0a14684fc2436157c81e21a638a",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "cc9d7d3154cb3413104a7cf55758b20be54befdf8e0937ade17bc826d19e3122",
          "bytes": 85760,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "8de17a56fe0f2b234786a3b3f513989149517c1cc3eefbcdf93d452ba9907009",
          "bytes": 1000134,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "0bb86dc5df27c5776e62a269ba496d9263af43719ef9872206fc3882903f78b7",
          "bytes": 2984607,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "3b38327b932d2435fa9ab6e805b60f507c512e06fb0b1aecdccf3dee3d010960",
          "bytes": 504304,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "dbeee32df64ec941d1988ccb20a901c716741629e8c69999df097c1cef000ab1",
          "bytes": 467949,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "1103e753033f7560b4b10c7fa2c196bb389bbd22a582b0a8f55a34b5aca59ceb",
          "bytes": 26836,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "09b9d3f9e38739e1c5586653d4c0b083cd449df162fe6b63cc56369cc3c0933b",
          "bytes": 13754,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "db984d0ffd5a60d31f579aff6094dee41e7c0a3d3ba44b2f581b9e15d8119091",
          "bytes": 215577,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "7341870ff351518cb21a31a29846a97b1e72a71ecfdb41179f5820b4281bbc62",
          "bytes": 133685,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "6f94fbf1f0fae9342cd4d21ca318aacba3eb2a936e76577dcd8d2cac31500a45",
          "bytes": 11250,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "dc77b83314aae490eda155a950d5b08a8995129f5eb376031b145275777b883e",
          "bytes": 6433,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "8b1ecc2eb7037ccacd88c093e5c0609137c0d714a46d42885cd9732acc4cf3ea",
          "bytes": 303465,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-18T00:15:23.000Z:06d0493a98a5",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-18T00:15:23.000Z",
          "observedAt": "2026-07-18T00:02:13.000Z",
          "sourcePublishedAt": "2026-07-18T00:02:13.000Z",
          "retrievedAt": "2026-07-18T00:16:21.457Z",
          "computedAt": "2026-07-18T00:15:23.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.269720892493694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "06d0493a98a5f54089aee2b16b8bf74a23fbd7b0d7e5b447594b67e7de1fa8f3",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-18T00:15:23.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-18T00:15:23.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-18T00:15:23.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-18T00:15:23.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-18T00:15:23.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-18T00:15:23.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-18T00:15:23.000Z:6eeb16dc602e",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-18T00:15:23.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-18T00:15:23.000Z",
          "archivedAt": null,
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-18T00:15:23.000Z:1ae30525f14b",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-18T00:15:23.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-18T00:15:23.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-18T02:15:23+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-18T00:02:13.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-18T02:15:23+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-25T00:02:13.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-18T00:02:13.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-18T02:15:23+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-25T00:02:13.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-18T00:02:13.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-18T02:15:23+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-25T00:02:13.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-18T00:02:13.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-18T02:15:23+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-25T00:02:13.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-18T00:02:13.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-18T02:15:23+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-25T00:02:13.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, seriesDate pour la publication des signaux, observedAt pour la date économique amont, 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/"
        }
      },
      "changes": {
        "generated": "2026-07-18T02:15:23+02:00",
        "latest": [
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "ce065a9907b9c8fef52e9d46b67d18dbcc8488a45e049a93ed863715b89d8299",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "541fc18600d633369f92a224efeaee11df609e40d7bee2566956ad7d3cd52b6e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "eb2c53658af49880ca4b2a3dc58007a293bf451c1f258c03519006e6f376f00d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "6563edab54a2f7df7342d243ede14bba9b2e2e799934d881d190ffe07e929928",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5faafa5906e8cbff",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-méthode",
            "title": "Claims structurants typés et sélectionnés par le risque",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "La surface limite désormais chaque article à trois claims structurants maximum et supprime le type assertion non classée. Chaque claim est classée en fait, estimation, inférence ou scénario ; ce typage heuristique reste distinct d’une revue canonique complète.",
            "objectId": "policy:2026-07-17-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "e2d57e3bcf8e770acaa59831eade935fb003f6eac6d7abad428647706684873b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "40d663b57172902ecb0b0786956a9825626d4fc16c04b9981b472e2ea6c763e8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c701bb06312de8dd",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-solidite-d-un-assureur-vie",
            "title": "Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques",
            "url": "https://l0g.fr/guides/lire-la-solidite-d-un-assureur-vie/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la solidité d'un assureur-vie : capital, réassurance et actifs opaques.",
            "objectId": "guide:lire-la-solidite-d-un-assureur-vie",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "68ee96f9751c5748116049e921e00ba8b2fd737d37cfa68e7e950bbe5d8f12ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "53b611cf84556d1a",
            "date": "2026-07-16T12:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-august-clocks-us-iran-memorandum-deadlines",
            "title": "The broken clocks of the US-Iran memorandum",
            "url": "https://l0g.fr/en/analysis/the-august-clocks-us-iran-memorandum-deadlines/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The broken clocks of the US-Iran memorandum.",
            "objectId": "article:en:the-august-clocks-us-iran-memorandum-deadlines",
            "previousVersion": null,
            "currentVersion": "2026-07-16T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "9e20affc2da01c194925610c4576cea3d07f00bc1bca467386ca0e493b9cc77d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "fffaa4ebe5716c841019a47cc4e87035858f233bdf7b930eaea39f77df8233e0"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260718T101546+0200-bdd14017c084-29637162747-1",
      "date": "2026-07-18",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-18T08:16:22.943Z",
      "computedAt": "2026-07-18T10:15:46+02:00",
      "gitSha": "bdd14017c084a49f9b6ce408bb1f40dbd13d1f76",
      "previousFrameHash": "fffaa4ebe5716c841019a47cc4e87035858f233bdf7b930eaea39f77df8233e0",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29637162747",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "fec9b432df5fe312d1e9f8eff6854ca9466caa96d0d0e4932538d589adaf95a4",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "cc9d7d3154cb3413104a7cf55758b20be54befdf8e0937ade17bc826d19e3122",
          "bytes": 85760,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "4b3ccfd3c0fb07df18e1930e172ab8ab8679492bdab7cf3224b28c651a1578b7",
          "bytes": 1012046,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "d5d7127b29c24ae2a776476014d8eda6c7919af3d04ff84a0ce471af39068af8",
          "bytes": 3031607,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "076411cda5de70328b69d076c6c53a17ef36581454890931daabefdad5b4d8de",
          "bytes": 512371,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "d84ce3a62b721489bd09d49080b29c1702fc13dab26722b8e417d231e3b2c37b",
          "bytes": 475956,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "eaafd1227015b8781a255894bac46a44479d466dc197d2ff332f5479c5cce4b0",
          "bytes": 27092,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "f85055c77fa9bb5b9e2fd7a70f2a0bc30981d4fe00e2cd41c2c00a2a9a89ac6d",
          "bytes": 13646,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "8084fbf5e544c0ddf3a48d78a3b81d6ecad6305c8b68e1c5921a08775bc5ac69",
          "bytes": 217174,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "3218caf41e2c8825330db1a2983d9efe84a6e371c420696f8659aa8492c4cfdc",
          "bytes": 135649,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "f314336b64f65dfae7f65649f062a20605327ccf11589d506964cfaf936e5b4e",
          "bytes": 11254,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "b39e44cdb339608302de92954b786741dfed02b9e1d192a5c23bf66ea68cfc1c",
          "bytes": 6437,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "81cae0753ce4d85edbdce147195f42ce38b0d7f1bec7f8ec5bc523a9c86569ba",
          "bytes": 311853,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-18T08:15:46.000Z:126f91259c0c",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-18T08:15:46.000Z",
          "observedAt": "2026-07-18T08:07:01.000Z",
          "sourcePublishedAt": "2026-07-18T08:07:01.000Z",
          "retrievedAt": "2026-07-18T08:16:22.943Z",
          "computedAt": "2026-07-18T08:15:46.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285531303835384,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "126f91259c0c731847f212186aa187673ff06ff0da52b718de0644bc91e1eb9d",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-18T08:15:46.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-18T08:15:46.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-18T08:15:46.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-18T08:15:46.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-18T08:15:46.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-18T08:15:46.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-18T08:15:46.000Z:6eeb16dc602e",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-18T08:15:46.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-18T08:15:46.000Z",
          "archivedAt": null,
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-18T08:15:46.000Z:1ae30525f14b",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-18T08:15:46.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": null,
          "computedAt": "2026-07-18T08:15:46.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-18T10:15:46+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": "2026-07-18T08:07:01.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-18T10:15:46+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-25T08:07:01.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-18T08:07:01.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-18T10:15:46+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-25T08:07:01.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-18T08:07:01.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-18T10:15:46+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-25T08:07:01.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-18T08:07:01.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-18T10:15:46+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-25T08:07:01.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-18T08:07:01.000Z",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "computedAt": "2026-07-18T10:15:46+02:00",
            "staleAfter": "P7D",
            "expiresAt": "2026-07-25T08:07:01.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, seriesDate pour la publication des signaux, observedAt pour la date économique amont, 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/"
        }
      },
      "changes": {
        "generated": "2026-07-18T10:15:46+02:00",
        "latest": [
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "653e4e1bd4b4020610aba84492f153f592022d899c41f3c8108933ec066785b3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "b0551b1a60039385632847c7d941dfed7b0c0df181e96e98f9d3feafc162e9f8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "39b6851efcef5e80a348e1e7f4bb7266b55ba55acdab0a9fb5082c9ca9708e7e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "abbc4f96ee7b7b2c04acb02e803a1d2b095d90433842af2aa91506cfc116ef49",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "f5ae242f6a5192d76f53d1d43dbeae468e32d2a00fd2438d287d9aa9504cc9c9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5faafa5906e8cbff",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-méthode",
            "title": "Claims structurants typés et sélectionnés par le risque",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "La surface limite désormais chaque article à trois claims structurants maximum et supprime le type assertion non classée. Chaque claim est classée en fait, estimation, inférence ou scénario ; ce typage heuristique reste distinct d’une revue canonique complète.",
            "objectId": "policy:2026-07-17-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "e2d57e3bcf8e770acaa59831eade935fb003f6eac6d7abad428647706684873b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "bb95edaaa05a61d55b9a09bfe9979833b5a6526a8215ca07a9ba16aa2fad0447",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "78913c79e869a197a65a5712d5cb15dc18831965ff69de9e5cef842659622bbb"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260718T133506+0200-bce5cd8a08a3-29642857010-1",
      "date": "2026-07-18",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-18T11:37:05.972Z",
      "computedAt": "2026-07-18T13:35:06+02:00",
      "gitSha": "bce5cd8a08a32ef03b03037441e7f6340711e7ae",
      "previousFrameHash": "78913c79e869a197a65a5712d5cb15dc18831965ff69de9e5cef842659622bbb",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29642857010",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "28cff6330ed9b77c30cc34c75275869f801528847bb2f13fad6f519038e09e33",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "eea639a52d98a26b6a5ad6f8dcf93242b49f86f231734479e3c83c27503d9090",
          "bytes": 92003,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "a0bf522c18eba97a5d1995cf2727280ccf2ff1232db41ee49880b5079ae8d5d2",
          "bytes": 1012046,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "69ca1c5b9b3af6903f89cdeec4be209df88ca141926327bf48d697b8fc67c616",
          "bytes": 3031607,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "2cd2860099eb2f476247db21a672a4fdd7e03a08688a3bc8a0f8120283690d08",
          "bytes": 512371,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "068e937f857b480ab07a347efc05aa07b678aa4caec14382acdd3f2f876cbd27",
          "bytes": 475956,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "c30665bf349d9952d749b5d6968867e4b16bea40a28710a28f1aa8ec131e8816",
          "bytes": 27092,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "ed3675f472fdb2f5ec719e0b721435a0b73cf8e245627ce398463208c5dfd0f0",
          "bytes": 15010,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "48b42acce54b51246333675ff238f932e1b0070d36756429544204c3e82cfecb",
          "bytes": 217174,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "4eaac0ba64c50359631afc76a276680a97877a78e47d71a7147a6d8203bdad29",
          "bytes": 136683,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "06fe88cf89bfd0756f7b529d093d107b9feed449b448015453e5e256bb8b3a4e",
          "bytes": 13612,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "9d813e86f9cf665590643c1bb0baebbb490dc40ab2af9b98e9ef0acb0f29a27e",
          "bytes": 7085,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "def842cfc35aa217db9cd70deb108b68d39588ce2f69ac4413ad54c67d671a67",
          "bytes": 581233,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-18T11:35:06.000Z:5f0a45812aa5",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-18T11:35:06.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-18T11:23:13.000Z",
          "retrievedAt": "2026-07-18T11:37:05.972Z",
          "computedAt": "2026-07-18T11:35:06.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285531303835384,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "5f0a45812aa50e3a1fd195d6e2952922b2e32fa52b8faf500f3adfab5c8d31a8",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-18T11:35:06.000Z:5cf05c7cf53c",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-18T11:35:06.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-18T11:37:05.972Z",
          "computedAt": "2026-07-18T11:35:06.000Z",
          "archivedAt": null,
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5cf05c7cf53cb93b657584a30cba5113824cc5b07a3597aeed9d49d53fd868db",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-18T11:35:06.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-18T11:35:06.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-18T11:37:05.972Z",
          "computedAt": "2026-07-18T11:35:06.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-18T11:35:06.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-18T11:35:06.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-18T11:37:05.972Z",
          "computedAt": "2026-07-18T11:35:06.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-18T11:35:06.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-18T11:35:06.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-18T11:37:05.972Z",
          "computedAt": "2026-07-18T11:35:06.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-18T13:35:06+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-18T11:37:05.972Z",
            "lastAttemptAt": "2026-07-18T11:37:05.972Z",
            "lastSuccessAt": "2026-07-18T11:37:05.972Z",
            "computedAt": "2026-07-18T13:35:06+02:00",
            "staleAfter": "PT36H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-18T11:37:05.972Z",
            "lastAttemptAt": "2026-07-18T11:37:05.972Z",
            "lastSuccessAt": "2026-07-18T11:37:05.972Z",
            "computedAt": "2026-07-18T13:35:06+02:00",
            "staleAfter": "PT36H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-18T11:37:05.972Z",
            "lastAttemptAt": "2026-07-18T11:37:05.972Z",
            "lastSuccessAt": "2026-07-18T11:37:05.972Z",
            "computedAt": "2026-07-18T13:35:06+02:00",
            "staleAfter": "PT12H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-18T11:37:05.972Z",
            "lastAttemptAt": "2026-07-18T11:37:05.972Z",
            "lastSuccessAt": "2026-07-18T11:37:05.972Z",
            "computedAt": "2026-07-18T13:35:06+02:00",
            "staleAfter": "PT6H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-18T11:23:13.000Z",
            "retrievedAt": "2026-07-18T11:37:05.972Z",
            "lastAttemptAt": "2026-07-18T11:37:05.972Z",
            "lastSuccessAt": "2026-07-18T11:37:05.972Z",
            "computedAt": "2026-07-18T13:35:06+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-18T17:23:13.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-18T13:35:06+02:00",
        "latest": [
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "4a47d51be85f95a498334c9aaab58ce71a50c66748027d1228d41301a1e1db73",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "f08ad81a1ab446b790ac46108293a0ed54e824cb113c1e88942b4bb664c7ae70",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "f0c170dcf002193fc223d124cc7d0c9da999b6b2104ea6e6516f7c697941bc17",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "7807508bad11b61b4a929995a5e3138e5abc719ad3760f75849931ce00c7ecce",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "14e87fc18a7d501d09945f439338525486ae7b99752c07009f46610070578a3d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5faafa5906e8cbff",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-méthode",
            "title": "Claims structurants typés et sélectionnés par le risque",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "La surface limite désormais chaque article à trois claims structurants maximum et supprime le type assertion non classée. Chaque claim est classée en fait, estimation, inférence ou scénario ; ce typage heuristique reste distinct d’une revue canonique complète.",
            "objectId": "policy:2026-07-17-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "e2d57e3bcf8e770acaa59831eade935fb003f6eac6d7abad428647706684873b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "d224590634ca0b529af13dd050bc7ed833372b91f0ba98cfd17d003b2f73943a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a9c733a51f3f3395",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-gas-lng-market",
            "title": "Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage",
            "url": "https://l0g.fr/en/guides/read-gas-lng-market/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the gas and LNG market: the three benchmarks and inter-basin arbitrage.",
            "objectId": "guide:en:read-gas-lng-market",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "b9fc49e01c777ac86b22bddcce42a4a1af828df71750aec494e9a8dc4d9f3b16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "34d272366ffc3157",
            "date": "2026-07-16T16:00:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-life-insurer-health",
            "title": "Reading a life insurer's soundness: capital, reinsurance and opaque assets",
            "url": "https://l0g.fr/en/guides/read-life-insurer-health/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a life insurer's soundness: capital, reinsurance and opaque assets.",
            "objectId": "guide:en:read-life-insurer-health",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:00:00.000Z",
            "previousHash": null,
            "currentHash": "7a1698739ae26beff08f90b13b35a2f5de6b8f8fa0c08f7beeb8ab8cce7c7c0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "faa572e1ac0adf5ed8eaea9bb6ff9da177bc6375b17e44cf6818e4acbef922f6"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260719T095720+0200-370613758016-29678984204-1",
      "date": "2026-07-19",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-19T07:58:13.992Z",
      "computedAt": "2026-07-19T09:57:20+02:00",
      "gitSha": "370613758016e22c737838b5eb6119789176b7c4",
      "previousFrameHash": "faa572e1ac0adf5ed8eaea9bb6ff9da177bc6375b17e44cf6818e4acbef922f6",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29678984204",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "e1e3623a32f6621e220ca1e939427ccb7ee39d280ef94c95ae40c6185b8ffa0e",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "eea639a52d98a26b6a5ad6f8dcf93242b49f86f231734479e3c83c27503d9090",
          "bytes": 92003,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "d967bf12cfcedda350a0ee82598364b1e15435753187c05d6015214256449573",
          "bytes": 1021027,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "96c932e79683e3139a29cd0d81d7a1615cdde438e5e6aab4427a47737b217fed",
          "bytes": 3066185,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "6d9e868c329bdcd8b2aac963fdf971c97ce46cffef6b0c39f90e48d387907604",
          "bytes": 516974,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "9fedda11ab498cdbb1573a8597747bc13457f9832cb31e5815db7c787da1cc04",
          "bytes": 479799,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "cfcad37ed503b7f3e419be103d61741190a26d283b0095c63b15d1c56247df88",
          "bytes": 27092,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "cd30b7e4c1bd35b74d0246902a2cdcb89046b4e88a2d861647fbcec1289e7794",
          "bytes": 14980,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "678cf05a3076055a2069e1a804d06aea448e2db147f3339c7b4de3ded2af6a6a",
          "bytes": 218725,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "73388c7a6ac23571dcb72fa5e2990e2026f5aa1cd1e52cbc0b6d808966ea14ce",
          "bytes": 128605,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "68564cc3e67603bc04f40967c662a89fdbea681b06d5dc3461953334a892af17",
          "bytes": 13612,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "f9ada6641809d2901aaba820e67e6f3d7750afd9db6eddad0bfcac41b6810baa",
          "bytes": 7085,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "544d26b7d9e8db2cd2bcc5103e4ae929c8e7920137a6d42193842f6f9a432c47",
          "bytes": 598229,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-19T07:57:20.000Z:e596407ed1b0",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-19T07:57:20.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T07:49:36.000Z",
          "retrievedAt": "2026-07-19T07:58:13.992Z",
          "computedAt": "2026-07-19T07:57:20.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285738837846694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "e596407ed1b045cf9d252d3803169523a3486ebc79d53b9c73a83107f18061cf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-19T07:57:20.000Z:1672316a6a5c",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-19T07:57:20.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T07:58:13.992Z",
          "computedAt": "2026-07-19T07:57:20.000Z",
          "archivedAt": null,
          "value": 42,
          "rawValue": 42,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1672316a6a5c9227736c0f3de57062bfb0c13f465fccb115709d928361f54ad5",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-19T07:57:20.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-19T07:57:20.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T07:58:13.992Z",
          "computedAt": "2026-07-19T07:57:20.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-19T07:57:20.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-19T07:57:20.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T07:58:13.992Z",
          "computedAt": "2026-07-19T07:57:20.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-19T07:57:20.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-19T07:57:20.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T07:58:13.992Z",
          "computedAt": "2026-07-19T07:57:20.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-19T09:57:20+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T07:58:13.992Z",
            "lastAttemptAt": "2026-07-19T07:58:13.992Z",
            "lastSuccessAt": "2026-07-19T07:58:13.992Z",
            "computedAt": "2026-07-19T09:57:20+02:00",
            "staleAfter": "PT36H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T07:58:13.992Z",
            "lastAttemptAt": "2026-07-19T07:58:13.992Z",
            "lastSuccessAt": "2026-07-19T07:58:13.992Z",
            "computedAt": "2026-07-19T09:57:20+02:00",
            "staleAfter": "PT36H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T07:58:13.992Z",
            "lastAttemptAt": "2026-07-19T07:58:13.992Z",
            "lastSuccessAt": "2026-07-19T07:58:13.992Z",
            "computedAt": "2026-07-19T09:57:20+02:00",
            "staleAfter": "PT12H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T07:58:13.992Z",
            "lastAttemptAt": "2026-07-19T07:58:13.992Z",
            "lastSuccessAt": "2026-07-19T07:58:13.992Z",
            "computedAt": "2026-07-19T09:57:20+02:00",
            "staleAfter": "PT6H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T07:49:36.000Z",
            "retrievedAt": "2026-07-19T07:58:13.992Z",
            "lastAttemptAt": "2026-07-19T07:58:13.992Z",
            "lastSuccessAt": "2026-07-19T07:58:13.992Z",
            "computedAt": "2026-07-19T09:57:20+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T13:49:36.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-19T09:57:20+02:00",
        "latest": [
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "036f8cd0ee520d9e13de68634affe1d36d75e398910c09d782416ea93686c5ee",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "2dc7adbd91e79234c2ae6603b0dd19bda92e3bd34f6aabec24ee533b66b844bd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "f3a4542652cbac1e378b5f5eccdb12462ace9a4da2a069e4199aba0dfa159444",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "285abf011183665def0959521594a3638b0c3e23ba5fc50bd580bdcaee9df18b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "65084dcc03036f780f0cd09dc22f69086c1240e35ca359e20c0b7b564c04879c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "2ce0414e1971e6ed7c6424f77cc119b5be477f60914a6a0b0ae306e64d5a660d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "8f4be510c04b28f4722a3a0129b656f57e29a06e45f8c91a0f852dd2457de389",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5faafa5906e8cbff",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-méthode",
            "title": "Claims structurants typés et sélectionnés par le risque",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "La surface limite désormais chaque article à trois claims structurants maximum et supprime le type assertion non classée. Chaque claim est classée en fait, estimation, inférence ou scénario ; ce typage heuristique reste distinct d’une revue canonique complète.",
            "objectId": "policy:2026-07-17-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "e2d57e3bcf8e770acaa59831eade935fb003f6eac6d7abad428647706684873b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "e4a9b85dcf553987fc3239eeb0f017cd06280cbfc37a27bc69f164b4c8fbd87c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "6d987b7c8c2c0b168f10beec424645e0b4f747a7bb8523b239e09e6749c75685"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260719T113629+0200-c378c1699d43-29681886839-1",
      "date": "2026-07-19",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-19T09:37:23.924Z",
      "computedAt": "2026-07-19T11:36:29+02:00",
      "gitSha": "c378c1699d43b267514d4b63244b8b0362c487be",
      "previousFrameHash": "6d987b7c8c2c0b168f10beec424645e0b4f747a7bb8523b239e09e6749c75685",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29681886839",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "e1e3623a32f6621e220ca1e939427ccb7ee39d280ef94c95ae40c6185b8ffa0e",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "eea639a52d98a26b6a5ad6f8dcf93242b49f86f231734479e3c83c27503d9090",
          "bytes": 92003,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "b1bb18349841577f7d2425987c6c972910cfeff0328a602cec482f8bd1c3d322",
          "bytes": 1021027,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "96c932e79683e3139a29cd0d81d7a1615cdde438e5e6aab4427a47737b217fed",
          "bytes": 3066185,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "6c82af594b3b1931be717cdefa5f00a9b4cadd312a8e9173fd76fbbbf9d5a423",
          "bytes": 516974,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "a6e1f235fc2fc2a8f6e190dc768f6954b0a288925148707d33f765065934d859",
          "bytes": 479799,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "cfcad37ed503b7f3e419be103d61741190a26d283b0095c63b15d1c56247df88",
          "bytes": 27092,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "097cd6faa9bcb30e8aafe5a78e690d4e6f25e946156db2055fe78cb6f597246e",
          "bytes": 14980,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "8f02951e3944e4460712b57903054bec2af710ffb734e0a36a629457cf9d2d43",
          "bytes": 218725,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "a452b85ac81f4d2f35dc95e8753be5ec9f2403b5b2485cd156973e162b260b52",
          "bytes": 127798,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "a4ee6d792215e725f54b40aae3bab202a816f6a31804f7daebe7e0f0f09396af",
          "bytes": 13611,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "2bd95cb350524617d28d4f09afeb80d4fb3b5697247092140702693c2972c4eb",
          "bytes": 7084,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "4f92be3281c804d7ede1ae56aae8818b4eb42b271fbb938b98695559d2a1df66",
          "bytes": 607823,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-19T09:36:29.000Z:5a18d8375304",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-19T09:36:29.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T09:35:59.000Z",
          "retrievedAt": "2026-07-19T09:37:23.924Z",
          "computedAt": "2026-07-19T09:36:29.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285738837846694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "5a18d837530451a36cbe5f153c85df39fd0828ec450320b5f586c7816a27ebb4",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-19T09:36:29.000Z:1672316a6a5c",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-19T09:36:29.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T09:37:23.924Z",
          "computedAt": "2026-07-19T09:36:29.000Z",
          "archivedAt": null,
          "value": 42,
          "rawValue": 42,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1672316a6a5c9227736c0f3de57062bfb0c13f465fccb115709d928361f54ad5",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-19T09:36:29.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-19T09:36:29.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T09:37:23.924Z",
          "computedAt": "2026-07-19T09:36:29.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-19T09:36:29.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-19T09:36:29.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T09:37:23.924Z",
          "computedAt": "2026-07-19T09:36:29.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-19T09:36:29.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-19T09:36:29.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T09:37:23.924Z",
          "computedAt": "2026-07-19T09:36:29.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-19T11:36:29+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T09:37:23.924Z",
            "lastAttemptAt": "2026-07-19T09:37:23.924Z",
            "lastSuccessAt": "2026-07-19T09:37:23.924Z",
            "computedAt": "2026-07-19T11:36:29+02:00",
            "staleAfter": "PT36H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T09:37:23.924Z",
            "lastAttemptAt": "2026-07-19T09:37:23.924Z",
            "lastSuccessAt": "2026-07-19T09:37:23.924Z",
            "computedAt": "2026-07-19T11:36:29+02:00",
            "staleAfter": "PT36H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T09:37:23.924Z",
            "lastAttemptAt": "2026-07-19T09:37:23.924Z",
            "lastSuccessAt": "2026-07-19T09:37:23.924Z",
            "computedAt": "2026-07-19T11:36:29+02:00",
            "staleAfter": "PT12H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T09:37:23.924Z",
            "lastAttemptAt": "2026-07-19T09:37:23.924Z",
            "lastSuccessAt": "2026-07-19T09:37:23.924Z",
            "computedAt": "2026-07-19T11:36:29+02:00",
            "staleAfter": "PT6H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T09:35:59.000Z",
            "retrievedAt": "2026-07-19T09:37:23.924Z",
            "lastAttemptAt": "2026-07-19T09:37:23.924Z",
            "lastSuccessAt": "2026-07-19T09:37:23.924Z",
            "computedAt": "2026-07-19T11:36:29+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T15:35:59.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-19T11:36:29+02:00",
        "latest": [
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "036f8cd0ee520d9e13de68634affe1d36d75e398910c09d782416ea93686c5ee",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "2dc7adbd91e79234c2ae6603b0dd19bda92e3bd34f6aabec24ee533b66b844bd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "bc9b7a092a2c46faf43b120385ed9a4e4056e700a9e6c2833013f86d4cbfee3c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "f0c4f2d06b71ace9b3329a1c566b15e2fe5ac3f3bb9c021ab58259b615c279b8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "49975acdf3cb9bc6dcd717cde4d48fbf236a784fb2efd50e2af428aa2de9fec6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "f08eaae21b513c71b896b1422b08dafe8f5ab69a2a589bf14a8b89aa64bddee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "34934c4532101ca7de86c3c61fdd564b94cab0b7c50d43aa16587df31bd1c83a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5faafa5906e8cbff",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-méthode",
            "title": "Claims structurants typés et sélectionnés par le risque",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "La surface limite désormais chaque article à trois claims structurants maximum et supprime le type assertion non classée. Chaque claim est classée en fait, estimation, inférence ou scénario ; ce typage heuristique reste distinct d’une revue canonique complète.",
            "objectId": "policy:2026-07-17-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "e2d57e3bcf8e770acaa59831eade935fb003f6eac6d7abad428647706684873b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "06997de1689bd4ff6055d15654121ff150d83db732cb4d677435826b6ae16ed1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "da52034359c1b868b03c29c2dbedca8f665ad2caf915dfef985732bc2ae4a979"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260719T113952+0200-a6a88725b36e-29681986855-1",
      "date": "2026-07-19",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-19T09:40:51.826Z",
      "computedAt": "2026-07-19T11:39:52+02:00",
      "gitSha": "a6a88725b36e418fb01772a819c98a4b3aaa42f0",
      "previousFrameHash": "da52034359c1b868b03c29c2dbedca8f665ad2caf915dfef985732bc2ae4a979",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29681986855",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "e1e3623a32f6621e220ca1e939427ccb7ee39d280ef94c95ae40c6185b8ffa0e",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "eea639a52d98a26b6a5ad6f8dcf93242b49f86f231734479e3c83c27503d9090",
          "bytes": 92003,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "3ebc45a8c9b529b9560f0ab38c5e1b5be3e44a37a538aa4b0ca4cdb8d1cf05b6",
          "bytes": 1021027,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "96c932e79683e3139a29cd0d81d7a1615cdde438e5e6aab4427a47737b217fed",
          "bytes": 3066185,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "a77fdbb0851b112fb6154c2cdb120e8c760b4dadeefbed1074dcd7b2aec7256f",
          "bytes": 516974,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "3a5519248358af1e72b211a8acb0e595e2f59975084ebe49c84fbcd9d9b911ac",
          "bytes": 479799,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "cfcad37ed503b7f3e419be103d61741190a26d283b0095c63b15d1c56247df88",
          "bytes": 27092,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "2a7956df21f5d2641c8b0d60e0e974109a03fac197eeec822f5286767dc7de40",
          "bytes": 14980,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "0515d7aa931520ae27555fedde2f648834f77cff8c1faf0e7678de49b1765f3f",
          "bytes": 218725,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "40424d70ef3150eaa1705ce20e770c871b2a9f411e6558348900a2fd1b43caf3",
          "bytes": 127798,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "1c0bda428f8dcc3e96f3797a55b97bf3083533e07e45e8114e3b75cf47652cc7",
          "bytes": 13612,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "395c0292872f2eec0563b3103fc6ff17159407ce7538bedf42d19c610844f0d2",
          "bytes": 7085,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "03df8ecffa9d2771f99636eb8126164ee0a11a698bd82a213e70fd55126a1bc8",
          "bytes": 617417,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-19T09:39:52.000Z:ed44df08cea9",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-19T09:39:52.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T09:35:59.000Z",
          "retrievedAt": "2026-07-19T09:40:51.826Z",
          "computedAt": "2026-07-19T09:39:52.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285738837846694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "ed44df08cea9088736b532c60fe4545910e664464b51d04260c8cd82f186ad97",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-19T09:39:52.000Z:1672316a6a5c",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-19T09:39:52.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T09:40:51.826Z",
          "computedAt": "2026-07-19T09:39:52.000Z",
          "archivedAt": null,
          "value": 42,
          "rawValue": 42,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1672316a6a5c9227736c0f3de57062bfb0c13f465fccb115709d928361f54ad5",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-19T09:39:52.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-19T09:39:52.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T09:40:51.826Z",
          "computedAt": "2026-07-19T09:39:52.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-19T09:39:52.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-19T09:39:52.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T09:40:51.826Z",
          "computedAt": "2026-07-19T09:39:52.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-19T09:39:52.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-19T09:39:52.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T09:40:51.826Z",
          "computedAt": "2026-07-19T09:39:52.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-19T11:39:52+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T09:40:51.826Z",
            "lastAttemptAt": "2026-07-19T09:40:51.826Z",
            "lastSuccessAt": "2026-07-19T09:40:51.826Z",
            "computedAt": "2026-07-19T11:39:52+02:00",
            "staleAfter": "PT36H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T09:40:51.826Z",
            "lastAttemptAt": "2026-07-19T09:40:51.826Z",
            "lastSuccessAt": "2026-07-19T09:40:51.826Z",
            "computedAt": "2026-07-19T11:39:52+02:00",
            "staleAfter": "PT36H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T09:40:51.826Z",
            "lastAttemptAt": "2026-07-19T09:40:51.826Z",
            "lastSuccessAt": "2026-07-19T09:40:51.826Z",
            "computedAt": "2026-07-19T11:39:52+02:00",
            "staleAfter": "PT12H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T09:40:51.826Z",
            "lastAttemptAt": "2026-07-19T09:40:51.826Z",
            "lastSuccessAt": "2026-07-19T09:40:51.826Z",
            "computedAt": "2026-07-19T11:39:52+02:00",
            "staleAfter": "PT6H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T09:35:59.000Z",
            "retrievedAt": "2026-07-19T09:40:51.826Z",
            "lastAttemptAt": "2026-07-19T09:40:51.826Z",
            "lastSuccessAt": "2026-07-19T09:40:51.826Z",
            "computedAt": "2026-07-19T11:39:52+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T15:35:59.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-19T11:39:52+02:00",
        "latest": [
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "036f8cd0ee520d9e13de68634affe1d36d75e398910c09d782416ea93686c5ee",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "2dc7adbd91e79234c2ae6603b0dd19bda92e3bd34f6aabec24ee533b66b844bd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "4e34fc466674fc3e579f7fda02f7a5c1146ebcda5440030d65717c8323ebd723",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "f35a1665c43ba25b85363c54755828240be921c3afc7edcf2037824faa3a347a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "a876b93bf5603a6c40f04197decf468f17599df8d5073a8c93117316d349faf7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "fe95d4de46fd4b5d185dd09028bc5b2a2282eb4f07818901cd9739e5ed349c83",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "291d8f03841791c1f2dadd0bfd6c55fb025d07e1eb52d6a8ac0b5c6c69c1fa51",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5faafa5906e8cbff",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-méthode",
            "title": "Claims structurants typés et sélectionnés par le risque",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "La surface limite désormais chaque article à trois claims structurants maximum et supprime le type assertion non classée. Chaque claim est classée en fait, estimation, inférence ou scénario ; ce typage heuristique reste distinct d’une revue canonique complète.",
            "objectId": "policy:2026-07-17-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "e2d57e3bcf8e770acaa59831eade935fb003f6eac6d7abad428647706684873b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "ca7cd22fdb3b851b64d3a7ca523a9ec5f6dac17909f2a04cf935d521cf593a64",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "23b98b0f9e2c56a7c7147896670667fd8f74b20a73d75677fbd0974239d539d0"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260719T120242+0200-9163e9744486-29682646447-1",
      "date": "2026-07-19",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-19T10:03:26.556Z",
      "computedAt": "2026-07-19T12:02:42+02:00",
      "gitSha": "9163e9744486f5934c64855839df99cbf0695a39",
      "previousFrameHash": "23b98b0f9e2c56a7c7147896670667fd8f74b20a73d75677fbd0974239d539d0",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29682646447",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "e1e3623a32f6621e220ca1e939427ccb7ee39d280ef94c95ae40c6185b8ffa0e",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "eea639a52d98a26b6a5ad6f8dcf93242b49f86f231734479e3c83c27503d9090",
          "bytes": 92003,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "6951f17be4b0115788df1f432165805a9fb438663b412c991ec121d528165cb5",
          "bytes": 1021027,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "96c932e79683e3139a29cd0d81d7a1615cdde438e5e6aab4427a47737b217fed",
          "bytes": 3066185,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "7a1bc4afa2e0d1ce4e36616186fedf2f71af2398f3447fa754a5ada1034b65c2",
          "bytes": 516974,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "144dd72f3b789827fd0845da99fe54de1d47cba952980e10541ebaeef919f551",
          "bytes": 479799,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "cfcad37ed503b7f3e419be103d61741190a26d283b0095c63b15d1c56247df88",
          "bytes": 27092,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "5532613bacf97a190cc9909e4896ab29cc8498970136a335eee360cf5f451194",
          "bytes": 14980,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "50c4b7b8b3b0f4dc79625c952287e2ba7c7e4bdacbc0576e8ca08b7a7a596975",
          "bytes": 218725,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "d0665a7b0949938d0f5eda2c6d9e3c120e0553af4e934fe59da036cc5cf0ef74",
          "bytes": 127798,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "5bb3c330beedef8696802976037947a11ef646fd3a64adce2934ebf0e2a46ac4",
          "bytes": 13612,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "f374f066f177cf0c1bf68d0f6aa839651d8ce0e769eaa9ccebd2ec998f546971",
          "bytes": 7085,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "58ca5280e25e9381db92b0a2c95e4a8b4d122a1b892084b0f3cc5b4aa86302e0",
          "bytes": 627011,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-19T10:02:42.000Z:5afe90f2e6d2",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-19T10:02:42.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T09:51:06.000Z",
          "retrievedAt": "2026-07-19T10:03:26.556Z",
          "computedAt": "2026-07-19T10:02:42.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285738837846694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "5afe90f2e6d2e7db4ae6a51326d528978d1dea2f305781b993007ca876fb3d0a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-19T10:02:42.000Z:1672316a6a5c",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-19T10:02:42.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T10:03:26.556Z",
          "computedAt": "2026-07-19T10:02:42.000Z",
          "archivedAt": null,
          "value": 42,
          "rawValue": 42,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1672316a6a5c9227736c0f3de57062bfb0c13f465fccb115709d928361f54ad5",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-19T10:02:42.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-19T10:02:42.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T10:03:26.556Z",
          "computedAt": "2026-07-19T10:02:42.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-19T10:02:42.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-19T10:02:42.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T10:03:26.556Z",
          "computedAt": "2026-07-19T10:02:42.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-19T10:02:42.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-19T10:02:42.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-19T10:03:26.556Z",
          "computedAt": "2026-07-19T10:02:42.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "unknown",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-19T12:02:42+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T10:03:26.556Z",
            "lastAttemptAt": "2026-07-19T10:03:26.556Z",
            "lastSuccessAt": "2026-07-19T10:03:26.556Z",
            "computedAt": "2026-07-19T12:02:42+02:00",
            "staleAfter": "PT36H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T10:03:26.556Z",
            "lastAttemptAt": "2026-07-19T10:03:26.556Z",
            "lastSuccessAt": "2026-07-19T10:03:26.556Z",
            "computedAt": "2026-07-19T12:02:42+02:00",
            "staleAfter": "PT36H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T10:03:26.556Z",
            "lastAttemptAt": "2026-07-19T10:03:26.556Z",
            "lastSuccessAt": "2026-07-19T10:03:26.556Z",
            "computedAt": "2026-07-19T12:02:42+02:00",
            "staleAfter": "PT12H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-19T10:03:26.556Z",
            "lastAttemptAt": "2026-07-19T10:03:26.556Z",
            "lastSuccessAt": "2026-07-19T10:03:26.556Z",
            "computedAt": "2026-07-19T12:02:42+02:00",
            "staleAfter": "PT6H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "ok",
            "qualityStatus": "unknown",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T09:51:06.000Z",
            "retrievedAt": "2026-07-19T10:03:26.556Z",
            "lastAttemptAt": "2026-07-19T10:03:26.556Z",
            "lastSuccessAt": "2026-07-19T10:03:26.556Z",
            "computedAt": "2026-07-19T12:02:42+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T15:51:06.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-19T12:02:42+02:00",
        "latest": [
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "036f8cd0ee520d9e13de68634affe1d36d75e398910c09d782416ea93686c5ee",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "2dc7adbd91e79234c2ae6603b0dd19bda92e3bd34f6aabec24ee533b66b844bd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "b3e85e658a1eeafe3a5a19a98e3b31950f833bc3b0a22bb1c5caf2f5afbb62ee",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "3062ed5039751096d04f35c5a72bf3526480bfe8f2f07e9371ca811d07643db2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "244e4b30a65898becade737107eacd5b6bc1a7425743ec5f40308babd4b64980",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "bfc5f2a2913512bb43ad4b5011e58513bc85c055d9409619cbddd947980d22ff",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "470ed35a3f956b5c90e8f2665abef95deaefdd1f0297365a215d6f63652a66b9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5faafa5906e8cbff",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-méthode",
            "title": "Claims structurants typés et sélectionnés par le risque",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "La surface limite désormais chaque article à trois claims structurants maximum et supprime le type assertion non classée. Chaque claim est classée en fait, estimation, inférence ou scénario ; ce typage heuristique reste distinct d’une revue canonique complète.",
            "objectId": "policy:2026-07-17-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "e2d57e3bcf8e770acaa59831eade935fb003f6eac6d7abad428647706684873b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "4440ddeb31f13eac601c9aa1877cdc4d951984b8493f90d8517f1bcdb1add2b2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "df3bc2834d1823d6e93723b402d15ad55b57f71af0bf330b5c27af1b6d67f766"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260719T123008+0200-20af8ad7019d-29683448560-1",
      "date": "2026-07-19",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-19T10:30:41.056Z",
      "computedAt": "2026-07-19T12:30:08+02:00",
      "gitSha": "20af8ad7019d40445daee9fa05a693c8dcf7d79c",
      "previousFrameHash": "df3bc2834d1823d6e93723b402d15ad55b57f71af0bf330b5c27af1b6d67f766",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29683448560",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "e1e3623a32f6621e220ca1e939427ccb7ee39d280ef94c95ae40c6185b8ffa0e",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "95746399851fbc62a56f3d4b279d3871cdc29e147bd402df2affb3510d6dd9d3",
          "bytes": 1021027,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "96c932e79683e3139a29cd0d81d7a1615cdde438e5e6aab4427a47737b217fed",
          "bytes": 3066185,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "e859ae3e811de634d42af2451bb6767990808d233c16a233db4330648623f755",
          "bytes": 516974,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "3c7f400010df10ebf0dc10e51a41e1ec69537009b50d102fe716c29913f87a6e",
          "bytes": 479799,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "cfcad37ed503b7f3e419be103d61741190a26d283b0095c63b15d1c56247df88",
          "bytes": 27092,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "3ee305c20204ae67cb1eb1560ecddbe2e963ed75672f45134532921173574d4b",
          "bytes": 14980,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "23e38fa191660a51372dadba43cc39fc15f51f714363e94bcf55e105dd28847d",
          "bytes": 218725,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "671e9c8b42dc915bf2aac478ab3daf4ab7758de5973713b1962ed31209ffff9b",
          "bytes": 127966,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "56bd7b10bef7ea94c8b88f458849e0c2e5ef74bbda08c9e07b8ad3a7dc21ef30",
          "bytes": 15303,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "77cb11042d72df7ed7a007485959034ec412099ebe2a60ad99ad5c11676a06bc",
          "bytes": 7350,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "8af57d03fe6fe36e892b184a49d33acfe8bd001aa0e8da4edf3b7f342e1870ce",
          "bytes": 637641,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-19T10:30:08.000Z:7b2879705290",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-19T10:30:08.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T10:16:18.000Z",
          "retrievedAt": "2026-07-19T10:30:41.056Z",
          "computedAt": "2026-07-19T10:30:08.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285738837846694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "7b28797052900c26faf220d1b2f2dcd11e9e5e377d38a08ae527e97154e53395",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-19T10:30:08.000Z:5cf05c7cf53c",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-19T10:30:08.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T10:15:58.000Z",
          "retrievedAt": "2026-07-19T10:16:19.000Z",
          "computedAt": "2026-07-19T10:30:08.000Z",
          "archivedAt": null,
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5cf05c7cf53cb93b657584a30cba5113824cc5b07a3597aeed9d49d53fd868db",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "degraded",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-19T10:30:08.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-19T10:30:08.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
          "retrievedAt": "2026-07-19T10:16:19.000Z",
          "computedAt": "2026-07-19T10:30:08.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-19T10:30:08.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-19T10:30:08.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
          "retrievedAt": "2026-07-19T10:16:19.000Z",
          "computedAt": "2026-07-19T10:30:08.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-19T10:30:08.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-19T10:30:08.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T04:17:35.000Z",
          "retrievedAt": "2026-07-19T10:16:19.000Z",
          "computedAt": "2026-07-19T10:30:08.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-19T12:30:08+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
            "retrievedAt": "2026-07-19T10:16:19.000Z",
            "lastAttemptAt": "2026-07-19T10:16:19.000Z",
            "lastSuccessAt": "2026-07-19T10:16:19.000Z",
            "computedAt": "2026-07-19T12:30:08+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T16:01:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
            "retrievedAt": "2026-07-19T10:16:19.000Z",
            "lastAttemptAt": "2026-07-19T10:16:19.000Z",
            "lastSuccessAt": "2026-07-19T10:16:19.000Z",
            "computedAt": "2026-07-19T12:30:08+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T19:36:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T04:17:35.000Z",
            "retrievedAt": "2026-07-19T10:16:19.000Z",
            "lastAttemptAt": "2026-07-19T10:16:19.000Z",
            "lastSuccessAt": "2026-07-19T10:16:19.000Z",
            "computedAt": "2026-07-19T12:30:08+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-19T16:17:35.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T10:15:58.000Z",
            "retrievedAt": "2026-07-19T10:16:19.000Z",
            "lastAttemptAt": "2026-07-19T10:16:19.000Z",
            "lastSuccessAt": "2026-07-19T10:16:19.000Z",
            "computedAt": "2026-07-19T12:30:08+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T16:15:58.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "degraded",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T10:16:18.000Z",
            "retrievedAt": "2026-07-19T10:30:41.056Z",
            "lastAttemptAt": "2026-07-19T10:30:41.056Z",
            "lastSuccessAt": "2026-07-19T10:30:41.056Z",
            "computedAt": "2026-07-19T12:30:08+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T16:16:18.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-19T12:30:08+02:00",
        "latest": [
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "036f8cd0ee520d9e13de68634affe1d36d75e398910c09d782416ea93686c5ee",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "2dc7adbd91e79234c2ae6603b0dd19bda92e3bd34f6aabec24ee533b66b844bd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "bd5e5be8406ce00f7f1e60419e5f9ac3e90c3ad255c05992c94ce79404c3f223",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "c61f9b8875e30abac0891fbcd2eff3ad93daefcd2cda1d1497a5538792dc6c3c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "e842128edd16baaee15aa9c7929741bbc3260b681519be8e2b6e14992c5b1e36",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "dd891658a2324019b308b8f5ebadb303d1093a6c0fb4c6c7f567d062adcaa0f6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "ca261ae08d3caf793f8a0e444dc74bfed7afc4418eadd05ebf81c358ec07eb7a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5faafa5906e8cbff",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-méthode",
            "title": "Claims structurants typés et sélectionnés par le risque",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "La surface limite désormais chaque article à trois claims structurants maximum et supprime le type assertion non classée. Chaque claim est classée en fait, estimation, inférence ou scénario ; ce typage heuristique reste distinct d’une revue canonique complète.",
            "objectId": "policy:2026-07-17-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "e2d57e3bcf8e770acaa59831eade935fb003f6eac6d7abad428647706684873b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "5ec767f26d257e9f3ec80d7c0e5c3d7bcb5a0fde197f436b242be2c8a1e2c32a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "c3473abfa3ff526e7f2d219e57e523ae2c918158ca925c7b6bff9394a1c9d474"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260719T124227+0200-2e7abfb7619c-29683814967-1",
      "date": "2026-07-19",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-19T10:43:05.154Z",
      "computedAt": "2026-07-19T12:42:27+02:00",
      "gitSha": "2e7abfb7619c14a5349db4ea0c8e868a557d2271",
      "previousFrameHash": "c3473abfa3ff526e7f2d219e57e523ae2c918158ca925c7b6bff9394a1c9d474",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29683814967",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "e1e3623a32f6621e220ca1e939427ccb7ee39d280ef94c95ae40c6185b8ffa0e",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "4a50a89ac1ca5512f14dc5cc379fbe5e65ca58d7463941469e6dfa05744841f0",
          "bytes": 1021027,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "96c932e79683e3139a29cd0d81d7a1615cdde438e5e6aab4427a47737b217fed",
          "bytes": 3066185,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "025508f50dcc2812e727c460410ec91f6d97aee1331deea9d1b6f6acc15efe5a",
          "bytes": 516974,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "bf50bebfc54e871508c7d83d4d02b0ba36dc2ab0493a5f9675936306705fe8e7",
          "bytes": 479799,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "cfcad37ed503b7f3e419be103d61741190a26d283b0095c63b15d1c56247df88",
          "bytes": 27092,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "89437160a35534aa0265ae65cfd0f265987e4cc6e7d82de5ff6efd6c4ad9c511",
          "bytes": 14980,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "109c0371d423dec60e2556c54c22bc93563fff77bcad72478337a78000e7ddd8",
          "bytes": 218725,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "1331435d179c34b8151444900c18564365161f5feefb68595936eeb1d5706f90",
          "bytes": 127966,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "0f1ee32f59140a1401a694e0aa58bb0d3dd3061dd6214683cbf381fc76304d83",
          "bytes": 15303,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "817068191370e6c72923889d7f89d01e2daf54d9ba4a2a02f4f588ca583f9205",
          "bytes": 7350,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "3ee434f150eb4c4292bc66f7067cc2fad45248d414a10309a03780777813d7ed",
          "bytes": 646996,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-19T10:42:27.000Z:74115dc4b1ae",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-19T10:42:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T10:31:26.000Z",
          "retrievedAt": "2026-07-19T10:43:05.154Z",
          "computedAt": "2026-07-19T10:42:27.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285738837846694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "74115dc4b1ae084df8858d3982cd60c1adbd90bac81625fde09796b03d8ae882",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-19T10:42:27.000Z:5cf05c7cf53c",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-19T10:42:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T10:15:58.000Z",
          "retrievedAt": "2026-07-19T10:31:26.000Z",
          "computedAt": "2026-07-19T10:42:27.000Z",
          "archivedAt": null,
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5cf05c7cf53cb93b657584a30cba5113824cc5b07a3597aeed9d49d53fd868db",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "degraded",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-19T10:42:27.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-19T10:42:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
          "retrievedAt": "2026-07-19T10:31:26.000Z",
          "computedAt": "2026-07-19T10:42:27.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-19T10:42:27.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-19T10:42:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
          "retrievedAt": "2026-07-19T10:31:26.000Z",
          "computedAt": "2026-07-19T10:42:27.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-19T10:42:27.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-19T10:42:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T10:16:22.000Z",
          "retrievedAt": "2026-07-19T10:31:26.000Z",
          "computedAt": "2026-07-19T10:42:27.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-19T12:42:27+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
            "retrievedAt": "2026-07-19T10:31:26.000Z",
            "lastAttemptAt": "2026-07-19T10:31:26.000Z",
            "lastSuccessAt": "2026-07-19T10:31:26.000Z",
            "computedAt": "2026-07-19T12:42:27+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T16:01:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
            "retrievedAt": "2026-07-19T10:31:26.000Z",
            "lastAttemptAt": "2026-07-19T10:31:26.000Z",
            "lastSuccessAt": "2026-07-19T10:31:26.000Z",
            "computedAt": "2026-07-19T12:42:27+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T19:36:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T10:16:22.000Z",
            "retrievedAt": "2026-07-19T10:31:26.000Z",
            "lastAttemptAt": "2026-07-19T10:31:26.000Z",
            "lastSuccessAt": "2026-07-19T10:31:26.000Z",
            "computedAt": "2026-07-19T12:42:27+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-19T22:16:22.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T10:15:58.000Z",
            "retrievedAt": "2026-07-19T10:31:26.000Z",
            "lastAttemptAt": "2026-07-19T10:31:26.000Z",
            "lastSuccessAt": "2026-07-19T10:31:26.000Z",
            "computedAt": "2026-07-19T12:42:27+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T16:15:58.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "degraded",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T10:31:26.000Z",
            "retrievedAt": "2026-07-19T10:43:05.154Z",
            "lastAttemptAt": "2026-07-19T10:43:05.154Z",
            "lastSuccessAt": "2026-07-19T10:43:05.154Z",
            "computedAt": "2026-07-19T12:42:27+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T16:31:26.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-19T12:42:27+02:00",
        "latest": [
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "036f8cd0ee520d9e13de68634affe1d36d75e398910c09d782416ea93686c5ee",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "2dc7adbd91e79234c2ae6603b0dd19bda92e3bd34f6aabec24ee533b66b844bd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "d740ab9c46886df7bd04d3f5962bd1cd166ed270a8cb1d72d7082674ad5aed51",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "a49470eeb5607adfdc4a2bda14b4102192faa5a980f26e4d2a87b6fd7cc26653",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "769f421c69cb2f9b996fba9bdceb221fe1dd3102d5543922744e61ff3bb61d59",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "3fcf44a4881f6c2f8b1c5861abd716d97327a0264e6d77dc89cd08d11ae63b04",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "68a5f9f376e2119cbadd5f6a9ce2745da2ef31874609a9e1573bc65fe10eaa72",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5faafa5906e8cbff",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-méthode",
            "title": "Claims structurants typés et sélectionnés par le risque",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "La surface limite désormais chaque article à trois claims structurants maximum et supprime le type assertion non classée. Chaque claim est classée en fait, estimation, inférence ou scénario ; ce typage heuristique reste distinct d’une revue canonique complète.",
            "objectId": "policy:2026-07-17-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "e2d57e3bcf8e770acaa59831eade935fb003f6eac6d7abad428647706684873b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "2da1a8ad90cff20c1a3f39049e6fc64fdcb88edf34d21a3f8bc83714dc1e39c0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "0ef4bbaeb36f5757f0e8e0984d64e8d4ab8572f3bf52e0972f3507fbea740071"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260719T124640+0200-ef6eaaea3bbe-29683939470-1",
      "date": "2026-07-19",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-19T10:47:23.446Z",
      "computedAt": "2026-07-19T12:46:40+02:00",
      "gitSha": "ef6eaaea3bbeb904d3288584e891a593257551f7",
      "previousFrameHash": "0ef4bbaeb36f5757f0e8e0984d64e8d4ab8572f3bf52e0972f3507fbea740071",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29683939470",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "e1e3623a32f6621e220ca1e939427ccb7ee39d280ef94c95ae40c6185b8ffa0e",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "fa76a778024969b10ad10d491576f374930ef9ba729b888a16a426d2e59e5934",
          "bytes": 1021027,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "96c932e79683e3139a29cd0d81d7a1615cdde438e5e6aab4427a47737b217fed",
          "bytes": 3066185,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "b5ad591b2007b22e5444662ba1449ef9de4e1a3dd200a9bd58ba680028ceed1b",
          "bytes": 516974,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "0a0a054e915c2ffd41649e5072dff4c4ae2d25641af16abf4fe6fa90c14b744d",
          "bytes": 479799,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "cfcad37ed503b7f3e419be103d61741190a26d283b0095c63b15d1c56247df88",
          "bytes": 27092,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "d3aea2a77c392c27c616bac83c35972976935d4f0dc0ea2bf7e8020a51cfdbeb",
          "bytes": 14980,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "37ec6e3aec14b83add315295025623d0413622eabf811d1776205cb363593b02",
          "bytes": 218725,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "f0a326282b4d394bb1b8eb1adaee098607111d157daaed1d39c5d811cdf84a21",
          "bytes": 127966,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "5be476a04205237869b1ddc13b48a546ce241ec49be6f27cff6903fde980c6ea",
          "bytes": 15304,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "9402f096ed7cb545921b71a115584edc6f9fe6fedfbbd2a3230521bdb47159fe",
          "bytes": 7349,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "e69f5f1016c1cdb91fb92ae7ffd8b7028ea3e462a4b946c766f84b29f2f8c21e",
          "bytes": 656351,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-19T10:46:40.000Z:9f178f052294",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-19T10:46:40.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T10:46:35.000Z",
          "retrievedAt": "2026-07-19T10:47:23.446Z",
          "computedAt": "2026-07-19T10:46:40.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285738837846694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "9f178f052294f5b17b6f6e741a3f03293d191d62460c20eb98a5fcae4438841b",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-19T10:46:40.000Z:5cf05c7cf53c",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-19T10:46:40.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T10:15:58.000Z",
          "retrievedAt": "2026-07-19T10:46:35.000Z",
          "computedAt": "2026-07-19T10:46:40.000Z",
          "archivedAt": null,
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5cf05c7cf53cb93b657584a30cba5113824cc5b07a3597aeed9d49d53fd868db",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "degraded",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-19T10:46:40.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-19T10:46:40.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
          "retrievedAt": "2026-07-19T10:46:35.000Z",
          "computedAt": "2026-07-19T10:46:40.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-19T10:46:40.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-19T10:46:40.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
          "retrievedAt": "2026-07-19T10:46:35.000Z",
          "computedAt": "2026-07-19T10:46:40.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-19T10:46:40.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-19T10:46:40.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T10:16:22.000Z",
          "retrievedAt": "2026-07-19T10:46:35.000Z",
          "computedAt": "2026-07-19T10:46:40.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-19T12:46:40+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
            "retrievedAt": "2026-07-19T10:46:35.000Z",
            "lastAttemptAt": "2026-07-19T10:46:35.000Z",
            "lastSuccessAt": "2026-07-19T10:46:35.000Z",
            "computedAt": "2026-07-19T12:46:40+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T16:01:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
            "retrievedAt": "2026-07-19T10:46:35.000Z",
            "lastAttemptAt": "2026-07-19T10:46:35.000Z",
            "lastSuccessAt": "2026-07-19T10:46:35.000Z",
            "computedAt": "2026-07-19T12:46:40+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T19:36:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T10:16:22.000Z",
            "retrievedAt": "2026-07-19T10:46:35.000Z",
            "lastAttemptAt": "2026-07-19T10:46:35.000Z",
            "lastSuccessAt": "2026-07-19T10:46:35.000Z",
            "computedAt": "2026-07-19T12:46:40+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-19T22:16:22.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T10:15:58.000Z",
            "retrievedAt": "2026-07-19T10:46:35.000Z",
            "lastAttemptAt": "2026-07-19T10:46:35.000Z",
            "lastSuccessAt": "2026-07-19T10:46:35.000Z",
            "computedAt": "2026-07-19T12:46:40+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T16:15:58.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "degraded",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T10:46:35.000Z",
            "retrievedAt": "2026-07-19T10:47:23.446Z",
            "lastAttemptAt": "2026-07-19T10:47:23.446Z",
            "lastSuccessAt": "2026-07-19T10:47:23.446Z",
            "computedAt": "2026-07-19T12:46:40+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T16:46:35.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-19T12:46:40+02:00",
        "latest": [
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "036f8cd0ee520d9e13de68634affe1d36d75e398910c09d782416ea93686c5ee",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "2dc7adbd91e79234c2ae6603b0dd19bda92e3bd34f6aabec24ee533b66b844bd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "72c576e3f8c057eb14e32f067a73bbf6f679357144469aa09e9658cd2391cfeb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "943eedb7185da9c9a15277aa22055d2e4cf688ade624f84765c2d559c5486ee8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "b987417cfc7055a8e86408d3ea8ef24e372ca9e01820e09355517815f9c8d9e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "aa5f8c50d6afa22075ae45515df7510a6d3d0a353328210a285bd16c6a75b09a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "8553d45d887579d6ab6d184b7495153a99f6dd20c00a0d1769f2e4dc175d38a4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5faafa5906e8cbff",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-méthode",
            "title": "Claims structurants typés et sélectionnés par le risque",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "La surface limite désormais chaque article à trois claims structurants maximum et supprime le type assertion non classée. Chaque claim est classée en fait, estimation, inférence ou scénario ; ce typage heuristique reste distinct d’une revue canonique complète.",
            "objectId": "policy:2026-07-17-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "e2d57e3bcf8e770acaa59831eade935fb003f6eac6d7abad428647706684873b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "f2d43c7df0a048d64dda757f52136d87ff03720d593cc880774914a0720c9ea4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "682fc70fac82f3fad5527c83cbd986f06f649038c5da8dfe4a8f121dbef3cbe3"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260719T130257+0200-9feafeb7cc69-29684446396-1",
      "date": "2026-07-19",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-19T11:03:41.192Z",
      "computedAt": "2026-07-19T13:02:57+02:00",
      "gitSha": "9feafeb7cc699ec8606e4fe317bf918a042070e3",
      "previousFrameHash": "682fc70fac82f3fad5527c83cbd986f06f649038c5da8dfe4a8f121dbef3cbe3",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29684446396",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "e1e3623a32f6621e220ca1e939427ccb7ee39d280ef94c95ae40c6185b8ffa0e",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "b1e8abd65b7c222a06329f12382830cc9c14f6058748b081c8b4f4ae026b4499",
          "bytes": 1021027,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "96c932e79683e3139a29cd0d81d7a1615cdde438e5e6aab4427a47737b217fed",
          "bytes": 3066185,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "39ba84d03e645fbbe49db7084c45900f6970addcd9eaae5f28aea4b1e15fb4fb",
          "bytes": 516974,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "d2b35437e2ad6284eecdd71457661035d69f38616a87063cf944b78622916995",
          "bytes": 479799,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "cfcad37ed503b7f3e419be103d61741190a26d283b0095c63b15d1c56247df88",
          "bytes": 27092,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "97fe6570a7bb23642b50c0f37613179173cf0fb71460f090ee2f1ed1612eb0fa",
          "bytes": 14980,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "7f61b786719b038a8829bfeb1fc0e0bdf1210d5737e9907c88472a4597660034",
          "bytes": 218725,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "66b519cda58dfcf5a854b4d59331e76efa195a99d12a3464a80462c62b4a9c51",
          "bytes": 128194,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "a529d7f66a1e8246f911a7cd1d01a9a21873a1eb3b28d80902236529a645e5e0",
          "bytes": 15530,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "6b4126d601acff6aee34631c4ec3189ad45b10973cbe5cde58335b9e8a31304f",
          "bytes": 7350,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "d5da66b7c6f0241962e85f7ef1e599eae1cd5459c88ede6672db7155a999c4e8",
          "bytes": 665851,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-19T11:02:57.000Z:667ff78f05ad",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-19T11:02:57.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T11:01:58.000Z",
          "retrievedAt": "2026-07-19T11:03:41.192Z",
          "computedAt": "2026-07-19T11:02:57.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285738837846694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "667ff78f05ad826a8bb88313020ba3034915c07e8a426c8df9f60e4e951238cf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-19T11:02:57.000Z:1672316a6a5c",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-19T11:02:57.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T10:47:32.000Z",
          "retrievedAt": "2026-07-19T11:01:38.000Z",
          "computedAt": "2026-07-19T11:02:57.000Z",
          "archivedAt": null,
          "value": 42,
          "rawValue": 42,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1672316a6a5c9227736c0f3de57062bfb0c13f465fccb115709d928361f54ad5",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-19T11:02:57.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-19T11:02:57.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
          "retrievedAt": "2026-07-19T11:01:38.000Z",
          "computedAt": "2026-07-19T11:02:57.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-19T11:02:57.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-19T11:02:57.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
          "retrievedAt": "2026-07-19T11:01:38.000Z",
          "computedAt": "2026-07-19T11:02:57.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-19T11:02:57.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-19T11:02:57.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T10:16:22.000Z",
          "retrievedAt": "2026-07-19T11:01:38.000Z",
          "computedAt": "2026-07-19T11:02:57.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-19T13:02:57+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
            "retrievedAt": "2026-07-19T11:01:38.000Z",
            "lastAttemptAt": "2026-07-19T11:01:38.000Z",
            "lastSuccessAt": "2026-07-19T11:01:38.000Z",
            "computedAt": "2026-07-19T13:02:57+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T16:01:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
            "retrievedAt": "2026-07-19T11:01:38.000Z",
            "lastAttemptAt": "2026-07-19T11:01:38.000Z",
            "lastSuccessAt": "2026-07-19T11:01:38.000Z",
            "computedAt": "2026-07-19T13:02:57+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T19:36:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T10:16:22.000Z",
            "retrievedAt": "2026-07-19T11:01:38.000Z",
            "lastAttemptAt": "2026-07-19T11:01:38.000Z",
            "lastSuccessAt": "2026-07-19T11:01:38.000Z",
            "computedAt": "2026-07-19T13:02:57+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-19T22:16:22.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T10:47:32.000Z",
            "retrievedAt": "2026-07-19T11:01:38.000Z",
            "lastAttemptAt": "2026-07-19T11:01:38.000Z",
            "lastSuccessAt": "2026-07-19T11:01:38.000Z",
            "computedAt": "2026-07-19T13:02:57+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T16:47:32.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T11:01:58.000Z",
            "retrievedAt": "2026-07-19T11:03:41.192Z",
            "lastAttemptAt": "2026-07-19T11:03:41.192Z",
            "lastSuccessAt": "2026-07-19T11:03:41.192Z",
            "computedAt": "2026-07-19T13:02:57+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T17:01:58.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-19T13:02:57+02:00",
        "latest": [
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "036f8cd0ee520d9e13de68634affe1d36d75e398910c09d782416ea93686c5ee",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "2dc7adbd91e79234c2ae6603b0dd19bda92e3bd34f6aabec24ee533b66b844bd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "5eacfa979f27e5788d3d9a7fb524cc42b22c3b1f85871a73e2cc43185d95955c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "d7d38e8d15d2185129955f55186561bd948b12f720ff7167cbaf4c89bb778dae",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "0a335c615f8b42c560df9cd0d15497e175280d78c26175caaa36820c1d1d09a1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "878e57776e5fe7e5b178ed8d1928d0534f71ea61e87e07a9f98791cea32da015",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "3066f27f688f2ec9aa9048fe2c9a09c8a2f41334000b8a41b4e39324c51567cd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5faafa5906e8cbff",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-méthode",
            "title": "Claims structurants typés et sélectionnés par le risque",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "La surface limite désormais chaque article à trois claims structurants maximum et supprime le type assertion non classée. Chaque claim est classée en fait, estimation, inférence ou scénario ; ce typage heuristique reste distinct d’une revue canonique complète.",
            "objectId": "policy:2026-07-17-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "e2d57e3bcf8e770acaa59831eade935fb003f6eac6d7abad428647706684873b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "e3122ff714da99a4e22406b0870ff6fd637259311967b92ef918c4ac3cc12db8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b65836329367fc71",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-credit-ratings",
            "title": "Reading a credit rating: scales, default and the issuer-pays conflict",
            "url": "https://l0g.fr/en/guides/read-credit-ratings/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading a credit rating: scales, default and the issuer-pays conflict.",
            "objectId": "guide:en:read-credit-ratings",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "a4823481ec5613bcca871fac17bd817f2d1cac47b134a3f1470a627a32f67659",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "6de870adbd383b67",
            "date": "2026-07-16T16:20:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-marche-du-gaz-et-du-gnl",
            "title": "Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins",
            "url": "https://l0g.fr/guides/lire-le-marche-du-gaz-et-du-gnl/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le marché du gaz et du GNL : les trois indices et l'arbitrage entre bassins.",
            "objectId": "guide:lire-le-marche-du-gaz-et-du-gnl",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:20:00.000Z",
            "previousHash": null,
            "currentHash": "74385985f04e22ae5c332af49c265113c261f94ea6f0bdd3185151d5fb476172",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "59544a3d5d85bdb7d3404d9ea7381c486befb2548631c53f0becb24d67e5a5e5"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260719T143826+0200-28c402057198-29687367459-1",
      "date": "2026-07-19",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-19T12:39:05.139Z",
      "computedAt": "2026-07-19T14:38:26+02:00",
      "gitSha": "28c4020571980a4c52cc84fd0ab8cbcab318ca93",
      "previousFrameHash": "59544a3d5d85bdb7d3404d9ea7381c486befb2548631c53f0becb24d67e5a5e5",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29687367459",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "dff647561630cd9ab5dd984d08d1abcafdac63d59f2169fde2c2aba0defbdf5d",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "39162ad73da793cc6c78815b6989df663384654f76bc2bf1bfe860fd5dccbbd8",
          "bytes": 1027495,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "02af7dc60d713c319e73a4954b4812faca9b082ab26e8778e4307ae05e3b6aa6",
          "bytes": 3100998,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "979b379a9495ce822d2f778761d2b8eb94041d6a9ef237fd2e7716684824451e",
          "bytes": 516974,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "b3a1fc32500572f2c98e90724a20b4928b1555be422a32306d0e8837d68c92eb",
          "bytes": 479799,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "cfcad37ed503b7f3e419be103d61741190a26d283b0095c63b15d1c56247df88",
          "bytes": 27092,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "b6914e58c064f09864a528c8fcefa4c0906ea99f9c1b65616ce2d2571edab82e",
          "bytes": 14904,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "f835fe45f5f30205f6661e3c486b292005f554fce09d5ac679e5480b0756f351",
          "bytes": 220188,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "5fcd35cfc03c042945329e8e3d8fd70e26aba1201ee1bf9a305dcc36c8eda2b3",
          "bytes": 128169,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "4ca66e08d29df8d11fe5a9f9bcfd5de1ed9d9c0efb1bef08f4334ddab4b69298",
          "bytes": 15530,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "bce3d16f40e30bc77a45f6774728c4b34842ce468deb0f73c3fd17e6f10000f4",
          "bytes": 7350,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "893c002c9a19300c076ea728a31d36ac7440676371f87460c7f426fc78b6c597",
          "bytes": 675275,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-19T12:38:26.000Z:b4620b37b960",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-19T12:38:26.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T12:33:57.000Z",
          "retrievedAt": "2026-07-19T12:39:05.139Z",
          "computedAt": "2026-07-19T12:38:26.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285738837846694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "b4620b37b960578fbf59b31586e9c625d8aad4e8ca899306283b340b55122ed8",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-19T12:38:26.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-19T12:38:26.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T12:20:51.000Z",
          "retrievedAt": "2026-07-19T12:33:35.000Z",
          "computedAt": "2026-07-19T12:38:26.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-19T12:38:26.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-19T12:38:26.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
          "retrievedAt": "2026-07-19T12:33:35.000Z",
          "computedAt": "2026-07-19T12:38:26.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-19T12:38:26.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-19T12:38:26.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
          "retrievedAt": "2026-07-19T12:33:35.000Z",
          "computedAt": "2026-07-19T12:38:26.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-19T12:38:26.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-19T12:38:26.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T10:16:22.000Z",
          "retrievedAt": "2026-07-19T12:33:35.000Z",
          "computedAt": "2026-07-19T12:38:26.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-19T14:38:26+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
            "retrievedAt": "2026-07-19T12:33:35.000Z",
            "lastAttemptAt": "2026-07-19T12:33:35.000Z",
            "lastSuccessAt": "2026-07-19T12:33:35.000Z",
            "computedAt": "2026-07-19T14:38:26+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T16:01:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
            "retrievedAt": "2026-07-19T12:33:35.000Z",
            "lastAttemptAt": "2026-07-19T12:33:35.000Z",
            "lastSuccessAt": "2026-07-19T12:33:35.000Z",
            "computedAt": "2026-07-19T14:38:26+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T19:36:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T10:16:22.000Z",
            "retrievedAt": "2026-07-19T12:33:35.000Z",
            "lastAttemptAt": "2026-07-19T12:33:35.000Z",
            "lastSuccessAt": "2026-07-19T12:33:35.000Z",
            "computedAt": "2026-07-19T14:38:26+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-19T22:16:22.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T12:20:51.000Z",
            "retrievedAt": "2026-07-19T12:33:35.000Z",
            "lastAttemptAt": "2026-07-19T12:33:35.000Z",
            "lastSuccessAt": "2026-07-19T12:33:35.000Z",
            "computedAt": "2026-07-19T14:38:26+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T18:20:51.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T12:33:57.000Z",
            "retrievedAt": "2026-07-19T12:39:05.139Z",
            "lastAttemptAt": "2026-07-19T12:39:05.139Z",
            "lastSuccessAt": "2026-07-19T12:39:05.139Z",
            "computedAt": "2026-07-19T14:38:26+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T18:33:57.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-19T14:38:26+02:00",
        "latest": [
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "1973c154f01ba241ffd138c4b8bc3294422f64ddff3bbbff707e1bac8008b217",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "71480a785d52f2de1162a333865088a51153fdc54cbfeab765ee82f3d65547f2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "68a30e5ad7bec1ca7e1e03f27ec1ff30a04fad10b38b59a15220d76645e6428f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "b33d05765f0c4fbef3ee22885525c02c41919f7db2400f1b983d45843bd2cbab",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "bd5cc7782c0e0cd00ab4e54647043f1125064d735504642177d10d6ba609cb6d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "4c69473b8507aa57fb4f4471f68d96dacfd03814dd9614c2f77efb94892e028e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "18fa9fb162cf00233c9e539f9de53c8d11b960d1d0f7fcf354b7d81da1711372",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "4b16f2902e5f0dc32d6ac2924ca2810ac2d34ab11f79eb1f936ce4496ff5e832",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5faafa5906e8cbff",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-méthode",
            "title": "Claims structurants typés et sélectionnés par le risque",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "La surface limite désormais chaque article à trois claims structurants maximum et supprime le type assertion non classée. Chaque claim est classée en fait, estimation, inférence ou scénario ; ce typage heuristique reste distinct d’une revue canonique complète.",
            "objectId": "policy:2026-07-17-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "e2d57e3bcf8e770acaa59831eade935fb003f6eac6d7abad428647706684873b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f21162c2ffad50f4",
            "date": "2026-07-16T19:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "nav-loans-the-hidden-fund-level-leverage",
            "title": "NAV loans: the leverage no one sees",
            "url": "https://l0g.fr/en/analysis/nav-loans-the-hidden-fund-level-leverage/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loans: the leverage no one sees.",
            "objectId": "article:en:nav-loans-the-hidden-fund-level-leverage",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:40:00.000Z",
            "previousHash": null,
            "currentHash": "989c93a9d120213295860eac7ad774568f08d9d502e6fc6d0a5d5c3e03dda500",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c8b352a316196dd5",
            "date": "2026-07-16T19:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "nav-loan-levier-cache-fonds-credit-prive",
            "title": "NAV loan : le levier que personne ne voit",
            "url": "https://l0g.fr/posts/nav-loan-levier-cache-fonds-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : NAV loan : le levier que personne ne voit.",
            "objectId": "article:nav-loan-levier-cache-fonds-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-16T19:30:00.000Z",
            "previousHash": null,
            "currentHash": "e625cac7f99452a0b8cde98d306eb0ca7aad35d26d2467d636238d0f4800389c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7a27dadc34b67e42",
            "date": "2026-07-16T16:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-une-notation-de-credit",
            "title": "Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur",
            "url": "https://l0g.fr/guides/lire-une-notation-de-credit/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire une notation de crédit : échelles, défaut et le conflit du modèle émetteur-payeur.",
            "objectId": "guide:lire-une-notation-de-credit",
            "previousVersion": null,
            "currentVersion": "2026-07-16T16:40:00.000Z",
            "previousHash": null,
            "currentHash": "6abc933be737a1aef57651001b51cd65a7b818bbc663b2d27e38284acc7e3b10",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "e054f5a1968456d9dbffe468c8eece710d787f78bcea4a81ba5bd6ccdc8aba74"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260719T181308+0200-0cdacce0430d-29694421869-1",
      "date": "2026-07-19",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-19T16:13:53.150Z",
      "computedAt": "2026-07-19T18:13:08+02:00",
      "gitSha": "0cdacce0430de636df249116a80ec77beb05f85f",
      "previousFrameHash": "e054f5a1968456d9dbffe468c8eece710d787f78bcea4a81ba5bd6ccdc8aba74",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29694421869",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "d7ba7c97d69fb3442c76b613307b5d53ee520bb905b41ffcec9c7dffea7a44a9",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "764764494690872010dc6b6b70eea19003c47a5d0c5107fcb87623998a2c34fe",
          "bytes": 1050798,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "a4ca9c75a6bb65838c32ddbedee8f8ac732ff664f809411d5141fa4249b0291c",
          "bytes": 3154871,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "429032981f56bda20d8505994a608cd41756d56516a8f8e0696480b3f082c7ba",
          "bytes": 536914,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "bf7660a644a133204a1da437ee38b720a4729e64582c32fca4895c2e65874302",
          "bytes": 499957,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "5f951f8e46dfdbded86eb2f7efef37f34439fef5f766b85fcdcccd8ed9dcbe11",
          "bytes": 27275,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "adb7b865b28f36c8e6d19ceec2ab4874fadfd39d07dd4b6d89bcd2d40d5d6e62",
          "bytes": 14991,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "c163a4d29a4bc6a01085b7b21fbcab11509796633b5faf007b9e3d1ee690dff3",
          "bytes": 223452,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "11b7c7ae9bffeb48a5f119169f6dd0182b054a079ef4a25eac224316b80d2f8d",
          "bytes": 140184,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "eb5efd59e93fa528635da8b57e21733657eea7ff13b47c70f9014bc970922377",
          "bytes": 15531,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "33e0c9a2c5cff7b25a9ed85b3598421ddbee65d54bc1b13384df81058f2350be",
          "bytes": 7350,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "09b7633eadca2393cf9bf102fe509c0ccebac337ab2375eaa135abcf8eb8e3d7",
          "bytes": 684699,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-19T16:13:08.000Z:2996e3f09a55",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-19T16:13:08.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T16:06:38.000Z",
          "retrievedAt": "2026-07-19T16:13:53.150Z",
          "computedAt": "2026-07-19T16:13:08.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285738837846694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "2996e3f09a557a3e59a1f443221056ab37dce0722b05c1798e261b5596add78c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-19T16:13:08.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-19T16:13:08.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T15:59:42.000Z",
          "retrievedAt": "2026-07-19T16:06:15.000Z",
          "computedAt": "2026-07-19T16:13:08.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-19T16:13:08.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-19T16:13:08.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
          "retrievedAt": "2026-07-19T16:06:15.000Z",
          "computedAt": "2026-07-19T16:13:08.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-19T16:13:08.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-19T16:13:08.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
          "retrievedAt": "2026-07-19T16:06:15.000Z",
          "computedAt": "2026-07-19T16:13:08.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-19T16:13:08.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-19T16:13:08.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T10:16:22.000Z",
          "retrievedAt": "2026-07-19T16:06:15.000Z",
          "computedAt": "2026-07-19T16:13:08.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-19T18:13:08+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
            "retrievedAt": "2026-07-19T16:06:15.000Z",
            "lastAttemptAt": "2026-07-19T16:06:15.000Z",
            "lastSuccessAt": "2026-07-19T16:06:15.000Z",
            "computedAt": "2026-07-19T18:13:08+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T16:01:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
            "retrievedAt": "2026-07-19T16:06:15.000Z",
            "lastAttemptAt": "2026-07-19T16:06:15.000Z",
            "lastSuccessAt": "2026-07-19T16:06:15.000Z",
            "computedAt": "2026-07-19T18:13:08+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T19:36:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T10:16:22.000Z",
            "retrievedAt": "2026-07-19T16:06:15.000Z",
            "lastAttemptAt": "2026-07-19T16:06:15.000Z",
            "lastSuccessAt": "2026-07-19T16:06:15.000Z",
            "computedAt": "2026-07-19T18:13:08+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-19T22:16:22.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T15:59:42.000Z",
            "retrievedAt": "2026-07-19T16:06:15.000Z",
            "lastAttemptAt": "2026-07-19T16:06:15.000Z",
            "lastSuccessAt": "2026-07-19T16:06:15.000Z",
            "computedAt": "2026-07-19T18:13:08+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T21:59:42.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T16:06:38.000Z",
            "retrievedAt": "2026-07-19T16:13:53.150Z",
            "lastAttemptAt": "2026-07-19T16:13:53.150Z",
            "lastSuccessAt": "2026-07-19T16:13:53.150Z",
            "computedAt": "2026-07-19T18:13:08+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T22:06:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-19T18:13:08+02:00",
        "latest": [
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "23f99b6575a96ade9c2cbcd17f49dfefb271fb9b6f2e792ef7f400a59a5f0e0f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "83c912ff0392903b191cdf268ebacb090283531c5b316d5b62ca9e76b2514c49",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "b6cf6ecb5a5b22ae4cd3afac3bb7c5e8252b4b541d00c921f5d1aace9a6ad1f8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "d1dcfb5296a6eb56d3b2f1aca170358a17795571f2011d99a256c8b1f588af59",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "1973c154f01ba241ffd138c4b8bc3294422f64ddff3bbbff707e1bac8008b217",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "473a9255be93b48e36240d493d700e7087779eb94e9d096074cde35c37b6fc99",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "610ec6421d431df11c73fc0ec4fc0fd52c08a7fa9d62759a6271e368a53c7c20",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "0833859e77ddcb5dfc69dc8a7f84b51e320d93068a4e197ef48f88800d43aaad",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "2dd3c1e26f6e90aa2d2d2b0fde31e7e38024b0f630af98a972fd630e95c75664",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "51472bd0a89eb708997242395efc717e2d69b7c2ca8c38c82b8e8e29fa7b712e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2d900a0310c1972b",
            "date": "2026-07-17T07:30:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "reserves-strategiques-petrole-matelas-deuxieme-round",
            "title": "Réserves stratégiques : l'état du matelas avant le deuxième round",
            "url": "https://l0g.fr/posts/reserves-strategiques-petrole-matelas-deuxieme-round/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Réserves stratégiques : l'état du matelas avant le deuxième round.",
            "objectId": "article:reserves-strategiques-petrole-matelas-deuxieme-round",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:30:00.000Z",
            "previousHash": null,
            "currentHash": "d1786ed26957606aa519a7e0fc80376de37b08776415dda1cb83697e773c3b00",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "02fac577399a7a43",
            "date": "2026-07-17T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-17-données",
            "title": "Registre des séries de risque nommées et versionnées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Chaque jauge du tableau consolidé reçoit un identifiant stable, un nom citable, des exports JSON, NDJSON et CSV dédiés, une date de série issue de la frame Black Box et une version méthodologique. Les frames antérieures au registre restent explicitement non versionnées ; aucun backfill rétroactif n’est produit.",
            "objectId": "policy:2026-07-17-données",
            "previousVersion": null,
            "currentVersion": "2026-07-17T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "dd00da9f60137b0f762972f8ea761056b0f59b680f74ba4bf4ded8197668294b",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "52abafda91f0ca00fac45239c97516a6997f286f7c6bb42769a3a0184e93471d"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260719T185745+0200-26b3fa39126c-29695886586-1",
      "date": "2026-07-19",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-19T16:58:27.743Z",
      "computedAt": "2026-07-19T18:57:45+02:00",
      "gitSha": "26b3fa39126cf2e2057a3fb09d3712a1b476b6fd",
      "previousFrameHash": "52abafda91f0ca00fac45239c97516a6997f286f7c6bb42769a3a0184e93471d",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29695886586",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "79924b911b576977c0f5b4d9b1f862a2a65ec5b8781164abd529f81584f8ec02",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "48c2adef316945a69e61ca223f3b64cac07f1a9063ff32930dd1f98b095a677f",
          "bytes": 1060306,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "7f2de232301b969917f2101bcf92dcd9936a068de2cfa15bbbcf69403b45bcf8",
          "bytes": 3176651,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "01f7b2064d536b72bd74a0bb8e104408e5ea1bfe82d4a7fd4cc5e6197230fff0",
          "bytes": 545901,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "d0e80b8afaf7abb991b91467cd3941b69949d61df71440d8f71eb4eea4a2ea65",
          "bytes": 508736,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "22a06a6b72c691bc351263c4fca265217568104250635d6825e05d20a271087e",
          "bytes": 27531,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "1f6a476aaef3fc933399452f29f3f881d56125235dbb098be42099d12839a3ba",
          "bytes": 14871,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "30f85b7aec455dc0128f9db16ab6d1f0b5085b8922dc6e36fc5ee844bc0fca14",
          "bytes": 224847,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "08df3ae6dedf9b015e8cc96a0837cd63381eb1a495803b54cdc40ab9eb4e9422",
          "bytes": 140338,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "a7374d69e7ed7053171ddff044ee991e4a9a50c8c1e6d33bfdf571604799100e",
          "bytes": 15531,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "9fb9e0f3d169760830246c5fc8daa1a38cc840ec4271fff5b4f2adb6769cee09",
          "bytes": 7350,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "380269b51838dd8aa3bb26aa1e71d264ffc3f50fa5eeaee36abf0c4c915654b0",
          "bytes": 694123,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-19T16:57:45.000Z:021c346e5216",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-19T16:57:45.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T16:51:47.000Z",
          "retrievedAt": "2026-07-19T16:58:27.743Z",
          "computedAt": "2026-07-19T16:57:45.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285738837846694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "021c346e5216c99d07817879c8b7ac8e83c00191610ea60573184bad0bb9db40",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-19T16:57:45.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-19T16:57:45.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T16:30:32.000Z",
          "retrievedAt": "2026-07-19T16:51:25.000Z",
          "computedAt": "2026-07-19T16:57:45.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-19T16:57:45.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-19T16:57:45.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
          "retrievedAt": "2026-07-19T16:51:25.000Z",
          "computedAt": "2026-07-19T16:57:45.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-19T16:57:45.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-19T16:57:45.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
          "retrievedAt": "2026-07-19T16:51:25.000Z",
          "computedAt": "2026-07-19T16:57:45.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-19T16:57:45.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-19T16:57:45.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T16:16:42.000Z",
          "retrievedAt": "2026-07-19T16:51:25.000Z",
          "computedAt": "2026-07-19T16:57:45.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-19T18:57:45+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
            "retrievedAt": "2026-07-19T16:51:25.000Z",
            "lastAttemptAt": "2026-07-19T16:51:25.000Z",
            "lastSuccessAt": "2026-07-19T16:51:25.000Z",
            "computedAt": "2026-07-19T18:57:45+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T16:01:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
            "retrievedAt": "2026-07-19T16:51:25.000Z",
            "lastAttemptAt": "2026-07-19T16:51:25.000Z",
            "lastSuccessAt": "2026-07-19T16:51:25.000Z",
            "computedAt": "2026-07-19T18:57:45+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T19:36:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T16:16:42.000Z",
            "retrievedAt": "2026-07-19T16:51:25.000Z",
            "lastAttemptAt": "2026-07-19T16:51:25.000Z",
            "lastSuccessAt": "2026-07-19T16:51:25.000Z",
            "computedAt": "2026-07-19T18:57:45+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-20T04:16:42.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T16:30:32.000Z",
            "retrievedAt": "2026-07-19T16:51:25.000Z",
            "lastAttemptAt": "2026-07-19T16:51:25.000Z",
            "lastSuccessAt": "2026-07-19T16:51:25.000Z",
            "computedAt": "2026-07-19T18:57:45+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T22:30:32.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T16:51:47.000Z",
            "retrievedAt": "2026-07-19T16:58:27.743Z",
            "lastAttemptAt": "2026-07-19T16:58:27.743Z",
            "lastSuccessAt": "2026-07-19T16:58:27.743Z",
            "computedAt": "2026-07-19T18:57:45+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-19T22:51:47.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-19T18:57:45+02:00",
        "latest": [
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "c07ea416d8e934b2a86320f711bea239d6d1bda2d4a11c2a2d8855eedafeab40",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "64e1aa58d2ede26e324dc8d2835de0d6929a870a90dcd8fca5aa7b2dbb1b5ebd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "23f99b6575a96ade9c2cbcd17f49dfefb271fb9b6f2e792ef7f400a59a5f0e0f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "ee37f19b394a43e98d2bdd77dc7ec3c40dc6f6744bd419615b19362458735962",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "8a5702760d451cccc0ed219d5ea2de34e5da62d8434373c71c7ac706574b9308",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "d1dcfb5296a6eb56d3b2f1aca170358a17795571f2011d99a256c8b1f588af59",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "1973c154f01ba241ffd138c4b8bc3294422f64ddff3bbbff707e1bac8008b217",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "473a9255be93b48e36240d493d700e7087779eb94e9d096074cde35c37b6fc99",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "5049009c5eef192b7f88dd4d4e6560e3438758eb0c88d377547e4e1f614a7361",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "c97e554cf991b6198ffe3919325676194099021ec94ffbdc8032b6ccd49ef3ef",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "9c0e1fff82470fc52854ae301024787b81924c1574c5442c52782cb6e4851c1d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "6a3bde9b3520d450abf4c20db53946038c0e060051dec8d546b57070d6564dcb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "f9cc9d9e47218fcb50ff45fa2391613897dbd50aa37a20829aa977bd98ca7346"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260719T204000+0200-c438071ea5c6-29699206606-1",
      "date": "2026-07-19",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-19T18:44:09.279Z",
      "computedAt": "2026-07-19T20:40:00+02:00",
      "gitSha": "c438071ea5c62c19c738d1e9b0137b86891761fc",
      "previousFrameHash": "f9cc9d9e47218fcb50ff45fa2391613897dbd50aa37a20829aa977bd98ca7346",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29699206606",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "79924b911b576977c0f5b4d9b1f862a2a65ec5b8781164abd529f81584f8ec02",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "f13593f9d489a844faae79c1b94b879422c2d41db6588fff7fd0e115627537e8",
          "bytes": 1060306,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "7f2de232301b969917f2101bcf92dcd9936a068de2cfa15bbbcf69403b45bcf8",
          "bytes": 3176651,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "1ebbb7c29133f6bb60dda9ce9b9714312704a9a0faff93a2c3cfc94a343b6541",
          "bytes": 545901,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "697be5ed0ac525d4398d3d0cf8b00676f004cc97e5b3f7e73cc08b5e47d3e8a9",
          "bytes": 508736,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "22a06a6b72c691bc351263c4fca265217568104250635d6825e05d20a271087e",
          "bytes": 27531,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "6008110370abe01a97ac9693537f8300889c2192053f310a8ad771769bc121d6",
          "bytes": 14871,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "76f9381634fc5c9730efd8eed1ef99207fbfc9db6eef69ca05d02fadb45e846c",
          "bytes": 224847,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "57d5217413f96a6183b809d0518704f941da3745c27c7e9ec8b40915589596dc",
          "bytes": 140338,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "09f66292c1f7a9aaf241a30bd3204f85ed48217ea96527f16dde73fed35e3a54",
          "bytes": 15530,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "0dd9730d80d698d3d9ac8a8e8bfa81b069197164351b8999f17048bc96cf007f",
          "bytes": 7350,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "0507666dc0b6725bc4476a944a254251e404ded304462c5cfc345e701193dc6a",
          "bytes": 703547,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-19T18:40:00.000Z:5b96075139b0",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-19T18:40:00.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T18:37:56.000Z",
          "retrievedAt": "2026-07-19T18:44:09.279Z",
          "computedAt": "2026-07-19T18:40:00.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285738837846694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "5b96075139b04189bcfde03787cde817098e572449039d8764a5165d068e9b56",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-19T18:40:00.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-19T18:40:00.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T18:35:15.000Z",
          "retrievedAt": "2026-07-19T18:37:35.000Z",
          "computedAt": "2026-07-19T18:40:00.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-19T18:40:00.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-19T18:40:00.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
          "retrievedAt": "2026-07-19T18:37:35.000Z",
          "computedAt": "2026-07-19T18:40:00.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-19T18:40:00.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-19T18:40:00.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
          "retrievedAt": "2026-07-19T18:37:35.000Z",
          "computedAt": "2026-07-19T18:40:00.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-19T18:40:00.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-19T18:40:00.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T16:16:42.000Z",
          "retrievedAt": "2026-07-19T18:37:35.000Z",
          "computedAt": "2026-07-19T18:40:00.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-19T20:40:00+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
            "retrievedAt": "2026-07-19T18:37:35.000Z",
            "lastAttemptAt": "2026-07-19T18:37:35.000Z",
            "lastSuccessAt": "2026-07-19T18:37:35.000Z",
            "computedAt": "2026-07-19T20:40:00+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T16:01:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
            "retrievedAt": "2026-07-19T18:37:35.000Z",
            "lastAttemptAt": "2026-07-19T18:37:35.000Z",
            "lastSuccessAt": "2026-07-19T18:37:35.000Z",
            "computedAt": "2026-07-19T20:40:00+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T19:36:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T16:16:42.000Z",
            "retrievedAt": "2026-07-19T18:37:35.000Z",
            "lastAttemptAt": "2026-07-19T18:37:35.000Z",
            "lastSuccessAt": "2026-07-19T18:37:35.000Z",
            "computedAt": "2026-07-19T20:40:00+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-20T04:16:42.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T18:35:15.000Z",
            "retrievedAt": "2026-07-19T18:37:35.000Z",
            "lastAttemptAt": "2026-07-19T18:37:35.000Z",
            "lastSuccessAt": "2026-07-19T18:37:35.000Z",
            "computedAt": "2026-07-19T20:40:00+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T00:35:15.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T18:37:56.000Z",
            "retrievedAt": "2026-07-19T18:44:09.279Z",
            "lastAttemptAt": "2026-07-19T18:44:09.279Z",
            "lastSuccessAt": "2026-07-19T18:44:09.279Z",
            "computedAt": "2026-07-19T20:40:00+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T00:37:56.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-19T20:40:00+02:00",
        "latest": [
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "c07ea416d8e934b2a86320f711bea239d6d1bda2d4a11c2a2d8855eedafeab40",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "37ddaae179451077d76c66f3e0bb92ff430cf13960088e572801768a1ee39d0f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "23f99b6575a96ade9c2cbcd17f49dfefb271fb9b6f2e792ef7f400a59a5f0e0f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "bf2b34b65e7be6a56b3b1bd2bf5b92d8d5af78de2b08c963b07dc1338fd41270",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "63820db08772cfda783701077701e7a87a9c33c72d087f7bb1e4db279429a5d9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "d1dcfb5296a6eb56d3b2f1aca170358a17795571f2011d99a256c8b1f588af59",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "1973c154f01ba241ffd138c4b8bc3294422f64ddff3bbbff707e1bac8008b217",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "473a9255be93b48e36240d493d700e7087779eb94e9d096074cde35c37b6fc99",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "07d8c20b5779d015349b668977d19d1ca62aa55c748c57ddcd84f1b0d477e3eb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "3f9b77a5befa56e7568ed3681f190e078e4ce3c46c2c2fb8e4861107e8cf9da9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "fce14555d2371f5858ac490b678ddd87335522e77f3e1c60accbf3dcec70ad54",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "e82890df3a1fb791b271146b14e36b23e6b66b6c7ec7a414caa45d2f14f6d7fb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "6b230340a49b3d79bdd6cffbb7c034d8bc81731213aa4ba3367c4a251ed33c85"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260719T214246+0200-aa6744990c16-29701142183-1",
      "date": "2026-07-19",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-19T19:43:38.165Z",
      "computedAt": "2026-07-19T21:42:46+02:00",
      "gitSha": "aa6744990c16a7e1c7016581192d7cc27192a08e",
      "previousFrameHash": "6b230340a49b3d79bdd6cffbb7c034d8bc81731213aa4ba3367c4a251ed33c85",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29701142183",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "79924b911b576977c0f5b4d9b1f862a2a65ec5b8781164abd529f81584f8ec02",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "c9375985d802451924a0631dddd4e971ee714f4d0acefea46c4cb7801fc9f445",
          "bytes": 1060306,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "7f2de232301b969917f2101bcf92dcd9936a068de2cfa15bbbcf69403b45bcf8",
          "bytes": 3176651,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "e79010e7a5d61ddbab5ec2cb79ffc7f0bab46056939e1d31271029aff9df8288",
          "bytes": 545901,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "0992e490603c0335ef4dc09aa45c561a022dad968d37b95696e6a65aa761dd0d",
          "bytes": 508736,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "22a06a6b72c691bc351263c4fca265217568104250635d6825e05d20a271087e",
          "bytes": 27531,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "289d291c9f61be8178cfe86bd7b3b8023b0f20ab4bd5faa121599d8202064ccb",
          "bytes": 14871,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "f06e14cc84b117c543cc29b0894a917721cb10571334da8fa71e2cf25db48fc1",
          "bytes": 224847,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "edd1386022ba3c608038bca1179a35643b0d4d673de69d6037cae83105d42054",
          "bytes": 140338,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "79ab0a022600b0f7973c005cd034f6a4ba3297bee31f8cb407f3639334693688",
          "bytes": 15532,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "95d62f9f0c882aa85b1ce6d71bcee02ddd48e59ed281a57f8d4bce912ef9c73c",
          "bytes": 7350,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "abc7c3509649ca4798914e81708eb56fa9befa57dc823cb8d4513680e387f232",
          "bytes": 712972,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-19T19:42:46.000Z:f88ce49e7511",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-19T19:42:46.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T19:38:24.000Z",
          "retrievedAt": "2026-07-19T19:43:38.165Z",
          "computedAt": "2026-07-19T19:42:46.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285738837846694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "f88ce49e75112d919b7585cb30df56dba477afe3ae13584613ed528b8ba7c434",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-19T19:42:46.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-19T19:42:46.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T19:06:09.000Z",
          "retrievedAt": "2026-07-19T19:38:05.000Z",
          "computedAt": "2026-07-19T19:42:46.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-19T19:42:46.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-19T19:42:46.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
          "retrievedAt": "2026-07-19T19:38:05.000Z",
          "computedAt": "2026-07-19T19:42:46.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-19T19:42:46.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-19T19:42:46.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
          "retrievedAt": "2026-07-19T19:38:05.000Z",
          "computedAt": "2026-07-19T19:42:46.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-19T19:42:46.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-19T19:42:46.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T16:16:42.000Z",
          "retrievedAt": "2026-07-19T19:38:05.000Z",
          "computedAt": "2026-07-19T19:42:46.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-19T21:42:46+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
            "retrievedAt": "2026-07-19T19:38:05.000Z",
            "lastAttemptAt": "2026-07-19T19:38:05.000Z",
            "lastSuccessAt": "2026-07-19T19:38:05.000Z",
            "computedAt": "2026-07-19T21:42:46+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T16:01:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
            "retrievedAt": "2026-07-19T19:38:05.000Z",
            "lastAttemptAt": "2026-07-19T19:38:05.000Z",
            "lastSuccessAt": "2026-07-19T19:38:05.000Z",
            "computedAt": "2026-07-19T21:42:46+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T19:36:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T16:16:42.000Z",
            "retrievedAt": "2026-07-19T19:38:05.000Z",
            "lastAttemptAt": "2026-07-19T19:38:05.000Z",
            "lastSuccessAt": "2026-07-19T19:38:05.000Z",
            "computedAt": "2026-07-19T21:42:46+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-20T04:16:42.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T19:06:09.000Z",
            "retrievedAt": "2026-07-19T19:38:05.000Z",
            "lastAttemptAt": "2026-07-19T19:38:05.000Z",
            "lastSuccessAt": "2026-07-19T19:38:05.000Z",
            "computedAt": "2026-07-19T21:42:46+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T01:06:09.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T19:38:24.000Z",
            "retrievedAt": "2026-07-19T19:43:38.165Z",
            "lastAttemptAt": "2026-07-19T19:43:38.165Z",
            "lastSuccessAt": "2026-07-19T19:43:38.165Z",
            "computedAt": "2026-07-19T21:42:46+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T01:38:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-19T21:42:46+02:00",
        "latest": [
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "c07ea416d8e934b2a86320f711bea239d6d1bda2d4a11c2a2d8855eedafeab40",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "001928dd6a0f9b54c08b76bfbe7baba38694a5eab2c7f2c8682f1808735456ff",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "23f99b6575a96ade9c2cbcd17f49dfefb271fb9b6f2e792ef7f400a59a5f0e0f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "3d53cf7dc6e89779529f722deb64e5119e18ef67789188061a3567799d34b6e9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "b2faa56249c927a53f5bf5a1a8ec14c72e793820dc05e3b082ec7f27394d62e6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "d1dcfb5296a6eb56d3b2f1aca170358a17795571f2011d99a256c8b1f588af59",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "1973c154f01ba241ffd138c4b8bc3294422f64ddff3bbbff707e1bac8008b217",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "473a9255be93b48e36240d493d700e7087779eb94e9d096074cde35c37b6fc99",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "d20ee83543281dae2a0d097648db098f1d9ce37063406121924deb5dc5df8511",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "399e1c6479eea37bfbd0cc56ea4ac42a1e987b20230ba425602e698eefa1b50a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "669816a053d6fa1a1ff2a725c1771fe049bc0e05f1e0ab5811f692f0aa42d3d1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "a9fd09dc64374e3100f258553629e419d1ff9c458e6544c7a4cfa754a5dbb943",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "4027b8583d77279ab55a8515edbf9208e537f3cbbaec32fec5aa8c5fc8e0d314"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260719T215930+0200-00a7597a4b6a-29701661451-1",
      "date": "2026-07-19",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-19T20:00:22.702Z",
      "computedAt": "2026-07-19T21:59:30+02:00",
      "gitSha": "00a7597a4b6a12762b7e630c5d01d896615605bd",
      "previousFrameHash": "4027b8583d77279ab55a8515edbf9208e537f3cbbaec32fec5aa8c5fc8e0d314",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29701661451",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "79924b911b576977c0f5b4d9b1f862a2a65ec5b8781164abd529f81584f8ec02",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "1df401ba28e5fccfa09bc6e7ccd4ecb4cbde2ae8c5ee2eb1280a708efd0ab585",
          "bytes": 1060306,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "7f2de232301b969917f2101bcf92dcd9936a068de2cfa15bbbcf69403b45bcf8",
          "bytes": 3176651,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "ee92e7334e0862bf04bf5f234f743cdcc3893c4eb5b61209f545a18705f4e866",
          "bytes": 545901,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "e9d78bca43b955d23053ac2a8f93b2024079daa38900be58a3126c2753b80f23",
          "bytes": 508736,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "22a06a6b72c691bc351263c4fca265217568104250635d6825e05d20a271087e",
          "bytes": 27531,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "388e19a38467b60a00651fc9553a2648b2d4416a7e48dc5dba598d03f7551bc9",
          "bytes": 14871,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "60dacbb721de1fa016d64cfa671430d3641e6af86dbc011b67d0fe1e87cf70fa",
          "bytes": 224847,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "224c2206f78a2fad3ce83a9120b0bb4fff554e07737f50d5f810b9b30f2fde1e",
          "bytes": 140338,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "d0e6f0d281a419504dae8e2d49d0dbf565de435f09a6b9c546509c238ca0223d",
          "bytes": 15531,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "960731ea05f9a6afd041394cc736be75f57cec7f6d90ddd9a7571108991558d3",
          "bytes": 7350,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "c853e8693cbf8b5a6c5f222b069c1d04ff137a1961a89491130810313f3e9c06",
          "bytes": 722396,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-19T19:59:30.000Z:7a83183376de",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-19T19:59:30.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T19:53:46.000Z",
          "retrievedAt": "2026-07-19T20:00:22.702Z",
          "computedAt": "2026-07-19T19:59:30.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285738837846694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "7a83183376deb6064b523d9b22441d7a5dbdcb67baea84ffb3fd876983a844b0",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-19T19:59:30.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-19T19:59:30.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T19:38:09.000Z",
          "retrievedAt": "2026-07-19T19:53:25.000Z",
          "computedAt": "2026-07-19T19:59:30.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-19T19:59:30.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-19T19:59:30.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
          "retrievedAt": "2026-07-19T19:53:25.000Z",
          "computedAt": "2026-07-19T19:59:30.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-19T19:59:30.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-19T19:59:30.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
          "retrievedAt": "2026-07-19T19:53:25.000Z",
          "computedAt": "2026-07-19T19:59:30.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-19T19:59:30.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-19T19:59:30.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T16:16:42.000Z",
          "retrievedAt": "2026-07-19T19:53:25.000Z",
          "computedAt": "2026-07-19T19:59:30.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-19T21:59:30+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
            "retrievedAt": "2026-07-19T19:53:25.000Z",
            "lastAttemptAt": "2026-07-19T19:53:25.000Z",
            "lastSuccessAt": "2026-07-19T19:53:25.000Z",
            "computedAt": "2026-07-19T21:59:30+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T16:01:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
            "retrievedAt": "2026-07-19T19:53:25.000Z",
            "lastAttemptAt": "2026-07-19T19:53:25.000Z",
            "lastSuccessAt": "2026-07-19T19:53:25.000Z",
            "computedAt": "2026-07-19T21:59:30+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T19:36:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T16:16:42.000Z",
            "retrievedAt": "2026-07-19T19:53:25.000Z",
            "lastAttemptAt": "2026-07-19T19:53:25.000Z",
            "lastSuccessAt": "2026-07-19T19:53:25.000Z",
            "computedAt": "2026-07-19T21:59:30+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-20T04:16:42.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T19:38:09.000Z",
            "retrievedAt": "2026-07-19T19:53:25.000Z",
            "lastAttemptAt": "2026-07-19T19:53:25.000Z",
            "lastSuccessAt": "2026-07-19T19:53:25.000Z",
            "computedAt": "2026-07-19T21:59:30+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T01:38:09.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (6 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T19:53:46.000Z",
            "retrievedAt": "2026-07-19T20:00:22.702Z",
            "lastAttemptAt": "2026-07-19T20:00:22.702Z",
            "lastSuccessAt": "2026-07-19T20:00:22.702Z",
            "computedAt": "2026-07-19T21:59:30+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T01:53:46.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-19T21:59:30+02:00",
        "latest": [
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "c07ea416d8e934b2a86320f711bea239d6d1bda2d4a11c2a2d8855eedafeab40",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "8ea26185f22b6bb4bc429e8206cdb1da749f612c6b968f476a86b4b7cc570f5a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "23f99b6575a96ade9c2cbcd17f49dfefb271fb9b6f2e792ef7f400a59a5f0e0f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "2e55e705b7e22ad29beaffb305285af8227f0d714d5e4bebe4c92453b506efe0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "29fc40eca6bc2b7fde53f4e2d052ab5e7589511d3b84549d315a1eb91daf1a2a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "d1dcfb5296a6eb56d3b2f1aca170358a17795571f2011d99a256c8b1f588af59",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "1973c154f01ba241ffd138c4b8bc3294422f64ddff3bbbff707e1bac8008b217",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "473a9255be93b48e36240d493d700e7087779eb94e9d096074cde35c37b6fc99",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "aaf38bc5b644e7baafea81e22a968b8daf8256d148365cbab4650f8f689b7b64",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "4d846e02e3841d3f7e3a26acc4406554353945682d54ffbac8a18841be1cfd5d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "871105e7b87970b11240b6b7ca0c0eb6f46c78b8946f864c674a5a523f12186f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "b65d45e1f7fe1135205d73b25ea5b09880262a4d244017957bfa9668c3639eb2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "1e019697ed78509a4acb3387d3adf8d22cd4e25b724ce15e8f6cc81de3fbcf67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "718b00acda1ee9f90c403024800617aa85ae84dac4b5feb58c49a88eff099810",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "75f37d9e168ddfe33447dd41011baf179a3c1e7ab3911a0543dd0c5d4071f2be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "9924452276a437cc8d6203a0c4f73b601c274a3efe48198ef5d74e9f565f049b"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260719T233149+0200-c0d0e8f8945d-29704657202-1",
      "date": "2026-07-19",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-19T21:37:07.099Z",
      "computedAt": "2026-07-19T23:31:49+02:00",
      "gitSha": "c0d0e8f8945da7942083def0f54b1bfb7e4b2144",
      "previousFrameHash": "9924452276a437cc8d6203a0c4f73b601c274a3efe48198ef5d74e9f565f049b",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29704657202",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "79924b911b576977c0f5b4d9b1f862a2a65ec5b8781164abd529f81584f8ec02",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "2022e079174bb0d547027e171eb1a17fc5fce018a40d5c302c1d33b02f640dc0",
          "bytes": 1060306,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "7f2de232301b969917f2101bcf92dcd9936a068de2cfa15bbbcf69403b45bcf8",
          "bytes": 3176651,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "ab5a6a032b37d1975e483f47d7200f4645f0c0d9d7aae9d32789d3ca83c4a692",
          "bytes": 545901,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "b78936861f323282e34e4ca36971ef39c015b1fbf32a6389135af0c9afd539ad",
          "bytes": 508736,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "22a06a6b72c691bc351263c4fca265217568104250635d6825e05d20a271087e",
          "bytes": 27531,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "0c3ec061c5a28c372fb36c34147eaa77fa14d282a1b2483f38f74a58f2cfd210",
          "bytes": 14871,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "9914ca13ad08377a16c20d52ee07fa1ef35258399b8697056b783241521d149c",
          "bytes": 224847,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "5707939e573290b1e1ad8d75dc5c52fafad1a6c19f09bef1758dcc5475f60e77",
          "bytes": 140026,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "fa5a6a3e6a214841ce7ae3852a0120bf1772b731d6db426b4ab0c72476dc3c68",
          "bytes": 15207,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "4931b33bd68bff39a2d85fe0c0baf8d273237c797536a8e50a3e581cb9ec97dc",
          "bytes": 7350,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "b37e129dafff95ead661b042a1ee7b366f6b827312e1f6c9c7ef5b1f7ad7bfdf",
          "bytes": 731672,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-19T21:31:49.000Z:7becd000a0e0",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-19T21:31:49.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T21:24:26.000Z",
          "retrievedAt": "2026-07-19T21:37:07.099Z",
          "computedAt": "2026-07-19T21:31:49.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285738837846694,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "7becd000a0e06a2ae6e2943bf80bedb72bede3aa855a4d940769b4a7cd594497",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-19T21:31:49.000Z:75bae066d8e3",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-19T21:31:49.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T21:10:18.000Z",
          "retrievedAt": "2026-07-19T21:24:05.000Z",
          "computedAt": "2026-07-19T21:31:49.000Z",
          "archivedAt": null,
          "value": 48,
          "rawValue": 48,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "75bae066d8e3ad7005821cf7caae132fdf4739a0923ec76040ee077297df16cb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-19T21:31:49.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-19T21:31:49.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
          "retrievedAt": "2026-07-19T21:24:05.000Z",
          "computedAt": "2026-07-19T21:31:49.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-19T21:31:49.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-19T21:31:49.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
          "retrievedAt": "2026-07-19T21:24:05.000Z",
          "computedAt": "2026-07-19T21:31:49.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-19T21:31:49.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-19T21:31:49.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-19T21:17:55.000Z",
          "retrievedAt": "2026-07-19T21:24:05.000Z",
          "computedAt": "2026-07-19T21:31:49.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-19T23:31:49+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T04:01:38.000Z",
            "retrievedAt": "2026-07-19T21:24:05.000Z",
            "lastAttemptAt": "2026-07-19T21:24:05.000Z",
            "lastSuccessAt": "2026-07-19T21:24:05.000Z",
            "computedAt": "2026-07-19T23:31:49+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T16:01:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T07:36:00.000Z",
            "retrievedAt": "2026-07-19T21:24:05.000Z",
            "lastAttemptAt": "2026-07-19T21:24:05.000Z",
            "lastSuccessAt": "2026-07-19T21:24:05.000Z",
            "computedAt": "2026-07-19T23:31:49+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-20T19:36:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T21:17:55.000Z",
            "retrievedAt": "2026-07-19T21:24:05.000Z",
            "lastAttemptAt": "2026-07-19T21:24:05.000Z",
            "lastSuccessAt": "2026-07-19T21:24:05.000Z",
            "computedAt": "2026-07-19T23:31:49+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-20T09:17:55.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T21:10:18.000Z",
            "retrievedAt": "2026-07-19T21:24:05.000Z",
            "lastAttemptAt": "2026-07-19T21:24:05.000Z",
            "lastSuccessAt": "2026-07-19T21:24:05.000Z",
            "computedAt": "2026-07-19T23:31:49+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T03:10:18.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-19T21:24:26.000Z",
            "retrievedAt": "2026-07-19T21:37:07.099Z",
            "lastAttemptAt": "2026-07-19T21:37:07.099Z",
            "lastSuccessAt": "2026-07-19T21:37:07.099Z",
            "computedAt": "2026-07-19T23:31:49+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T03:24:26.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-19T23:31:49+02:00",
        "latest": [
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d1946776e54c7b939733929abaf73337be17e5e72b224b1b660b8bb6e0fd1288",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "4ecabdb8cfedf39a3632889a516a19dd81553bde73f8b372f4f1633776687a7b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "e7d3d60518fc5b5bf98d3bc9278c2bb1973b09d4a987fd02c231759c77d33dff",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "29ed2033b5cd0a99dfbddc3a2e162034a4bb260d310956e47bda23e7cd3033cb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "f4ae82e4387c345a096f993f100af2d52e6f3f7723cae27a9d54699111d7e5cd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "b9668f22d631bad46617b52559e385ad6a78ed11830cbb69a4c338bf5122014a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "9af000773c0b3357ad09199c532fd27d9531c210cb74e0c92130e85e6588d6d0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "00ca5c5e3ec4dca2731762cf986ff8e18707c8439d4c8ee710a95b6fb1cb2439",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "b47749dbde83cd619da36bfbd3bcd824aaf1a497d49280c476247d7f672def0a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "7631a7e5d19c76713b8098e3faa4fcb79d031ff9b8567da0783b2b09ced45693",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "60f59d12e5266e7c6f22b3cc47bd6779947540c970fdc7986b508e2ba72951e0"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260720T044118+0200-4989d7ff11b8-29725345957-1",
      "date": "2026-07-20",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-20T07:41:07.289Z",
      "computedAt": "2026-07-20T04:41:18+02:00",
      "gitSha": "4989d7ff11b88fbcc6dfeded75829e490c3a3de0",
      "previousFrameHash": "60f59d12e5266e7c6f22b3cc47bd6779947540c970fdc7986b508e2ba72951e0",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29725345957",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "79924b911b576977c0f5b4d9b1f862a2a65ec5b8781164abd529f81584f8ec02",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "142594799ab50ad37cc6a297e858f292360d93734552ea62a7d60e95d0e57c42",
          "bytes": 1060274,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ce98c6166ee4ea868049b5b97b662bc1b5721fce515d37d5851c1de15a831d67",
          "bytes": 3175993,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "9e799994433866471c29cf63da791e216c035b8db6981aadde8839a5af153223",
          "bytes": 545908,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "71c22a1ab2a119c761ab42401c7ab2702435b2cc53dc3846c7217486ab03efb3",
          "bytes": 508765,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "22a06a6b72c691bc351263c4fca265217568104250635d6825e05d20a271087e",
          "bytes": 27531,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "42d8b2767a58d6705015e18cdc4c0b90250c0d809d3cb7d2514a6c318c0fdf9b",
          "bytes": 14871,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "2b3641432a500322bc840c79bb3f6e7da08ba3ae435d959bc4e2b30aaaa27938",
          "bytes": 224845,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "e75c3fb6b0eba85253e9718d625b26d2f727b4c46df494c9b0cff8052c019776",
          "bytes": 131938,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "ba69a2540cb2414105ab9472898fb6e786e1c9c7b7037d5d0d177ec39c7a7999",
          "bytes": 15527,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "0a55cd01d821d93b00b3b3a4079b51a172d77c7086fc3af7415a478f3105b66b",
          "bytes": 7349,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "9a00255103eb5875cbe789fbbd4ee531940f1b069bdf6cfc8653180cf2a225fe",
          "bytes": 750453,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-20T07:30:04.000Z:8aa2e5faf23f",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-20T07:30:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T07:15:26.000Z",
          "retrievedAt": "2026-07-20T07:30:04.000Z",
          "computedAt": "2026-07-20T07:30:04.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54,
          "scale": 100,
          "level": null,
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8aa2e5faf23f9b6b71749897f9904fdc2dd7f9d657e64c8a28b709a736b6c27d",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-20 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-20T07:30:04.000Z:e524c88cf97d",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-20T07:30:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T06:58:56.000Z",
          "retrievedAt": "2026-07-20T07:30:04.000Z",
          "computedAt": "2026-07-20T07:30:04.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "e524c88cf97dd3a6368da102b43841bb8ab30851a7071a9066990b9c12418ee6",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-20 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-20T07:30:04.000Z:ea277c5e3ecf",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-20T07:30:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T07:34:00.000Z",
          "retrievedAt": "2026-07-20T07:30:04.000Z",
          "computedAt": "2026-07-20T07:30:04.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": null,
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "ea277c5e3ecf15cfb8a5ebd916bd5190a6853809ebac4ac48c45a9dca58c2e90",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-20 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-20T07:30:04.000Z:19db62413ab1",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-20T07:30:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T04:02:06.000Z",
          "retrievedAt": "2026-07-20T07:30:04.000Z",
          "computedAt": "2026-07-20T07:30:04.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "19db62413ab180387262f4d4bccd2cd90f73aeacf672e0a355eee5645dfdba9d",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-20 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-20T07:30:04.000Z:083e4e0e6262",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-20T07:30:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T04:17:40.000Z",
          "retrievedAt": "2026-07-20T07:30:04.000Z",
          "computedAt": "2026-07-20T07:30:04.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "083e4e0e6262129c10b2929e6a166559cbd5922fdc96357abb770bfe6e75fbff",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-20 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-20T04:41:18+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T04:02:06.000Z",
            "retrievedAt": "2026-07-20T07:30:04.000Z",
            "lastAttemptAt": "2026-07-20T07:30:04.000Z",
            "lastSuccessAt": "2026-07-20T07:30:04.000Z",
            "computedAt": "2026-07-20T04:41:18+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-21T16:02:06.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T07:34:00.000Z",
            "retrievedAt": "2026-07-20T07:30:04.000Z",
            "lastAttemptAt": "2026-07-20T07:30:04.000Z",
            "lastSuccessAt": "2026-07-20T07:30:04.000Z",
            "computedAt": "2026-07-20T04:41:18+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-21T19:34:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T04:17:40.000Z",
            "retrievedAt": "2026-07-20T07:30:04.000Z",
            "lastAttemptAt": "2026-07-20T07:30:04.000Z",
            "lastSuccessAt": "2026-07-20T07:30:04.000Z",
            "computedAt": "2026-07-20T04:41:18+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-20T16:17:40.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T06:58:56.000Z",
            "retrievedAt": "2026-07-20T07:30:04.000Z",
            "lastAttemptAt": "2026-07-20T07:30:04.000Z",
            "lastSuccessAt": "2026-07-20T07:30:04.000Z",
            "computedAt": "2026-07-20T04:41:18+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T12:58:56.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (7 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (7 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T07:30:37.000Z",
            "retrievedAt": "2026-07-20T07:41:07.289Z",
            "lastAttemptAt": "2026-07-20T07:41:07.289Z",
            "lastSuccessAt": "2026-07-20T07:41:07.289Z",
            "computedAt": "2026-07-20T04:41:18+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T13:30:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-20T04:41:18+02:00",
        "latest": [
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "ca3bc6698dc3cadfbda6a18119089fd65f3f7ce68b82edc027c6a0b01715b89a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "fb9de0f3f356e87f7e837451a9f260c9a76acd70ed898fb8fd03db465984f96a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "d007ba02e97002962c25cf33d6a601f5a98f6a3894290e9dbc2f6b2033d0b9c4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "cc9512c297af7ad89988a4b2ad8fce550a3443df24c829c9ee4d44d11ed3a085",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "fa3fae482866da067407d0f2ff8bdfc34c17e3de17b992592cec0b6c57d8a4b9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "b9668f22d631bad46617b52559e385ad6a78ed11830cbb69a4c338bf5122014a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "0687e45d48a67dc7f19fd2ced0c308aa40de105a9ef6a5860f9ef67662948dcd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "00ca5c5e3ec4dca2731762cf986ff8e18707c8439d4c8ee710a95b6fb1cb2439",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "67d31edea4b174241769aa885089c0240b512a9b10749b98b1d332b6fc202b4c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "7631a7e5d19c76713b8098e3faa4fcb79d031ff9b8567da0783b2b09ced45693",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "ab6c27e1fb4866e7344e28b574a9000245a6ef901663e09f3e45ef6f9279d770"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260720T093703Z-4989d7ff11b8-29732103136-1",
      "date": "2026-07-20",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-20T09:37:42.765Z",
      "computedAt": "2026-07-20T09:37:03Z",
      "gitSha": "4989d7ff11b88fbcc6dfeded75829e490c3a3de0",
      "previousFrameHash": "ab6c27e1fb4866e7344e28b574a9000245a6ef901663e09f3e45ef6f9279d770",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29732103136",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "79924b911b576977c0f5b4d9b1f862a2a65ec5b8781164abd529f81584f8ec02",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "7da3e34d1fc43a7fdb27f98ad661f85d9689943b74180df3fed6b69518bc2995",
          "bytes": 1059114,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ce98c6166ee4ea868049b5b97b662bc1b5721fce515d37d5851c1de15a831d67",
          "bytes": 3175993,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "23a97396419b20a69f0a67a357a2261465e620c209487456bdfacdb397c01fc2",
          "bytes": 543588,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "231f8b901ac1f574336dec7ec027fb7ff39cfcc5e46b0539b7eb58d18824d579",
          "bytes": 507750,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "22a06a6b72c691bc351263c4fca265217568104250635d6825e05d20a271087e",
          "bytes": 27531,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "19d5734ecb77477d01f630f470235750e621e723805f7c5c0bd9e0115f760558",
          "bytes": 14846,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "5fd31105993bda4fac7b22d29e44ae12118c0ff16e1471a10110d18b722dff16",
          "bytes": 224845,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "25fb57097805e14b466a175ae6c232199779567ac2cf19af2140f136c065c38f",
          "bytes": 131762,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "eeec952470a4815a1b936ffcac803cf5c1208cd6fefbdc5917b53950d8737b16",
          "bytes": 15530,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "b35e451f44f5eb95e7fe95caff0162dc471f42ecfbac918540335f39e3b6fdb3",
          "bytes": 7349,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "d63399749d0fe7bc06829bd8e9117f6e604a4516dc9bd02fd648a99ce2df05fa",
          "bytes": 759861,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-20T09:37:03.000Z:23410a41da4e",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-20T09:37:03.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T09:31:53.000Z",
          "retrievedAt": "2026-07-20T09:37:42.765Z",
          "computedAt": "2026-07-20T09:37:03.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.28609865013499,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "23410a41da4ef7acba25bef608939e7e5a3db6d2c04f7aa266cee82887f47791",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-20T09:37:03.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-20T09:37:03.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T09:04:34.000Z",
          "retrievedAt": "2026-07-20T09:31:35.000Z",
          "computedAt": "2026-07-20T09:37:03.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-20T09:37:03.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-20T09:37:03.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T07:34:00.000Z",
          "retrievedAt": "2026-07-20T09:31:35.000Z",
          "computedAt": "2026-07-20T09:37:03.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-20T09:37:03.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-20T09:37:03.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T04:02:06.000Z",
          "retrievedAt": "2026-07-20T09:31:35.000Z",
          "computedAt": "2026-07-20T09:37:03.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-20T09:37:03.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-20T09:37:03.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T04:17:40.000Z",
          "retrievedAt": "2026-07-20T09:31:35.000Z",
          "computedAt": "2026-07-20T09:37:03.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-20T09:37:03Z",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T04:02:06.000Z",
            "retrievedAt": "2026-07-20T09:31:35.000Z",
            "lastAttemptAt": "2026-07-20T09:31:35.000Z",
            "lastSuccessAt": "2026-07-20T09:31:35.000Z",
            "computedAt": "2026-07-20T09:37:03Z",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-21T16:02:06.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T07:34:00.000Z",
            "retrievedAt": "2026-07-20T09:31:35.000Z",
            "lastAttemptAt": "2026-07-20T09:31:35.000Z",
            "lastSuccessAt": "2026-07-20T09:31:35.000Z",
            "computedAt": "2026-07-20T09:37:03Z",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-21T19:34:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T04:17:40.000Z",
            "retrievedAt": "2026-07-20T09:31:35.000Z",
            "lastAttemptAt": "2026-07-20T09:31:35.000Z",
            "lastSuccessAt": "2026-07-20T09:31:35.000Z",
            "computedAt": "2026-07-20T09:37:03Z",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-20T16:17:40.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T09:04:34.000Z",
            "retrievedAt": "2026-07-20T09:31:35.000Z",
            "lastAttemptAt": "2026-07-20T09:31:35.000Z",
            "lastSuccessAt": "2026-07-20T09:31:35.000Z",
            "computedAt": "2026-07-20T09:37:03Z",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T15:04:34.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (7 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (7 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T09:31:53.000Z",
            "retrievedAt": "2026-07-20T09:37:42.765Z",
            "lastAttemptAt": "2026-07-20T09:37:42.765Z",
            "lastSuccessAt": "2026-07-20T09:37:42.765Z",
            "computedAt": "2026-07-20T09:37:03Z",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T15:31:53.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-20T09:37:03Z",
        "latest": [
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "44b91e9a21e040abecc85f5a4d7e4b7410e310ac6e1078feeb0f19d22c825b47",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "8bc941e4a8099055d9040947ad84d0ea0b7cf3762866277e4999959636f6d7af",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "fae405737662cf0928cb43d8889fb2856a6b03c423a6952de033a6f0329928a1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "e30d529128a7d9d7af4c47ad4fc865a2e3336c34e658e2a222ff837e275a51c5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "a1da79f420ad1c38abc1826461a5ca00aad48f1692aa1e9c15113c5c8ddc3d33",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "b9668f22d631bad46617b52559e385ad6a78ed11830cbb69a4c338bf5122014a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "f3f2fd6e3b57da18bade0fcf1fbf3ebf9f24b99c4480d5ab5a78c606eed1be73",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "00ca5c5e3ec4dca2731762cf986ff8e18707c8439d4c8ee710a95b6fb1cb2439",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "be54ffb13dd5e6f8",
            "date": "2026-07-17T09:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tankers-fantomes-golfe-le-compteur-tourne",
            "title": "Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour",
            "url": "https://l0g.fr/posts/tankers-fantomes-golfe-le-compteur-tourne/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Tankers fantômes : dans le Golfe, le compteur tourne à 100 000 dollars par jour.",
            "objectId": "article:tankers-fantomes-golfe-le-compteur-tourne",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:55:00.000Z",
            "previousHash": null,
            "currentHash": "3d4fe7a7b3c0e49f4c36e860b89dc1ffede258b15b7c4fbbf89e5a470ab79a1b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e051690096c48a51",
            "date": "2026-07-17T07:40:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "strategic-petroleum-reserves-buffer-round-two",
            "title": "Strategic reserves: the state of the buffer before round two",
            "url": "https://l0g.fr/en/analysis/strategic-petroleum-reserves-buffer-round-two/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Strategic reserves: the state of the buffer before round two.",
            "objectId": "article:en:strategic-petroleum-reserves-buffer-round-two",
            "previousVersion": null,
            "currentVersion": "2026-07-17T07:40:00.000Z",
            "previousHash": null,
            "currentHash": "7631a7e5d19c76713b8098e3faa4fcb79d031ff9b8567da0783b2b09ced45693",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "e99383ea76a406c428e129959b814e009275ce5d137cd45b8b4464b51a453298"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260720T113728+0200-fdb771ae0a4a-29732142811-1",
      "date": "2026-07-20",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-20T09:39:59.304Z",
      "computedAt": "2026-07-20T11:37:28+02:00",
      "gitSha": "fdb771ae0a4a08a2ce9435817d4805c997d1ab0c",
      "previousFrameHash": "e99383ea76a406c428e129959b814e009275ce5d137cd45b8b4464b51a453298",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29732142811",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "e2fe2b35b5cbec1b115f157b045d58c382b01d80a9c18b9cdc6900283e478fb9",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "32b656732b4334fd68045203894204f4419021508f9a11811ab05842dd54bcba",
          "bytes": 1070911,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "89a421c76c324079f415bd5244ee3e2d52e0c58c432fb68d601708ccbf51242b",
          "bytes": 3202042,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "e4c846d458cadb326ed377120496437c8c47de1b7db0e353463611bf8bbce894",
          "bytes": 554242,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "68b15dfefff8fda934b74fa4475c598054de1f7bf232ff9c3333e81ec1f53350",
          "bytes": 516975,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "d251e6e22ef2819c3aec3543ebd895eb5939d38256e55246d429c1a5240e3df7",
          "bytes": 27531,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "cd6607b9957728e3410865febbea7c5a3b3b73eb52a072a68a77d3ff994f9221",
          "bytes": 14855,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "bd5eaae6d5672e0c17c4fe9847880f27aa9a41531f4c1394473fb728f4c6f138",
          "bytes": 226522,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "3b9dad8bbe32a0d0debacf9c0ccb812a646f6ef895dc01d2a6ec777a87aba8a1",
          "bytes": 134807,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "cae2ba621eef25a2b75750fceb5979f2b42abd38eb0fa036a3a5982d4b7d95d1",
          "bytes": 15530,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "945260ed7a864ae3007390d2390d837e46311839d2137b8661f3218bf1867e76",
          "bytes": 7349,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "bf7c33454c07492ad12d5cb3fd26b0029804f2a6a5a39b58f4262ce70e845895",
          "bytes": 769264,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-20T09:37:28.000Z:388a773b4f83",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-20T09:37:28.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T09:31:53.000Z",
          "retrievedAt": "2026-07-20T09:39:59.304Z",
          "computedAt": "2026-07-20T09:37:28.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.28609865013499,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "388a773b4f83f9968826f8203587991da80c237cb1886f076210a5efe0972a4b",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-20T09:37:28.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-20T09:37:28.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T09:04:34.000Z",
          "retrievedAt": "2026-07-20T09:31:35.000Z",
          "computedAt": "2026-07-20T09:37:28.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-20T09:37:28.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-20T09:37:28.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T07:34:00.000Z",
          "retrievedAt": "2026-07-20T09:31:35.000Z",
          "computedAt": "2026-07-20T09:37:28.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-20T09:37:28.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-20T09:37:28.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T04:02:06.000Z",
          "retrievedAt": "2026-07-20T09:31:35.000Z",
          "computedAt": "2026-07-20T09:37:28.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-20T09:37:28.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-20T09:37:28.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T04:17:40.000Z",
          "retrievedAt": "2026-07-20T09:31:35.000Z",
          "computedAt": "2026-07-20T09:37:28.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-20T11:37:28+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T04:02:06.000Z",
            "retrievedAt": "2026-07-20T09:31:35.000Z",
            "lastAttemptAt": "2026-07-20T09:31:35.000Z",
            "lastSuccessAt": "2026-07-20T09:31:35.000Z",
            "computedAt": "2026-07-20T11:37:28+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-21T16:02:06.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T07:34:00.000Z",
            "retrievedAt": "2026-07-20T09:31:35.000Z",
            "lastAttemptAt": "2026-07-20T09:31:35.000Z",
            "lastSuccessAt": "2026-07-20T09:31:35.000Z",
            "computedAt": "2026-07-20T11:37:28+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-21T19:34:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T04:17:40.000Z",
            "retrievedAt": "2026-07-20T09:31:35.000Z",
            "lastAttemptAt": "2026-07-20T09:31:35.000Z",
            "lastSuccessAt": "2026-07-20T09:31:35.000Z",
            "computedAt": "2026-07-20T11:37:28+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-20T16:17:40.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T09:04:34.000Z",
            "retrievedAt": "2026-07-20T09:31:35.000Z",
            "lastAttemptAt": "2026-07-20T09:31:35.000Z",
            "lastSuccessAt": "2026-07-20T09:31:35.000Z",
            "computedAt": "2026-07-20T11:37:28+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T15:04:34.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (7 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (7 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T09:31:53.000Z",
            "retrievedAt": "2026-07-20T09:39:59.304Z",
            "lastAttemptAt": "2026-07-20T09:39:59.304Z",
            "lastSuccessAt": "2026-07-20T09:39:59.304Z",
            "computedAt": "2026-07-20T11:37:28+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T15:31:53.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-20T11:37:28+02:00",
        "latest": [
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "0f5fdbf01a1d3d0e89d19c6b125b625ac05b4dd34386cc757decc4cfea7caf54",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "0a0bde2b6ac0e74d47a7ce8a434dd6ae08d272cf1ebb626fa45ca0ab3f2d3de6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "e2658ae671db3d65eb7d8a5f1348588beffecdb317a4379aeaf38e13a0e055a0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "a6fba668cd503355e8aaea49caf079ec421ebd41af36d9dfb90bf06d0504fef5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "a25f5ba51e11c7aefe1317c032f197d759c520b8a51048add2f51b7105451778",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "27a2026bd43f55b9ef10040746f2909e0c73a2cad60e946978429ca402798b52",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "b9668f22d631bad46617b52559e385ad6a78ed11830cbb69a4c338bf5122014a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "975c6f84e3982f8d",
            "date": "2026-07-17T12:45:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "truth-api-parole-presidentielle-flux-de-marche",
            "title": "Truth API : la parole présidentielle devient un flux de marché payant",
            "url": "https://l0g.fr/posts/truth-api-parole-presidentielle-flux-de-marche/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API : la parole présidentielle devient un flux de marché payant.",
            "objectId": "article:truth-api-parole-presidentielle-flux-de-marche",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:45:00.000Z",
            "previousHash": null,
            "currentHash": "c2cc64360fe5f81bef316d3ba52e718c469627c7b06064b1e432d119ca9e02cb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "076e50f91d410fd2",
            "date": "2026-07-17T09:58:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-ghost-tankers-the-meter-is-running",
            "title": "Ghost tankers: in the Gulf, the meter runs at $100,000 a day",
            "url": "https://l0g.fr/en/analysis/gulf-ghost-tankers-the-meter-is-running/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ghost tankers: in the Gulf, the meter runs at $100,000 a day.",
            "objectId": "article:en:gulf-ghost-tankers-the-meter-is-running",
            "previousVersion": null,
            "currentVersion": "2026-07-17T09:58:00.000Z",
            "previousHash": null,
            "currentHash": "00ca5c5e3ec4dca2731762cf986ff8e18707c8439d4c8ee710a95b6fb1cb2439",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "44bd4a2717511852828f5dd6acf87af0afd3cce8c2d68af73f4f92b02bd2fc33"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260720T150458+0200-e3e9ace90b94-29744730420-1",
      "date": "2026-07-20",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-20T13:05:57.410Z",
      "computedAt": "2026-07-20T15:04:58+02:00",
      "gitSha": "e3e9ace90b940ce0805ee8c0b5cefda1d4a861bb",
      "previousFrameHash": "44bd4a2717511852828f5dd6acf87af0afd3cce8c2d68af73f4f92b02bd2fc33",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29744730420",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "74ae1731376884a2d1e8ae1b415b432c3e4588f1debab9ef30e47ec748126dc1",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "5aa4cdb26f9b4253804939d8f8c5b145b89b1d3f2788be8f1a35e04b319d24fc",
          "bytes": 1081070,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "8c53fbcfac282b0be22a28b406f8b46531ea5f9e0e86687974c7d503e998f7dc",
          "bytes": 3225979,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "5b83082663cf3eb700624a3e1a6a42d4376665b56b48a988e3cfd270f73a1dd0",
          "bytes": 562288,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "db1a278afa4b04d4bb7514f482d088c2a12da2fc0ecfce3b4935eac8cacf6557",
          "bytes": 523741,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "598389950bf35854a771620ea45e4b6f8f9e319fe0e1455490895836ece37df0",
          "bytes": 27612,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "7ce2f0d4750ef07512442f7cab20e80635cda18d055edf1f66d0d433cc0248f3",
          "bytes": 14886,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "f697dbf6d8e8f6f71332b2d71c3a1d202298811d56da6ad5816441dafcd5c6c6",
          "bytes": 228261,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "613ae9f1a44a9aabc91cc58f125e9bbb35586eb5b2d32933529fbfacd26f5fb1",
          "bytes": 140438,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "84771e641d1e294cea062a3d4561404f9bdc23822e54aea22dacbe8c42827039",
          "bytes": 15531,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "ec21328fc124ce3411c14d4ce083d6234843649a0e19be7da06732bef0e134f5",
          "bytes": 7349,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "98265958671a4af0dc7e3b76cd9b1055e875e962b2c07aed75033fe9da813d3b",
          "bytes": 778687,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-20T13:04:58.000Z:b9c04cbd4d38",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-20T13:04:58.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T13:03:18.000Z",
          "retrievedAt": "2026-07-20T13:05:57.410Z",
          "computedAt": "2026-07-20T13:04:58.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.28609865013499,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "b9c04cbd4d38e187c0e5e41a10b59665a75dc578e76f15b4206a0dad54bb3266",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-20T13:04:58.000Z:4e758622f5bd",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-20T13:04:58.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T12:44:56.000Z",
          "retrievedAt": "2026-07-20T13:02:55.000Z",
          "computedAt": "2026-07-20T13:04:58.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4e758622f5bd1201c9ce7ce99e83648ae77e47d5f7d938a0619270fc86b54c20",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-20T13:04:58.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-20T13:04:58.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T07:34:00.000Z",
          "retrievedAt": "2026-07-20T13:02:55.000Z",
          "computedAt": "2026-07-20T13:04:58.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-20T13:04:58.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-20T13:04:58.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T04:02:06.000Z",
          "retrievedAt": "2026-07-20T13:02:55.000Z",
          "computedAt": "2026-07-20T13:04:58.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-20T13:04:58.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-20T13:04:58.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T10:15:35.000Z",
          "retrievedAt": "2026-07-20T13:02:55.000Z",
          "computedAt": "2026-07-20T13:04:58.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-20T15:04:58+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T04:02:06.000Z",
            "retrievedAt": "2026-07-20T13:02:55.000Z",
            "lastAttemptAt": "2026-07-20T13:02:55.000Z",
            "lastSuccessAt": "2026-07-20T13:02:55.000Z",
            "computedAt": "2026-07-20T15:04:58+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-21T16:02:06.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T07:34:00.000Z",
            "retrievedAt": "2026-07-20T13:02:55.000Z",
            "lastAttemptAt": "2026-07-20T13:02:55.000Z",
            "lastSuccessAt": "2026-07-20T13:02:55.000Z",
            "computedAt": "2026-07-20T15:04:58+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-21T19:34:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T10:15:35.000Z",
            "retrievedAt": "2026-07-20T13:02:55.000Z",
            "lastAttemptAt": "2026-07-20T13:02:55.000Z",
            "lastSuccessAt": "2026-07-20T13:02:55.000Z",
            "computedAt": "2026-07-20T15:04:58+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-20T22:15:35.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T12:44:56.000Z",
            "retrievedAt": "2026-07-20T13:02:55.000Z",
            "lastAttemptAt": "2026-07-20T13:02:55.000Z",
            "lastSuccessAt": "2026-07-20T13:02:55.000Z",
            "computedAt": "2026-07-20T15:04:58+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T18:44:56.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (7 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (7 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T13:03:18.000Z",
            "retrievedAt": "2026-07-20T13:05:57.410Z",
            "lastAttemptAt": "2026-07-20T13:05:57.410Z",
            "lastSuccessAt": "2026-07-20T13:05:57.410Z",
            "computedAt": "2026-07-20T15:04:58+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T19:03:18.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-20T15:04:58+02:00",
        "latest": [
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "26a56195ceba8b4ffabc1948c136902fd7a4cbdf2e591de4b79363faf23c886d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "c32a034aa7ccdf0f6ac4cbca734359723dc7f162b103186184ee57135df38557",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "2490e014fad28ef3ef844d321a3dbea0c5750e390e00a691233d8e550e72eaa5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "dfac879e6783e26594d0e5eab804807356011ce284aeabf5c108652c3e3bdaf9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "a919d58f26f7dab7f02345899e4631a3c83f918f1411a2c51df724ec39edc6e6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "63246c70ca946de1e67ec0e251583526fdd654585c44a7f181cdda048ba1994c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9a54f0fe15f301c0",
            "date": "2026-07-17T18:43:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "rechute-des-puces-bear-market-profits-records",
            "title": "La rechute des puces : un bear market sur fond de profits records",
            "url": "https://l0g.fr/posts/rechute-des-puces-bear-market-profits-records/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La rechute des puces : un bear market sur fond de profits records.",
            "objectId": "article:rechute-des-puces-bear-market-profits-records",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:43:00.000Z",
            "previousHash": null,
            "currentHash": "cef728ce22b3b78c980bfbf9f0af98aeeb2d2956bdd02585ac75726c25be769a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ebbd2a88a0897980",
            "date": "2026-07-17T12:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "truth-api-presidential-speech-market-data-feed",
            "title": "Truth API: the presidential word becomes a paid market data feed",
            "url": "https://l0g.fr/en/analysis/truth-api-presidential-speech-market-data-feed/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Truth API: the presidential word becomes a paid market data feed.",
            "objectId": "article:en:truth-api-presidential-speech-market-data-feed",
            "previousVersion": null,
            "currentVersion": "2026-07-17T12:48:00.000Z",
            "previousHash": null,
            "currentHash": "b9668f22d631bad46617b52559e385ad6a78ed11830cbb69a4c338bf5122014a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "26cffd884641adb52abb58b38da7769ec93b5f970784cec2a1ff668b04a5fa1a"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260720T161904+0200-9691f733d235-29750111247-1",
      "date": "2026-07-20",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-20T14:20:02.703Z",
      "computedAt": "2026-07-20T16:19:04+02:00",
      "gitSha": "9691f733d23538844d74c84afad355411756c483",
      "previousFrameHash": "26cffd884641adb52abb58b38da7769ec93b5f970784cec2a1ff668b04a5fa1a",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29750111247",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "8c032c2b47e37fd66926b2aa96cb10082918efbf0d17dab59757df7617689d9a",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "5e3d186b364e99655fa13cf401db3302d2f5e866e78895f15639e85c72045102",
          "bytes": 1090816,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "0d8e6e59c15c73e884ed2602d2a0c8a042cfef94aa61ea60135f087d46fe1806",
          "bytes": 3250022,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "052d1c7d02434b741573c66289876208f652155e909cf29888fea46d4decb717",
          "bytes": 570520,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "de6a2cab1f0f41f825544a17ec2946aca49a66d37ab72d6aa72e381e3a3bac1f",
          "bytes": 530626,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "42ad298655cccbf062f3662a012b2e07c58a79ec67378bb0c9e340f77c092788",
          "bytes": 27699,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "878909bddbbd38e13ca2046363ae5cc00119292f7687515c8a30f2653f3b8fe4",
          "bytes": 14932,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "90534a435d8e88cdf4f1c6af9205d12ca3a6658e2369246bf754faf363a620cd",
          "bytes": 230029,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "92fce06de8d9b22bf370cf04a4f3d280316b5f3517781b567e4e286f4aa00188",
          "bytes": 145679,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "35ef66fcd89b3ac75f052b0b89d230c89b4aef478a47204fc7924c3465b15ce8",
          "bytes": 15530,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "eca3fd1993fa64554653da05177d59c11a819ffca240c0900ad32191f63d6a86",
          "bytes": 7348,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "7d9e16ebff0a8283068304d546c51f0e16d08aaee887096fc024aa78652f4e0f",
          "bytes": 788110,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-20T14:19:04.000Z:f2af22b83fa6",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-20T14:19:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T14:18:47.000Z",
          "retrievedAt": "2026-07-20T14:20:02.703Z",
          "computedAt": "2026-07-20T14:19:04.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.28609865013499,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "f2af22b83fa63a6b507c773e4958736d8fbe1dae8b38a2069d4b770733cc477f",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-20T14:19:04.000Z:4e758622f5bd",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-20T14:19:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T13:47:30.000Z",
          "retrievedAt": "2026-07-20T14:18:25.000Z",
          "computedAt": "2026-07-20T14:19:04.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4e758622f5bd1201c9ce7ce99e83648ae77e47d5f7d938a0619270fc86b54c20",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-20T14:19:04.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-20T14:19:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T07:34:00.000Z",
          "retrievedAt": "2026-07-20T14:18:25.000Z",
          "computedAt": "2026-07-20T14:19:04.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-20T14:19:04.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-20T14:19:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T04:02:06.000Z",
          "retrievedAt": "2026-07-20T14:18:25.000Z",
          "computedAt": "2026-07-20T14:19:04.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-20T14:19:04.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-20T14:19:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T10:15:35.000Z",
          "retrievedAt": "2026-07-20T14:18:25.000Z",
          "computedAt": "2026-07-20T14:19:04.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-20T16:19:04+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T04:02:06.000Z",
            "retrievedAt": "2026-07-20T14:18:25.000Z",
            "lastAttemptAt": "2026-07-20T14:18:25.000Z",
            "lastSuccessAt": "2026-07-20T14:18:25.000Z",
            "computedAt": "2026-07-20T16:19:04+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-21T16:02:06.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T07:34:00.000Z",
            "retrievedAt": "2026-07-20T14:18:25.000Z",
            "lastAttemptAt": "2026-07-20T14:18:25.000Z",
            "lastSuccessAt": "2026-07-20T14:18:25.000Z",
            "computedAt": "2026-07-20T16:19:04+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-21T19:34:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T10:15:35.000Z",
            "retrievedAt": "2026-07-20T14:18:25.000Z",
            "lastAttemptAt": "2026-07-20T14:18:25.000Z",
            "lastSuccessAt": "2026-07-20T14:18:25.000Z",
            "computedAt": "2026-07-20T16:19:04+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-20T22:15:35.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T13:47:30.000Z",
            "retrievedAt": "2026-07-20T14:18:25.000Z",
            "lastAttemptAt": "2026-07-20T14:18:25.000Z",
            "lastSuccessAt": "2026-07-20T14:18:25.000Z",
            "computedAt": "2026-07-20T16:19:04+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T19:47:30.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (7 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (7 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T14:18:47.000Z",
            "retrievedAt": "2026-07-20T14:20:02.703Z",
            "lastAttemptAt": "2026-07-20T14:20:02.703Z",
            "lastSuccessAt": "2026-07-20T14:20:02.703Z",
            "computedAt": "2026-07-20T16:19:04+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-20T20:18:47.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-20T16:19:04+02:00",
        "latest": [
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "58cb3ac4358a5859fa4902732fcffc89b54c7b1ab92dc57e47b0ba813956ff5c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "875452ff2427f4f231718d7389ef59d1072e253b91dc21b4d66e0e06e536f996",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "23e385c159d5519777613a903f53fde6550aca310b0f02317d8ff5748cb53fae",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "aea5bcadf7efb06205f234efeaf01fc7474eb697987a9abc62dd0d760bcaeed0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "3d1790a0f261b3a7c18c6a1d6f484164e3650e63ed406cae156633baedba7c25",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "2c5e90be495e1393fb548685f4406549bb3cbb094967223e3888b6a50bd4e3fc",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "d6d6f673b3d77d40e027768bcbc15c8460696d8882223eb821694c220c6be7e6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a2bc5e67f9e960e6",
            "date": "2026-07-18T00:00:00.000Z",
            "type": "editorial-change",
            "contentType": "policy",
            "language": "fr",
            "slug": "2026-07-18-méthode",
            "title": "Revue canonique sélective et dépendances signal-claim fermées",
            "url": "https://l0g.fr/changelog-editorial/",
            "changedFields": [
              "protocol",
              "methodology",
              "source-policy"
            ],
            "summary": "Deux claims disposant d’une source primaire datée et d’un locator exact inaugurent le registre canonique. Les 113 validations historiques restent legacy. Toute claim déclarée comme entrée, seuil ou interprétation d’un signal doit désormais être canonique sous peine d’échec du build.",
            "objectId": "policy:2026-07-18-méthode",
            "previousVersion": null,
            "currentVersion": "2026-07-18T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "22cf271337609ebe35b5d7a942c25b6b25331c59014e1bab7b05aa3cba510e17",
            "replaces": null,
            "semanticChange": "editorial-policy-change",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d6220ae8c3d01957",
            "date": "2026-07-17T18:46:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "chip-relapse-bear-market-record-profits",
            "title": "The chip relapse: a bear market on record profits",
            "url": "https://l0g.fr/en/analysis/chip-relapse-bear-market-record-profits/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The chip relapse: a bear market on record profits.",
            "objectId": "article:en:chip-relapse-bear-market-record-profits",
            "previousVersion": null,
            "currentVersion": "2026-07-17T18:46:00.000Z",
            "previousHash": null,
            "currentHash": "a855161b09b37f1589a5285d02d74ffbc6752bbed93ae38f43b21764e5d4e4e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "61e7b76cc42cca48e1d915773cbac1916cac81c487156683fb4ed974185176a7"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260720T233913+0200-b5845bd2786f-29781122136-1",
      "date": "2026-07-20",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-20T21:41:44.649Z",
      "computedAt": "2026-07-20T23:39:13+02:00",
      "gitSha": "b5845bd2786f68edf2419131da2e338140034097",
      "previousFrameHash": "61e7b76cc42cca48e1d915773cbac1916cac81c487156683fb4ed974185176a7",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29781122136",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "0312c2d7c182ddbccff0d2d63dbae3f00c311496a5b638d534fdac2fa11282e6",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "367ca1e197d4a210e72e04251369716e6a7687b017a55660de36c91acb326421",
          "bytes": 1104147,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ef2bf4a5d9ed7e76d721508a2c19840496db13b000fc45ef23bff7bab414e41a",
          "bytes": 3282610,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "3f9e106090f224eaec065585aee6a99c9b5ff854b2997303671b8ab3ad5f49c9",
          "bytes": 582442,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "eeed29ed2933a7d620be5ab0b0dced91d13c7d711d7f128cc1a2b64d26bc52d4",
          "bytes": 543054,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "d17119e2612d2e7a979d5e8a6f3d3544a7031793a92a4959c822c156602860ed",
          "bytes": 27870,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "666a1d566e3ce246cfc44436db150bc0a96565faa90d18e8bd9fd237e8404825",
          "bytes": 15036,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "e300dfa41d6d6ae81631ffa47ad09d843738c41d5bab296045f0bcf43c50f2bb",
          "bytes": 231809,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "fb3a2ceba6ae4edebccce6ea0eaa701b52b734835e699ff2cae9e3df2a7bcedf",
          "bytes": 151294,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "c891adf7f6f0c4ce737e1b9f9b0596b7bc5c55023ece66c80c090fee5f874566",
          "bytes": 15528,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "9fc1db3b5558cd753c9087ddfd5e4f27a2b43ff2a4d4dde15730cab6c8f0385d",
          "bytes": 7348,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "d73a1dd25624501a44407b14efa0e5f0772ee6ec829a4708a857ccd8b5dde04a",
          "bytes": 797533,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-20T21:39:13.000Z:4d11062578b3",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-20T21:39:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T21:38:08.000Z",
          "retrievedAt": "2026-07-20T21:41:44.649Z",
          "computedAt": "2026-07-20T21:39:13.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.30708772802867,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "4d11062578b3e9577870f84879c6d7996bf45d0ac7544bfa644fa4dac399524c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-20T21:39:13.000Z:4e758622f5bd",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-20T21:39:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T21:34:39.000Z",
          "retrievedAt": "2026-07-20T21:37:45.000Z",
          "computedAt": "2026-07-20T21:39:13.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4e758622f5bd1201c9ce7ce99e83648ae77e47d5f7d938a0619270fc86b54c20",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-20T21:39:13.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-20T21:39:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T07:34:00.000Z",
          "retrievedAt": "2026-07-20T21:37:45.000Z",
          "computedAt": "2026-07-20T21:39:13.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-20T21:39:13.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-20T21:39:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T04:02:06.000Z",
          "retrievedAt": "2026-07-20T21:37:45.000Z",
          "computedAt": "2026-07-20T21:39:13.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-20T21:39:13.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-20T21:39:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T21:15:20.000Z",
          "retrievedAt": "2026-07-20T21:37:45.000Z",
          "computedAt": "2026-07-20T21:39:13.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-20T23:39:13+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T04:02:06.000Z",
            "retrievedAt": "2026-07-20T21:37:45.000Z",
            "lastAttemptAt": "2026-07-20T21:37:45.000Z",
            "lastSuccessAt": "2026-07-20T21:37:45.000Z",
            "computedAt": "2026-07-20T23:39:13+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-21T16:02:06.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T07:34:00.000Z",
            "retrievedAt": "2026-07-20T21:37:45.000Z",
            "lastAttemptAt": "2026-07-20T21:37:45.000Z",
            "lastSuccessAt": "2026-07-20T21:37:45.000Z",
            "computedAt": "2026-07-20T23:39:13+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-21T19:34:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T21:15:20.000Z",
            "retrievedAt": "2026-07-20T21:37:45.000Z",
            "lastAttemptAt": "2026-07-20T21:37:45.000Z",
            "lastSuccessAt": "2026-07-20T21:37:45.000Z",
            "computedAt": "2026-07-20T23:39:13+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-21T09:15:20.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T21:34:39.000Z",
            "retrievedAt": "2026-07-20T21:37:45.000Z",
            "lastAttemptAt": "2026-07-20T21:37:45.000Z",
            "lastSuccessAt": "2026-07-20T21:37:45.000Z",
            "computedAt": "2026-07-20T23:39:13+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T03:34:39.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (7 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (7 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T21:38:08.000Z",
            "retrievedAt": "2026-07-20T21:41:44.649Z",
            "lastAttemptAt": "2026-07-20T21:41:44.649Z",
            "lastSuccessAt": "2026-07-20T21:41:44.649Z",
            "computedAt": "2026-07-20T23:39:13+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T03:38:08.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-20T23:39:13+02:00",
        "latest": [
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "731217700f0b24708eacd1a6fffeecd7c0ed14835d6eeafa28dc9b02b95bf9f2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "ea40d839730dac0e155b771a52c4f85f994a99b157d6448eb9ff8f5a5aba4d60",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "0248be3376a7f85a133a9c999dff063a06e9b1d1cc3628f05a5b388f11de26cc",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "854366d452f5c74ae0a8fa093390519dc053be3fa9f1999c4f96910f8dbf742f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "2c67d84d1e94baae47965e112cb044a2c07d6477ea4bb2b117bdde4fe1f8c243",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "1ff6e13d845d22c8a2ec3c190b09dc2b46eeba1d70a5d3e61404985abc8dd875",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "ea1284f26424619aa1596f93fe9fafb8b435977e67347b95156fdbc969c43827",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "581cf000762a48c489431164011c66206ddf231173d29f1fa590a7539bebf02e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "bf539fb39252004477c8d15aac0ff8967dbfc8e1092763536937efb21415c6ed"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T001204+0200-1d442ff72820-29783097005-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-20T22:13:16.778Z",
      "computedAt": "2026-07-21T00:12:04+02:00",
      "gitSha": "1d442ff7282099820a7437f1f3beeccd6545d811",
      "previousFrameHash": "bf539fb39252004477c8d15aac0ff8967dbfc8e1092763536937efb21415c6ed",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29783097005",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "0312c2d7c182ddbccff0d2d63dbae3f00c311496a5b638d534fdac2fa11282e6",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "8f9762077f4d066eaa29159f13cb3335c046c2416ade46679020c5f003c05d0a",
          "bytes": 1104147,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ef2bf4a5d9ed7e76d721508a2c19840496db13b000fc45ef23bff7bab414e41a",
          "bytes": 3282610,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "b5c615a0493702d84a26c43bc1da87de316516756ec22d24656b61e85322ace9",
          "bytes": 582442,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "86c928b7a6ad742687417463130b30ec1e8552ceb0e82a80f1d19df17953497d",
          "bytes": 543054,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "d17119e2612d2e7a979d5e8a6f3d3544a7031793a92a4959c822c156602860ed",
          "bytes": 27870,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "6577ca9eb97d9aa8d253328faeb800ab87fdba0dc40cd2628051ff584ca84ab8",
          "bytes": 15036,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "66c4aca680a157609baa18b7423770388682505bb2e1174e93af252d01099c08",
          "bytes": 231809,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "44704fc436d365bd3e7442f758c7043826f521952c802efa4991c5bc041dff30",
          "bytes": 151294,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "dc75bf85fd0e222e50127cf6ebacffff279a474768839203bf4b7f4c9e9e6e46",
          "bytes": 15527,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "e2129950e6a558d0da334c28e063a16f2db43b9b5bab5eb61309d84d7b3751ae",
          "bytes": 7348,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "0312e843797a45957c8e6fd13688b15ad128298427f90e42ad2b4f82ae03bb6c",
          "bytes": 806956,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-20T22:12:04.000Z:55a49b870d16",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-20T22:12:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T22:08:16.000Z",
          "retrievedAt": "2026-07-20T22:13:16.778Z",
          "computedAt": "2026-07-20T22:12:04.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.30708772802867,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "55a49b870d16404f12fc219d1c95aa2dd5a4c43073e763c760eeee58691eab08",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-20T22:12:04.000Z:4e758622f5bd",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-20T22:12:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T22:07:21.000Z",
          "retrievedAt": "2026-07-20T22:07:55.000Z",
          "computedAt": "2026-07-20T22:12:04.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4e758622f5bd1201c9ce7ce99e83648ae77e47d5f7d938a0619270fc86b54c20",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-20T22:12:04.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-20T22:12:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T07:34:00.000Z",
          "retrievedAt": "2026-07-20T22:07:55.000Z",
          "computedAt": "2026-07-20T22:12:04.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-20T22:12:04.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-20T22:12:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T04:02:06.000Z",
          "retrievedAt": "2026-07-20T22:07:55.000Z",
          "computedAt": "2026-07-20T22:12:04.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-20T22:12:04.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-20T22:12:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-20T21:15:20.000Z",
          "retrievedAt": "2026-07-20T22:07:55.000Z",
          "computedAt": "2026-07-20T22:12:04.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T00:12:04+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T04:02:06.000Z",
            "retrievedAt": "2026-07-20T22:07:55.000Z",
            "lastAttemptAt": "2026-07-20T22:07:55.000Z",
            "lastSuccessAt": "2026-07-20T22:07:55.000Z",
            "computedAt": "2026-07-21T00:12:04+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-21T16:02:06.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T07:34:00.000Z",
            "retrievedAt": "2026-07-20T22:07:55.000Z",
            "lastAttemptAt": "2026-07-20T22:07:55.000Z",
            "lastSuccessAt": "2026-07-20T22:07:55.000Z",
            "computedAt": "2026-07-21T00:12:04+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-21T19:34:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T21:15:20.000Z",
            "retrievedAt": "2026-07-20T22:07:55.000Z",
            "lastAttemptAt": "2026-07-20T22:07:55.000Z",
            "lastSuccessAt": "2026-07-20T22:07:55.000Z",
            "computedAt": "2026-07-21T00:12:04+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-21T09:15:20.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T22:07:21.000Z",
            "retrievedAt": "2026-07-20T22:07:55.000Z",
            "lastAttemptAt": "2026-07-20T22:07:55.000Z",
            "lastSuccessAt": "2026-07-20T22:07:55.000Z",
            "computedAt": "2026-07-21T00:12:04+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T04:07:21.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (7 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (7 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-20T22:08:16.000Z",
            "retrievedAt": "2026-07-20T22:13:16.778Z",
            "lastAttemptAt": "2026-07-20T22:13:16.778Z",
            "lastSuccessAt": "2026-07-20T22:13:16.778Z",
            "computedAt": "2026-07-21T00:12:04+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T04:08:16.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T00:12:04+02:00",
        "latest": [
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "56de784c54098db90e2a63231a1a12dc189b515a545272d7fb71854770a65c1b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "a55c236b7d293ec28c66942672a3709f49e4dd27c490e557d0b15bace24a9f6f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "09159f7e7bf70000213295b1f431a8846744c5d73b956c5759718f8c54c98871",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "7478aa6a571037c0c6732a11e78f94922dc01f94ddd1bb293f4a18c70cf58907",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "7698678fcfe8d79d72877bae2b95b55d67a43be5f38c94a404b6d2b9fbdab0c4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "6948e8379f09901d94385b4fde6078875c6e3834d28b600e09b9fe1a0b956602",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "b869beeefbd9a5911b5571e81ea8e3d44b1ee7158fcf7b20094cefc4c2e1d4df",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "113c1dc124afef613e24d6541a3fb02c5b159a3bc7cc448044a7bf91914d119e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "29d1cf11e9d8342b68f719f2e3d318a14db8a94c56c50af3c199ee06b7af1fcd"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T121305+0200-64066298f380-29821394267-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T10:14:17.795Z",
      "computedAt": "2026-07-21T12:13:05+02:00",
      "gitSha": "64066298f380b0d554741a5c14f0c4e571cb2111",
      "previousFrameHash": "29d1cf11e9d8342b68f719f2e3d318a14db8a94c56c50af3c199ee06b7af1fcd",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29821394267",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "0312c2d7c182ddbccff0d2d63dbae3f00c311496a5b638d534fdac2fa11282e6",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "dd9797f828b6126a37fdd3ecd0b445afea8bf83f733d91b609982a34ed41d471",
          "bytes": 1104147,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ef2bf4a5d9ed7e76d721508a2c19840496db13b000fc45ef23bff7bab414e41a",
          "bytes": 3282610,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "b340eb4c6236d3d0e174e4e25661751a81608ac16f9282a026649c66bf3a7fbd",
          "bytes": 582442,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "6cfbff1ac3931d38d44a1dc52415c8f8c5b4ee92069964b4101d2fa46f93bb09",
          "bytes": 543054,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "d17119e2612d2e7a979d5e8a6f3d3544a7031793a92a4959c822c156602860ed",
          "bytes": 27870,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "47e553c72c6912fba6c9accbb204e2dc8ca9f9affb1c0c1e07688b7384477911",
          "bytes": 15036,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "90d792ebe23924c2ca478caf0046aae07a243e8b66f79ff8669ea49624543db3",
          "bytes": 231809,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "b6e62c8685e1785151fe5323147c1a9068c20e4b3e54cfc0fe3675328495fccf",
          "bytes": 131010,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "7eca1324779d8feda9a6c4c415d0f744bc6c1d50f6576fe04e84afab264a49ab",
          "bytes": 15563,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "66e200786dbed863f073aa9aec1916947fa50b5770577b098fef94db6334d440",
          "bytes": 7382,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "8590d1e7f7616e2cae657c59b536212d710ff67b699ad39f3a46600a3a478a8b",
          "bytes": 825302,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T10:13:05.000Z:2c90a803d076",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T10:13:05.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T09:59:56.000Z",
          "retrievedAt": "2026-07-21T10:14:17.795Z",
          "computedAt": "2026-07-21T10:13:05.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.32074603083818,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "2c90a803d0766246b1d14df493f294fe1405892c8c4db72953ce614278022300",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T10:13:05.000Z:4e758622f5bd",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T10:13:05.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T09:30:00.000Z",
          "retrievedAt": "2026-07-21T09:59:35.000Z",
          "computedAt": "2026-07-21T10:13:05.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4e758622f5bd1201c9ce7ce99e83648ae77e47d5f7d938a0619270fc86b54c20",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T10:13:05.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T10:13:05.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T07:53:00.000Z",
          "retrievedAt": "2026-07-21T09:59:35.000Z",
          "computedAt": "2026-07-21T10:13:05.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T10:13:05.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T10:13:05.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T09:59:35.000Z",
          "computedAt": "2026-07-21T10:13:05.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T10:13:05.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T10:13:05.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:19:03.000Z",
          "retrievedAt": "2026-07-21T09:59:35.000Z",
          "computedAt": "2026-07-21T10:13:05.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T12:13:05+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T09:59:35.000Z",
            "lastAttemptAt": "2026-07-21T09:59:35.000Z",
            "lastSuccessAt": "2026-07-21T09:59:35.000Z",
            "computedAt": "2026-07-21T12:13:05+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T07:53:00.000Z",
            "retrievedAt": "2026-07-21T09:59:35.000Z",
            "lastAttemptAt": "2026-07-21T09:59:35.000Z",
            "lastSuccessAt": "2026-07-21T09:59:35.000Z",
            "computedAt": "2026-07-21T12:13:05+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T19:53:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:19:03.000Z",
            "retrievedAt": "2026-07-21T09:59:35.000Z",
            "lastAttemptAt": "2026-07-21T09:59:35.000Z",
            "lastSuccessAt": "2026-07-21T09:59:35.000Z",
            "computedAt": "2026-07-21T12:13:05+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-21T16:19:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T09:30:00.000Z",
            "retrievedAt": "2026-07-21T09:59:35.000Z",
            "lastAttemptAt": "2026-07-21T09:59:35.000Z",
            "lastSuccessAt": "2026-07-21T09:59:35.000Z",
            "computedAt": "2026-07-21T12:13:05+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T15:30:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T09:59:56.000Z",
            "retrievedAt": "2026-07-21T10:14:17.795Z",
            "lastAttemptAt": "2026-07-21T10:14:17.795Z",
            "lastSuccessAt": "2026-07-21T10:14:17.795Z",
            "computedAt": "2026-07-21T12:13:05+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T15:59:56.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T12:13:05+02:00",
        "latest": [
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "8823bc3cfc843dc7bc6a9f898f7d8de0079bcf3fc1a1f873d9bdc66d3dfc53f3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "8cd3bfe6f81436e163abeeb5539f34363c0b1143c41131e4e93c78ba7365df5f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "74473719b2beea75e9b1a2ed63e92d3060f4d50c20cf060f2f8044506ab43281",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "350173a0e6b04eceec43e15a12fda7d41fe981ff66c006c9e3c5412d25a0b583",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "e1c92e69c2e3834dbfd3e0c0908c860485e663217d4e414858d8b37a80a2ad77",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "49707448dd14b9ce135e0851d6555445e088caee9cbc9bcead47c637bbd47df1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "22660b20276b970b1c0632e44dc5ee03274cb1905e19cd4e7542201e9c565c8e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "e2aa5e4e76fd66eed219e4529b44bfbab250662a8017dc32c15e5491f0129fc8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "e0881986f1139cdee1cac250051bfaa7f7128269ca379513d750c2bdd81f6572"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T122501+0200-67dfe9abc21c-29822160320-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T10:26:13.614Z",
      "computedAt": "2026-07-21T12:25:01+02:00",
      "gitSha": "67dfe9abc21c8dcc21128276f98806f82715af94",
      "previousFrameHash": "e0881986f1139cdee1cac250051bfaa7f7128269ca379513d750c2bdd81f6572",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29822160320",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "0312c2d7c182ddbccff0d2d63dbae3f00c311496a5b638d534fdac2fa11282e6",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "e79fb547190c29a343a2d17cf1aed1d1afa75c47d18b826391d94ec1685016fd",
          "bytes": 1104147,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ef2bf4a5d9ed7e76d721508a2c19840496db13b000fc45ef23bff7bab414e41a",
          "bytes": 3282610,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "c6bae119e31be81ed6fdc65cc9dfb6d269371b5cf1070a039d7d19c369cfebfe",
          "bytes": 582442,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "ced56505c68db33d8d24055f943813192ebfea7dac08e2cbe7a0e8ce52c4d470",
          "bytes": 543054,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "d17119e2612d2e7a979d5e8a6f3d3544a7031793a92a4959c822c156602860ed",
          "bytes": 27870,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "bbdea47f74c44b25a3b0a1719f21be701fe7d7ad047b42693b26ea74cf4364bf",
          "bytes": 15036,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "a1a7fdacdea55b40d4f3b75b7dd5fd47d1f13c8c61ee37dfecdcb6974ab05feb",
          "bytes": 231809,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "b0cec78436bd03ebd5ccf04a48f9de7767df4a7fdcc40ba58035ae02fbf9d29a",
          "bytes": 131010,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "5e0bdb0259e613246a8661cb25ccb2939e1436d30d90cb94daecd728fe1cf19f",
          "bytes": 15558,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "51975e18ee140a6a6e2f5af8609e787482438ea7ec089e515a04d2595b5faa22",
          "bytes": 7382,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "ea963af8b2dd0fadaf4e3e44e0e303f24ef67e066b92829dd669eff64e280183",
          "bytes": 834725,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T10:25:01.000Z:24b1e1c35e10",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T10:25:01.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:15:07.000Z",
          "retrievedAt": "2026-07-21T10:26:13.614Z",
          "computedAt": "2026-07-21T10:25:01.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.32074603083818,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "24b1e1c35e1073e17db05e922f960a63ad6dca5d25a8dd0fe8576b375561d260",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T10:25:01.000Z:4e758622f5bd",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T10:25:01.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:01:20.000Z",
          "retrievedAt": "2026-07-21T10:21:25.000Z",
          "computedAt": "2026-07-21T10:25:01.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4e758622f5bd1201c9ce7ce99e83648ae77e47d5f7d938a0619270fc86b54c20",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T10:25:01.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T10:25:01.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T10:21:25.000Z",
          "computedAt": "2026-07-21T10:25:01.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T10:25:01.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T10:25:01.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T10:21:25.000Z",
          "computedAt": "2026-07-21T10:25:01.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T10:25:01.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T10:25:01.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
          "retrievedAt": "2026-07-21T10:21:25.000Z",
          "computedAt": "2026-07-21T10:25:01.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T12:25:01+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T10:21:25.000Z",
            "lastAttemptAt": "2026-07-21T10:21:25.000Z",
            "lastSuccessAt": "2026-07-21T10:21:25.000Z",
            "computedAt": "2026-07-21T12:25:01+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T10:21:25.000Z",
            "lastAttemptAt": "2026-07-21T10:21:25.000Z",
            "lastSuccessAt": "2026-07-21T10:21:25.000Z",
            "computedAt": "2026-07-21T12:25:01+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
            "retrievedAt": "2026-07-21T10:21:25.000Z",
            "lastAttemptAt": "2026-07-21T10:21:25.000Z",
            "lastSuccessAt": "2026-07-21T10:21:25.000Z",
            "computedAt": "2026-07-21T12:25:01+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-21T22:16:42.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:01:20.000Z",
            "retrievedAt": "2026-07-21T10:21:25.000Z",
            "lastAttemptAt": "2026-07-21T10:21:25.000Z",
            "lastSuccessAt": "2026-07-21T10:21:25.000Z",
            "computedAt": "2026-07-21T12:25:01+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T16:01:20.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:15:07.000Z",
            "retrievedAt": "2026-07-21T10:26:13.614Z",
            "lastAttemptAt": "2026-07-21T10:26:13.614Z",
            "lastSuccessAt": "2026-07-21T10:26:13.614Z",
            "computedAt": "2026-07-21T12:25:01+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T16:15:07.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T12:25:01+02:00",
        "latest": [
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "b7bca88b62c311e7e6aa0199bd421958601b62a19029cf64abff3804d1e75b20",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "7aa012e25db59baa50538c796bf4e20b5f450b6a751ed5902fe432495ec5a996",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "93b3b459b0fda60abbe2d96cd1913bc4bb4b1ba280480341892b22f4cc7c9305",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "f4a51fb24e76f8b3806b95ff6b41eb24fc8870b5edcb70b11f2731222cda56e7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "0058c4be71b36c3e12b1d080d91a4721d787d4b62714bbb788db7b89097960b2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "ffd3c5bd5c175e53c299b4c72f34e3e81900884498c26d270cb87dfd9380d2ff",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "2ef0540e2adcd5330f0974a5ca9f1bc16062b8a7887eff722e04e8a65d5e9103",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "fc14cac4beeefd44d24f1b77387dc9281745d626dff4c7fdecfde1b3d031fcad",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "ad96423e07b100a3b5161fbefb1903d7c5c12c4ceceadd53d511b18d9a337c3c"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T123502+0200-77200d5cd252-29822798034-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T10:36:11.097Z",
      "computedAt": "2026-07-21T12:35:02+02:00",
      "gitSha": "77200d5cd2522dddac6077174d47f7b78e8ef4b8",
      "previousFrameHash": "ad96423e07b100a3b5161fbefb1903d7c5c12c4ceceadd53d511b18d9a337c3c",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29822798034",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "0312c2d7c182ddbccff0d2d63dbae3f00c311496a5b638d534fdac2fa11282e6",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "34a47fa0f876898c5e2676be8c88b9b18dec07b02a107b2f1b4a0dbaee19b55e",
          "bytes": 1104147,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ef2bf4a5d9ed7e76d721508a2c19840496db13b000fc45ef23bff7bab414e41a",
          "bytes": 3282610,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "b62c7431d3f4e391d656ca78c7197cd9a1e2baa5e23cc54138114b583b1023b7",
          "bytes": 582442,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "abdb21c5268ab036ad3f591e8c0cdb69d30f561505af2202939423f171a13f34",
          "bytes": 543054,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "d17119e2612d2e7a979d5e8a6f3d3544a7031793a92a4959c822c156602860ed",
          "bytes": 27870,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "458695fd1b58122ccfca20b53e1f0b0db82a3c427ea930eb9b8b5f0467db0275",
          "bytes": 15036,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "3482ab8e1c47ce72e797909079c16a888d5c62520883dc0600494a087ccf9cd2",
          "bytes": 231809,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "c34e6fa3f9d1a3c89c6e81c85c68506038428d4524bea9d7fc45e76bd0af3403",
          "bytes": 131010,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "b3e3e4a9378a0bdaacb38b4a48bac67038b50e958c0e4e17a90de1077ee9f2cd",
          "bytes": 15558,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "1ea8f8393b804b6d955ac4ebb1629d3464bc9835a8bd0b4c77cbcec25fc6a50d",
          "bytes": 7382,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "89f3b13891e9975d9a66f918aa505d09089bdfd1fc1be4a5fa2cce13e53730da",
          "bytes": 844148,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T10:35:02.000Z:a3f1793d2da5",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T10:35:02.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:30:35.000Z",
          "retrievedAt": "2026-07-21T10:36:11.097Z",
          "computedAt": "2026-07-21T10:35:02.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.32074603083818,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "a3f1793d2da5d6948d4fd602e9fe7926f7d58b8778fe9af879b07f0916e9e969",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T10:35:02.000Z:4e758622f5bd",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T10:35:02.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:01:20.000Z",
          "retrievedAt": "2026-07-21T10:21:25.000Z",
          "computedAt": "2026-07-21T10:35:02.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4e758622f5bd1201c9ce7ce99e83648ae77e47d5f7d938a0619270fc86b54c20",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T10:35:02.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T10:35:02.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T10:21:25.000Z",
          "computedAt": "2026-07-21T10:35:02.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T10:35:02.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T10:35:02.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T10:21:25.000Z",
          "computedAt": "2026-07-21T10:35:02.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T10:35:02.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T10:35:02.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
          "retrievedAt": "2026-07-21T10:21:25.000Z",
          "computedAt": "2026-07-21T10:35:02.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T12:35:02+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T10:21:25.000Z",
            "lastAttemptAt": "2026-07-21T10:21:25.000Z",
            "lastSuccessAt": "2026-07-21T10:21:25.000Z",
            "computedAt": "2026-07-21T12:35:02+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T10:21:25.000Z",
            "lastAttemptAt": "2026-07-21T10:21:25.000Z",
            "lastSuccessAt": "2026-07-21T10:21:25.000Z",
            "computedAt": "2026-07-21T12:35:02+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
            "retrievedAt": "2026-07-21T10:21:25.000Z",
            "lastAttemptAt": "2026-07-21T10:21:25.000Z",
            "lastSuccessAt": "2026-07-21T10:21:25.000Z",
            "computedAt": "2026-07-21T12:35:02+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-21T22:16:42.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:01:20.000Z",
            "retrievedAt": "2026-07-21T10:21:25.000Z",
            "lastAttemptAt": "2026-07-21T10:21:25.000Z",
            "lastSuccessAt": "2026-07-21T10:21:25.000Z",
            "computedAt": "2026-07-21T12:35:02+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T16:01:20.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:30:35.000Z",
            "retrievedAt": "2026-07-21T10:36:11.097Z",
            "lastAttemptAt": "2026-07-21T10:36:11.097Z",
            "lastSuccessAt": "2026-07-21T10:36:11.097Z",
            "computedAt": "2026-07-21T12:35:02+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T16:30:35.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T12:35:02+02:00",
        "latest": [
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "4f8e765465db111cb8ddc079453c7fdb93c5c1eb5f568421f2844de5728423de",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "9f8e978462671f7c70105729cf535f5c5823cb0b1f3dbddb6062a8eee3e524f6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "4af789780b693e3a68e80f969768c187b069a3c6893f6044d45beb8078a243a1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "03b6b9ebb1d1e4aaa5d7e29223b5cfa59168074004f58226ed075385f0d4ffb4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "f50a280eb400f7b7ef927ddc58b8424be9a39f8333e8a6c98d7383416511d92d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "1797f4fa7a01d0f785b84eb9a9cae2fe106556424dccf0b24613570425f76874",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "394e4d6ead7882893fb8b6f0ab91e783eb29f2b6679ff3b1a197fc264d7b2ee7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "fd67b48bd88c14c42c47d7676d2a1b656856c6ff29f3298a607f58d210dc0c0d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "343498dc93108defac66027843cc7ffe923007158590b7860ad8b2b9ce95a08a"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T124459+0200-c316e84e2895-29823441159-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T10:46:09.597Z",
      "computedAt": "2026-07-21T12:44:59+02:00",
      "gitSha": "c316e84e28952c991916688cf419e266901fc4e4",
      "previousFrameHash": "343498dc93108defac66027843cc7ffe923007158590b7860ad8b2b9ce95a08a",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29823441159",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "0312c2d7c182ddbccff0d2d63dbae3f00c311496a5b638d534fdac2fa11282e6",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "425313f1ec86e8c3f60bd847acfe6fffd7fbcfedc24b1e81b29588eba2fa4151",
          "bytes": 1104147,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ef2bf4a5d9ed7e76d721508a2c19840496db13b000fc45ef23bff7bab414e41a",
          "bytes": 3282610,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "7a72335cbe8d5dd5d301a74db882f8c287bcde853c153ca1793ddebf8106875f",
          "bytes": 582442,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "351117b3f6ce057f49375a1fc37ff6f37be7fc70f9f01bcdc978628f6fe5fe9f",
          "bytes": 543054,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "d17119e2612d2e7a979d5e8a6f3d3544a7031793a92a4959c822c156602860ed",
          "bytes": 27870,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "e6156cbeb35340664bf6bc34584bdab92651cfd5a5b63f82ce3ea01a30559997",
          "bytes": 15036,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "4e1abcf979e5e91fa0e7c27dcf3165c7ad4ff02220c1c13fd38a1ec6ce9be6da",
          "bytes": 231809,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "cafdb5d456d4a9b949bf9c6ad5f805ac6d1c22045d3138864dbf615a0fc6d65c",
          "bytes": 131010,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "07933e0540e97f150d9fc4c02538fae051118567382a3ed3f98f1e9965d72717",
          "bytes": 15559,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "69e81c4a116959cee74e30c9740fbb1298434eb6c65582c5c1112574a99a7f01",
          "bytes": 7381,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "562bf3d826411763bc58f947496518a83adfe0f7b76ff20e71b310eeb6dafc17",
          "bytes": 853571,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T10:44:59.000Z:fa1452da2654",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T10:44:59.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:45:19.000Z",
          "retrievedAt": "2026-07-21T10:46:09.597Z",
          "computedAt": "2026-07-21T10:44:59.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.32074603083818,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "fa1452da265432f1afb2d61487535ee5e392f6b954faa877fa1803340d8803a1",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T10:44:59.000Z:4e758622f5bd",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T10:44:59.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:32:45.000Z",
          "retrievedAt": "2026-07-21T10:36:25.000Z",
          "computedAt": "2026-07-21T10:44:59.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4e758622f5bd1201c9ce7ce99e83648ae77e47d5f7d938a0619270fc86b54c20",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T10:44:59.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T10:44:59.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T10:36:25.000Z",
          "computedAt": "2026-07-21T10:44:59.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T10:44:59.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T10:44:59.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T10:36:25.000Z",
          "computedAt": "2026-07-21T10:44:59.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T10:44:59.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T10:44:59.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
          "retrievedAt": "2026-07-21T10:36:25.000Z",
          "computedAt": "2026-07-21T10:44:59.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T12:44:59+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T10:36:25.000Z",
            "lastAttemptAt": "2026-07-21T10:36:25.000Z",
            "lastSuccessAt": "2026-07-21T10:36:25.000Z",
            "computedAt": "2026-07-21T12:44:59+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T10:36:25.000Z",
            "lastAttemptAt": "2026-07-21T10:36:25.000Z",
            "lastSuccessAt": "2026-07-21T10:36:25.000Z",
            "computedAt": "2026-07-21T12:44:59+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
            "retrievedAt": "2026-07-21T10:36:25.000Z",
            "lastAttemptAt": "2026-07-21T10:36:25.000Z",
            "lastSuccessAt": "2026-07-21T10:36:25.000Z",
            "computedAt": "2026-07-21T12:44:59+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-21T22:16:42.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:32:45.000Z",
            "retrievedAt": "2026-07-21T10:36:25.000Z",
            "lastAttemptAt": "2026-07-21T10:36:25.000Z",
            "lastSuccessAt": "2026-07-21T10:36:25.000Z",
            "computedAt": "2026-07-21T12:44:59+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T16:32:45.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:45:19.000Z",
            "retrievedAt": "2026-07-21T10:46:09.597Z",
            "lastAttemptAt": "2026-07-21T10:46:09.597Z",
            "lastSuccessAt": "2026-07-21T10:46:09.597Z",
            "computedAt": "2026-07-21T12:44:59+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T16:45:19.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T12:44:59+02:00",
        "latest": [
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "54b489ea0148b0662a1e6fa863b0dbe446d4f7bdcc82886bec090cd5baead36f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "9cac4f46967a170e1b43d0f962addafa8942045241f009fcee52e3fc21c97620",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "5dc5c13ea833174fac936ccaed7af009dd0d464ecf6bc019a553c943250414ce",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "193e770be2feacaa6abd4363ee71ecaf304efb3e53f589877a2eeec4307b78e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "0b71cf18f82f95ea902861863e69633a587f994922637db01bf84dca55ba314c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "61406c0ba9e92918ac9e554b72da26ad259fbc2c9a8ba45b0e5d0168e7577b59",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "e3fb1dff7a51a5ef9801e52cf4dfcd7273f88a18f6bd93b124478b11f725a161",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "5a103f20cbb4e58ba717be9d4cafea7c649073c7553d7c23929e0ea35b4cd728",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "d5448fe83061b3013d3803102bb026a317f8eb38c6845c76f40ccb9a37a7b596"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T125245+0200-5c5e6cd64364-29823945530-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T10:54:02.793Z",
      "computedAt": "2026-07-21T12:52:45+02:00",
      "gitSha": "5c5e6cd6436475ce3156e62b864bbc5891de397b",
      "previousFrameHash": "d5448fe83061b3013d3803102bb026a317f8eb38c6845c76f40ccb9a37a7b596",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29823945530",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "0312c2d7c182ddbccff0d2d63dbae3f00c311496a5b638d534fdac2fa11282e6",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "c30ae15cb0f12ba7a5efe2c0e7926f9b6c928c7f6dfeb8ed5f52f37001310681",
          "bytes": 1104147,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ef2bf4a5d9ed7e76d721508a2c19840496db13b000fc45ef23bff7bab414e41a",
          "bytes": 3282610,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "5a4e94c673c943db825f5bafe60af0dfc9b3cb89805fc105632673e53baa529b",
          "bytes": 582442,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "6d8247d635255d308368f916647155dac2c57545be66cd6cba5835e43410cf94",
          "bytes": 543054,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "d17119e2612d2e7a979d5e8a6f3d3544a7031793a92a4959c822c156602860ed",
          "bytes": 27870,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "fd81da3d8519173972a5243e3aaacfb45df945708ce4902683637f870e48c7c3",
          "bytes": 15036,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "6274065c18c6d5b035fb7ec163dfbe45d246fb0babf2326eb917114ec93c6295",
          "bytes": 231809,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "bab147b114cca9b552ad420f7c6cd648395643f98d92801e42166fc19853f3c9",
          "bytes": 131010,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "c4e92f9fb0125180e78b180daa4964727c2bb4a47a2bc991bec0a0c6f355930d",
          "bytes": 15562,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "6645b57785c1580936852b0266d336afb555e54aabfafe27e6ea9c08d4f5a4d2",
          "bytes": 7382,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "f5d37af7ee23eac9e959dcc4de0467d7433bc0f704ca49c2b7496de0ce255f6e",
          "bytes": 862994,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T10:52:45.000Z:66d08de2dee5",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T10:52:45.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:45:19.000Z",
          "retrievedAt": "2026-07-21T10:54:02.793Z",
          "computedAt": "2026-07-21T10:52:45.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.32074603083818,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "66d08de2dee54ee5321360303029c7465960e9d4b30896b196a6e66b6764d390",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T10:52:45.000Z:4e758622f5bd",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T10:52:45.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:32:45.000Z",
          "retrievedAt": "2026-07-21T10:51:35.000Z",
          "computedAt": "2026-07-21T10:52:45.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4e758622f5bd1201c9ce7ce99e83648ae77e47d5f7d938a0619270fc86b54c20",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T10:52:45.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T10:52:45.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T10:51:35.000Z",
          "computedAt": "2026-07-21T10:52:45.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T10:52:45.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T10:52:45.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T10:51:35.000Z",
          "computedAt": "2026-07-21T10:52:45.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T10:52:45.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T10:52:45.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
          "retrievedAt": "2026-07-21T10:51:35.000Z",
          "computedAt": "2026-07-21T10:52:45.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T12:52:45+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T10:51:35.000Z",
            "lastAttemptAt": "2026-07-21T10:51:35.000Z",
            "lastSuccessAt": "2026-07-21T10:51:35.000Z",
            "computedAt": "2026-07-21T12:52:45+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T10:51:35.000Z",
            "lastAttemptAt": "2026-07-21T10:51:35.000Z",
            "lastSuccessAt": "2026-07-21T10:51:35.000Z",
            "computedAt": "2026-07-21T12:52:45+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
            "retrievedAt": "2026-07-21T10:51:35.000Z",
            "lastAttemptAt": "2026-07-21T10:51:35.000Z",
            "lastSuccessAt": "2026-07-21T10:51:35.000Z",
            "computedAt": "2026-07-21T12:52:45+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-21T22:16:42.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:32:45.000Z",
            "retrievedAt": "2026-07-21T10:51:35.000Z",
            "lastAttemptAt": "2026-07-21T10:51:35.000Z",
            "lastSuccessAt": "2026-07-21T10:51:35.000Z",
            "computedAt": "2026-07-21T12:52:45+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T16:32:45.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:45:19.000Z",
            "retrievedAt": "2026-07-21T10:54:02.793Z",
            "lastAttemptAt": "2026-07-21T10:54:02.793Z",
            "lastSuccessAt": "2026-07-21T10:54:02.793Z",
            "computedAt": "2026-07-21T12:52:45+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T16:45:19.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T12:52:45+02:00",
        "latest": [
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "5b64a21bece47cfd8e25928f38917591445a880a16bd57f5cf054b11e080445b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "bbff9865e4fe2bf453553d33cf52f7ec4da4c901420ebfd9abc723c004541ea8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "392b1f95fa59e2ed47979f9e467ea572c6e00e919a21aef17ffb9e583a27d3b3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "51f76ac44b430cac172e735c0e191f805f05a1bd7d1d4143acd3a78a78a3ba1a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "97918b9f51bbb67de857946a9f9858691faf872dd7de4c0b30912db510c9b2d8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "7b44395f3952e010a37500162b35292dd409966cb1466e9a96e8eb00cea594df",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "e413949af1b49b40b27dfc59c1c3c988b5fb61a26b63772357b6cb08703400ec",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "8679fde88f7f512e1266f0c722635f1bb4efebfd78f21e56206943e6fbe8d4ae",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "02ff9bf2aebd7b3ea0cb589ee07303bc99b56c07e59bd7235bb6946a21382383"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T125935+0200-f6b080cbaed3-29824374830-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T11:00:58.982Z",
      "computedAt": "2026-07-21T12:59:35+02:00",
      "gitSha": "f6b080cbaed3b6d2ff2ff244040992b247babc2a",
      "previousFrameHash": "02ff9bf2aebd7b3ea0cb589ee07303bc99b56c07e59bd7235bb6946a21382383",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29824374830",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "0312c2d7c182ddbccff0d2d63dbae3f00c311496a5b638d534fdac2fa11282e6",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "0adf93fc20d52bd49c39fa3163378c94273946fb7bd50625f2956ac55f564e2a",
          "bytes": 1104147,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ef2bf4a5d9ed7e76d721508a2c19840496db13b000fc45ef23bff7bab414e41a",
          "bytes": 3282610,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "c147421dcdceb24ab33f9a7dce750bb05b1e5338d968de54cf98b0846ddc2cdb",
          "bytes": 582442,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "2604f72d4ee4ca6dc93014c1d9cdd3f2ad2bc88dc0a2e221af2dd56bd6e70a32",
          "bytes": 543054,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "d17119e2612d2e7a979d5e8a6f3d3544a7031793a92a4959c822c156602860ed",
          "bytes": 27870,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "f3f58976460fcbb74ab90f1a31f77640e66668dbba44dcb587fe7bffa239e13f",
          "bytes": 15036,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "493a19fe0bbec0093fd2fdded7481de39b1cc88d021a2c32b188e1ca827c0a36",
          "bytes": 231809,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "80d6d33e0ad4d2503d33c783a29093599f11374731569afd51cfaacca4a27341",
          "bytes": 131010,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "ebd4f3edeeb7aab4967a4959995cc572ceb97adcdf9d69159114bc86fb257f5a",
          "bytes": 15562,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "2dfe8a713ffd23cf4826868926e16145b52569da8562ca31a56cea177248967b",
          "bytes": 7382,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "f37ddb84845b1cd80ecee47ca0ce43e97bf1efcec94904f9b99e774b51c701d6",
          "bytes": 872417,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T10:59:35.000Z:385a6ed40b14",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T10:59:35.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:45:19.000Z",
          "retrievedAt": "2026-07-21T11:00:58.982Z",
          "computedAt": "2026-07-21T10:59:35.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.32074603083818,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "385a6ed40b141297e788739710cbb5f09fc98aedc1947f01e827635e5a24e94d",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T10:59:35.000Z:4e758622f5bd",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T10:59:35.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:32:45.000Z",
          "retrievedAt": "2026-07-21T10:51:35.000Z",
          "computedAt": "2026-07-21T10:59:35.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4e758622f5bd1201c9ce7ce99e83648ae77e47d5f7d938a0619270fc86b54c20",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T10:59:35.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T10:59:35.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T10:51:35.000Z",
          "computedAt": "2026-07-21T10:59:35.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T10:59:35.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T10:59:35.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T10:51:35.000Z",
          "computedAt": "2026-07-21T10:59:35.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T10:59:35.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T10:59:35.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
          "retrievedAt": "2026-07-21T10:51:35.000Z",
          "computedAt": "2026-07-21T10:59:35.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T12:59:35+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T10:51:35.000Z",
            "lastAttemptAt": "2026-07-21T10:51:35.000Z",
            "lastSuccessAt": "2026-07-21T10:51:35.000Z",
            "computedAt": "2026-07-21T12:59:35+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T10:51:35.000Z",
            "lastAttemptAt": "2026-07-21T10:51:35.000Z",
            "lastSuccessAt": "2026-07-21T10:51:35.000Z",
            "computedAt": "2026-07-21T12:59:35+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
            "retrievedAt": "2026-07-21T10:51:35.000Z",
            "lastAttemptAt": "2026-07-21T10:51:35.000Z",
            "lastSuccessAt": "2026-07-21T10:51:35.000Z",
            "computedAt": "2026-07-21T12:59:35+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-21T22:16:42.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:32:45.000Z",
            "retrievedAt": "2026-07-21T10:51:35.000Z",
            "lastAttemptAt": "2026-07-21T10:51:35.000Z",
            "lastSuccessAt": "2026-07-21T10:51:35.000Z",
            "computedAt": "2026-07-21T12:59:35+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T16:32:45.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:45:19.000Z",
            "retrievedAt": "2026-07-21T11:00:58.982Z",
            "lastAttemptAt": "2026-07-21T11:00:58.982Z",
            "lastSuccessAt": "2026-07-21T11:00:58.982Z",
            "computedAt": "2026-07-21T12:59:35+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T16:45:19.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T12:59:35+02:00",
        "latest": [
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "7eaeccde94655ee26b11fa17fa6bafe45a79665b239cebc3cfbf2319d346568c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "1d27368654bb1f5b1bab081a2c0fd898678f3a43d60abe482763a8c31bb08ee8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "fa0d855a62b2158bced5358fd4a405f6138ab9e00e69012696b710a4ed488934",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "ad50b3839f9e3d618d916101e687ba77ac0a0c88838c768bb608553ac338aa82",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "fca015598789b8617c01e860a0de0ba368875bd7927f7ef89b4ecb436ac9a78d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "8b27b730fbe5730e23cc7de928a0de8aebbd157a5bfcde9537627cc4c84810b9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "a2f09ea7e4599651bc7934f079590332ae81ffbe7fffeb8dace26c4498fc0160",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "aef50cf521f97e654139206aaa1c15cf8c6e62cea0d12fafff792c118739f107",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "cfc07784cb34591b3baab04a34166f8c14935c5f024f39ab23a40665299aead8"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T131355+0200-923c49ac63ea-29825315994-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T11:15:11.645Z",
      "computedAt": "2026-07-21T13:13:55+02:00",
      "gitSha": "923c49ac63ea4247d06a8804980573893531f6ce",
      "previousFrameHash": "cfc07784cb34591b3baab04a34166f8c14935c5f024f39ab23a40665299aead8",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29825315994",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "0312c2d7c182ddbccff0d2d63dbae3f00c311496a5b638d534fdac2fa11282e6",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "7962189924d4b53e71fd696a941a11815428b88579f0275b60632f231eaa457d",
          "bytes": 1104147,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ef2bf4a5d9ed7e76d721508a2c19840496db13b000fc45ef23bff7bab414e41a",
          "bytes": 3282610,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "bed986d88fe367349895f71f1c7e11fde642e4de39c45142bb9fca167d9252a5",
          "bytes": 582442,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "5cad7f03e088cb3eb23f735f71218ac7a70031a41cda66f9dc2044fc7cb60e61",
          "bytes": 543054,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "d17119e2612d2e7a979d5e8a6f3d3544a7031793a92a4959c822c156602860ed",
          "bytes": 27870,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "c1d7fc964fac8aade5464cdeb9586ecfb895cbf9288ace79e0f74d6272cb5724",
          "bytes": 15036,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "415c58aaba89d641f3a24131056d6e24e3529c16604f84dca619a2884de8e3c4",
          "bytes": 231809,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "3da6538507f4333e4bf0f123ed0a8c69ac55e26a2cad4b101b75fe2ef441e3dd",
          "bytes": 131032,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "d25d93cd34a96c4e73318819725b7c8a1c43257e65487828cebe809c75a9d952",
          "bytes": 15600,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "f6634eb68b9498360640fbea6773d7bee751206c3c7416593b6553b5284ef2e5",
          "bytes": 7422,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "89152b00068ee1e22e8afc9577db8edd88d3911ea113a4a7f5b1134f94093fc0",
          "bytes": 881842,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T11:13:55.000Z:c7a3fec21f5a",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T11:13:55.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T11:01:29.000Z",
          "retrievedAt": "2026-07-21T11:15:11.645Z",
          "computedAt": "2026-07-21T11:13:55.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 53.71975329757853,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "c7a3fec21f5af782037380b7bf187a568b52f9a39a7688edeed7da059d705bc4",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "degraded",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T11:13:55.000Z:4e758622f5bd",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T11:13:55.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T11:05:28.000Z",
          "retrievedAt": "2026-07-21T11:07:05.000Z",
          "computedAt": "2026-07-21T11:13:55.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4e758622f5bd1201c9ce7ce99e83648ae77e47d5f7d938a0619270fc86b54c20",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T11:13:55.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T11:13:55.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T11:07:05.000Z",
          "computedAt": "2026-07-21T11:13:55.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T11:13:55.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T11:13:55.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T11:07:05.000Z",
          "computedAt": "2026-07-21T11:13:55.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T11:13:55.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T11:13:55.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
          "retrievedAt": "2026-07-21T11:07:05.000Z",
          "computedAt": "2026-07-21T11:13:55.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T13:13:55+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T11:07:05.000Z",
            "lastAttemptAt": "2026-07-21T11:07:05.000Z",
            "lastSuccessAt": "2026-07-21T11:07:05.000Z",
            "computedAt": "2026-07-21T13:13:55+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T11:07:05.000Z",
            "lastAttemptAt": "2026-07-21T11:07:05.000Z",
            "lastSuccessAt": "2026-07-21T11:07:05.000Z",
            "computedAt": "2026-07-21T13:13:55+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
            "retrievedAt": "2026-07-21T11:07:05.000Z",
            "lastAttemptAt": "2026-07-21T11:07:05.000Z",
            "lastSuccessAt": "2026-07-21T11:07:05.000Z",
            "computedAt": "2026-07-21T13:13:55+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-21T22:16:42.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T11:05:28.000Z",
            "retrievedAt": "2026-07-21T11:07:05.000Z",
            "lastAttemptAt": "2026-07-21T11:07:05.000Z",
            "lastSuccessAt": "2026-07-21T11:07:05.000Z",
            "computedAt": "2026-07-21T13:13:55+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T17:05:28.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T11:01:29.000Z",
            "retrievedAt": "2026-07-21T11:15:11.645Z",
            "lastAttemptAt": "2026-07-21T11:15:11.645Z",
            "lastSuccessAt": "2026-07-21T11:15:11.645Z",
            "computedAt": "2026-07-21T13:13:55+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T17:01:29.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "degraded",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [
              "FRED: DGS30: None"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T13:13:55+02:00",
        "latest": [
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "175e92e742bbe1a0e5392da0c2827837dcd9fa474890787fc8427b46d270a5d1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "64fa488bf7cbe930e3201043be78c338d25f7d20356219928157767a924b3485",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "a4f17a65803d59193b4ee6ccb8e9c0ba33c35fb2d0c2f5e52dc1e9612a51680f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "bef4e0d54a49bd78aef5b3129ecb9e6267d30951fffce4e7f73c5aa482956a95",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "ecd0ec635338a4f529f48d8f6a5b5be1be487d1661e60f67cd1082a8631b3c24",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "4b310cb2020d9a01990e1b097432c6fd0315824f61e7bb1bff765515123d93e0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "59db1e1d3c4f8c52c82fa79c17042051044a8b0a56a17692e383e1edbf20e281",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "dcfb80285dc2b5b4675bab27f25952e6819e1a1dc02926abb44746b52134d821",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "a546cbf5ec6d2660f6af677a8952f83a3c18b7db556bc4e47631f0053d06bf88"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T131751+0200-7ba2392c8c02-29825568772-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T11:19:01.487Z",
      "computedAt": "2026-07-21T13:17:51+02:00",
      "gitSha": "7ba2392c8c0223dd22404c33385d7e59ce154f82",
      "previousFrameHash": "a546cbf5ec6d2660f6af677a8952f83a3c18b7db556bc4e47631f0053d06bf88",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29825568772",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "0312c2d7c182ddbccff0d2d63dbae3f00c311496a5b638d534fdac2fa11282e6",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "a3ef48488b6bc63e09496d9996bedf1260a93c2e306c5f875227467a48733e1f",
          "bytes": 1104147,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ef2bf4a5d9ed7e76d721508a2c19840496db13b000fc45ef23bff7bab414e41a",
          "bytes": 3282610,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "2b1dc0a0b6e827c55d7af8f8ef41887ade5bbda54b938b93ef0e8ed451ce7453",
          "bytes": 582442,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "08f17c80ef99d98e0586364d6b121f3d69d4210ec9fcab6c6ae251400a333227",
          "bytes": 543054,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "d17119e2612d2e7a979d5e8a6f3d3544a7031793a92a4959c822c156602860ed",
          "bytes": 27870,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "ecb61c72c1a3281976b77367cb6b8648452a43e8edd26326b00747201043adef",
          "bytes": 15036,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "0d8a5d127fc8a46032a357e723852ef28c25de95bad95fc56a4d155a07177705",
          "bytes": 231809,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "865584af88645401c5c9544c9dc4e36a9be6298e20ba656dd8575f449d29a14a",
          "bytes": 131010,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "07cf79bbe59fb3d5c2c324b18cfcbb7ef90d223092c4d85855bbc13a9aba114f",
          "bytes": 15560,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "375f684a72582efc8e8165778909cb15bf793f6b3455be3036bcfe1f4bd652ee",
          "bytes": 7382,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "af51b987b08e5268d6b6390c8151c1c388a19a0878499878fd0ee133eb58e71f",
          "bytes": 891264,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T11:17:51.000Z:97aab9824e2f",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T11:17:51.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T11:15:25.000Z",
          "retrievedAt": "2026-07-21T11:19:01.487Z",
          "computedAt": "2026-07-21T11:17:51.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.32074603083818,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "97aab9824e2f05c63701977207f58c1b1e5eb495cf277f96497b87188b30d7ea",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T11:17:51.000Z:4e758622f5bd",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T11:17:51.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T11:05:28.000Z",
          "retrievedAt": "2026-07-21T11:07:05.000Z",
          "computedAt": "2026-07-21T11:17:51.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4e758622f5bd1201c9ce7ce99e83648ae77e47d5f7d938a0619270fc86b54c20",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T11:17:51.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T11:17:51.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T11:07:05.000Z",
          "computedAt": "2026-07-21T11:17:51.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T11:17:51.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T11:17:51.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T11:07:05.000Z",
          "computedAt": "2026-07-21T11:17:51.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T11:17:51.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T11:17:51.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
          "retrievedAt": "2026-07-21T11:07:05.000Z",
          "computedAt": "2026-07-21T11:17:51.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T13:17:51+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T11:07:05.000Z",
            "lastAttemptAt": "2026-07-21T11:07:05.000Z",
            "lastSuccessAt": "2026-07-21T11:07:05.000Z",
            "computedAt": "2026-07-21T13:17:51+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T11:07:05.000Z",
            "lastAttemptAt": "2026-07-21T11:07:05.000Z",
            "lastSuccessAt": "2026-07-21T11:07:05.000Z",
            "computedAt": "2026-07-21T13:17:51+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
            "retrievedAt": "2026-07-21T11:07:05.000Z",
            "lastAttemptAt": "2026-07-21T11:07:05.000Z",
            "lastSuccessAt": "2026-07-21T11:07:05.000Z",
            "computedAt": "2026-07-21T13:17:51+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-21T22:16:42.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T11:05:28.000Z",
            "retrievedAt": "2026-07-21T11:07:05.000Z",
            "lastAttemptAt": "2026-07-21T11:07:05.000Z",
            "lastSuccessAt": "2026-07-21T11:07:05.000Z",
            "computedAt": "2026-07-21T13:17:51+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T17:05:28.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T11:15:25.000Z",
            "retrievedAt": "2026-07-21T11:19:01.487Z",
            "lastAttemptAt": "2026-07-21T11:19:01.487Z",
            "lastSuccessAt": "2026-07-21T11:19:01.487Z",
            "computedAt": "2026-07-21T13:17:51+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T17:15:25.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T13:17:51+02:00",
        "latest": [
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "e8c728212fcd5698b4663593421ab744404cdaf6d5ce9e6812545c2990047207",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "50cef39577f53a822a5c97b5a2771c15b6d64055ebe5dd7698d2ae05cbf53876",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "21c2dcd2407fb320a4e0d99e8aa86c381d1d68932c76a211191bfeda503acf20",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "341ccde47ff741819637c35269228ad7f7c357445afd7aa23ae65c63dca57d75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "fcead7abfae49272b41b73a274a265b3b4ad841b252f4b5144ba9081c49e00ed",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "dbf6ffac0f9834bb36f4acd3def1051fcf13f8520f028f981db219025a8c6532",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "bf3c24caa79351bb5d43af94b7972727212c0fb80b09b3e35df61b787dc8611a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "f431178dbd8bb678272e99cf3620f7b1ee3c777279bd8b383a9280d64ed8960c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "3537b1682c8c075349187b316d9a7b8cda5c0e86aeaf1a3b4931475bc6d8393e"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T134031+0200-e4c3201caa83-29827056782-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T11:41:42.970Z",
      "computedAt": "2026-07-21T13:40:31+02:00",
      "gitSha": "e4c3201caa830bc47762dc3d407b952144aba2ad",
      "previousFrameHash": "3537b1682c8c075349187b316d9a7b8cda5c0e86aeaf1a3b4931475bc6d8393e",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29827056782",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "0312c2d7c182ddbccff0d2d63dbae3f00c311496a5b638d534fdac2fa11282e6",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "84cece5bc551b11da458ae721b5dbd1f551bde3a3a206c7785aca829b030d992",
          "bytes": 1104147,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ef2bf4a5d9ed7e76d721508a2c19840496db13b000fc45ef23bff7bab414e41a",
          "bytes": 3282610,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "33c892d00c22b722db1f2cbbbd2eb99931d32c4523b219dff71b5b0427759c9c",
          "bytes": 582442,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "01f5f32f3b23b3d7309250647422d69bc779bf1a52c5b2ef350c682411104aa1",
          "bytes": 543054,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "d17119e2612d2e7a979d5e8a6f3d3544a7031793a92a4959c822c156602860ed",
          "bytes": 27870,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "c953236b395a1ab928312eb620f8a5415ccc6014a336138618df3ccbe232b72c",
          "bytes": 15036,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "5c108355b1a0f539e3ed0436616dec7525f932a0e354e4089ddb6d01181b7cc8",
          "bytes": 231809,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "875cd8dbfe97a42c707489f1041102647e483fff12471478f3c73f54fce53c8d",
          "bytes": 131010,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "1ec066d099d8e5a3720c35b81e159395d4473cd910a899005c999773a12c83c2",
          "bytes": 15560,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "84c1b72532d97f6d43ac0b433a66173efa8e7392518435a1b89b74b2f3833781",
          "bytes": 7382,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "6d4af24ab806aeb2d73df6d632de47f2a4b257053ced34472d8263192dfee2bc",
          "bytes": 900687,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T11:40:31.000Z:eb58a03c949f",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T11:40:31.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T11:30:39.000Z",
          "retrievedAt": "2026-07-21T11:41:42.970Z",
          "computedAt": "2026-07-21T11:40:31.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.32074603083818,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "eb58a03c949f32b378d2783d7e5bad82fc620b5703ee23958d198447fe0dafe4",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T11:40:31.000Z:6acdbf1efca2",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T11:40:31.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T11:37:00.000Z",
          "retrievedAt": "2026-07-21T11:37:25.000Z",
          "computedAt": "2026-07-21T11:40:31.000Z",
          "archivedAt": null,
          "value": 47,
          "rawValue": 47,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6acdbf1efca2842ad6c46d04466f708d6516c03a565155e7782def583a4af123",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T11:40:31.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T11:40:31.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T11:37:25.000Z",
          "computedAt": "2026-07-21T11:40:31.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T11:40:31.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T11:40:31.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T11:37:25.000Z",
          "computedAt": "2026-07-21T11:40:31.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T11:40:31.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T11:40:31.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
          "retrievedAt": "2026-07-21T11:37:25.000Z",
          "computedAt": "2026-07-21T11:40:31.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T13:40:31+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T11:37:25.000Z",
            "lastAttemptAt": "2026-07-21T11:37:25.000Z",
            "lastSuccessAt": "2026-07-21T11:37:25.000Z",
            "computedAt": "2026-07-21T13:40:31+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T11:37:25.000Z",
            "lastAttemptAt": "2026-07-21T11:37:25.000Z",
            "lastSuccessAt": "2026-07-21T11:37:25.000Z",
            "computedAt": "2026-07-21T13:40:31+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
            "retrievedAt": "2026-07-21T11:37:25.000Z",
            "lastAttemptAt": "2026-07-21T11:37:25.000Z",
            "lastSuccessAt": "2026-07-21T11:37:25.000Z",
            "computedAt": "2026-07-21T13:40:31+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-21T22:16:42.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T11:37:00.000Z",
            "retrievedAt": "2026-07-21T11:37:25.000Z",
            "lastAttemptAt": "2026-07-21T11:37:25.000Z",
            "lastSuccessAt": "2026-07-21T11:37:25.000Z",
            "computedAt": "2026-07-21T13:40:31+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T17:37:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T11:30:39.000Z",
            "retrievedAt": "2026-07-21T11:41:42.970Z",
            "lastAttemptAt": "2026-07-21T11:41:42.970Z",
            "lastSuccessAt": "2026-07-21T11:41:42.970Z",
            "computedAt": "2026-07-21T13:40:31+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T17:30:39.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T13:40:31+02:00",
        "latest": [
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "b70c4f1dd9f453aaea58f4fdef14c6092e18a936bfc0d19a7177e24b8b4aea1b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "84fac81a816288791389071019ea68adac6b25b09f43c3c3cba2fb432cf42c68",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "d7e8d044f68c0e2415993ae4a12f8ce9cd9ab5346383c5829c1d5c94a9ba1dbc",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "ede102f6b5eae88d1a8484cd5956761755a0366955f91b201b7df90a3f5a7ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "ea82adbeec91e5b18cabca695f1c9e71c8372ddec4de85422f64a462ea1acf0c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "c4caefdd9fdd4e9bec4d0a8a05442de0b075e42f8ec7c20ecd4d611c2ca6296b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "d18b64224f50b513a71e408e296b7cb61facc6988ef59e64f84c378295c28de5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "09c9e78e98ef3c31",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "euroclear-the-opaque-vault-of-europe",
            "title": "Euroclear: the opaque vault at the heart of Europe",
            "url": "https://l0g.fr/en/analysis/euroclear-the-opaque-vault-of-europe/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear: the opaque vault at the heart of Europe.",
            "objectId": "article:en:euroclear-the-opaque-vault-of-europe",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "54bd16ed0e26c78843d26a2d46a301f14c9fa075261433c5db871ea0558bad8d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "927e4fc3fa28ae72",
            "date": "2026-07-18T08:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "euroclear-chambre-forte-opaque-avoirs-russes",
            "title": "Euroclear, la chambre forte opaque au cœur de l'Europe",
            "url": "https://l0g.fr/posts/euroclear-chambre-forte-opaque-avoirs-russes/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Euroclear, la chambre forte opaque au cœur de l'Europe.",
            "objectId": "article:euroclear-chambre-forte-opaque-avoirs-russes",
            "previousVersion": null,
            "currentVersion": "2026-07-18T08:14:00.000Z",
            "previousHash": null,
            "currentHash": "d15a371611c8c3692d49f962e0e72c802768d8bfb622bd82c577493ce0903b1e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "e487549039cb7d87f41e7618ad2b14825162fd22f06c5a8aa16702196cdabf7f"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T150603+0200-238c3f494b9d-29833045685-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T13:08:19.849Z",
      "computedAt": "2026-07-21T15:06:03+02:00",
      "gitSha": "238c3f494b9db4856a3d47c8d2132fb4b86ef851",
      "previousFrameHash": "e487549039cb7d87f41e7618ad2b14825162fd22f06c5a8aa16702196cdabf7f",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29833045685",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "0d7747d79abc437d00455186e32da61306331fbb8ea03af8d5dbe54653a25bd5",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "d88af42d9fb09e097ab930d0a5aa2f619021d6d1ea29ca2fc11e526fa8725f69",
          "bytes": 1116200,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "a0882d5b267e08cbe1f238db94eb4569239e10ec4eb957d3c7a7adc75cf7d4c2",
          "bytes": 3308082,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "cf746487d1b20a364839f5517e35a6cda1e4ef80e5b14267f01720fa77a2ce82",
          "bytes": 592496,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "7ccb005ac4099a50a290970d2c5cfd3c69d94a154c51f32d5be2e59a6d4c4e7c",
          "bytes": 551410,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "33fccd5f49e7707e5d22d01a827623beb91b94c3e450a84e96baaf06239168f0",
          "bytes": 28049,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "fad9a115a1cbc9fad216bc4959b9b078c80800cab76997100f537430879e471d",
          "bytes": 15146,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "2122cecfd90bcb5e325be720e1cc40c8f960fe0af6c15cda884eeefc870cdeb6",
          "bytes": 233592,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "37f3c4543b29b16d0875f335d7bbf9fe6384ef918cfb2a22bb4be7e144f0e723",
          "bytes": 137021,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "b23684aecd77e97cd36eab2da59968035f25dde63acd5362819dbb6ace0c0e15",
          "bytes": 15563,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "fdc86d879a63651de07cf8f5349e392bf680d4f2b3ea97b6d839466b32becc9b",
          "bytes": 7382,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "a015cb2b03a589a39acc5f35a4a4176976f822966ae9385a1bd1597ab20e7a31",
          "bytes": 910472,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T13:07:55.000Z:87ec813b65c4",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T13:07:55.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T13:02:19.000Z",
          "retrievedAt": "2026-07-21T13:07:55.000Z",
          "computedAt": "2026-07-21T13:07:55.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54,
          "scale": 100,
          "level": null,
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "87ec813b65c488cc2f4b44d214c4d9fb8b01757f576a3b4fd932789b96f68656",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-21 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T13:07:55.000Z:46a0358f39a9",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T13:07:55.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T12:37:39.000Z",
          "retrievedAt": "2026-07-21T13:07:55.000Z",
          "computedAt": "2026-07-21T13:07:55.000Z",
          "archivedAt": null,
          "value": 47,
          "rawValue": 47,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "46a0358f39a9beed2ce07d2ec06584e265c81c4df477d4a027757e3dc3ace7f3",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-21 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T13:07:55.000Z:316ee4105430",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T13:07:55.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T13:07:55.000Z",
          "computedAt": "2026-07-21T13:07:55.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": null,
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "316ee410543042ff8011f146b1ea4ea8a7726856dffb7e96a7f14f54b67f0674",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-21 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T13:07:55.000Z:392a71b23721",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T13:07:55.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T13:07:55.000Z",
          "computedAt": "2026-07-21T13:07:55.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "392a71b237212eb4ed243315446b34be1ce838a26846a4d3c26b30030fa003bc",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-21 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T13:07:55.000Z:7849870012c2",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T13:07:55.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
          "retrievedAt": "2026-07-21T13:07:55.000Z",
          "computedAt": "2026-07-21T13:07:55.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7849870012c2d32736b1eee8e9f7c211e84d3a0a0d93a6ac1d6266e1d85e9233",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-21 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T15:06:03+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T13:07:55.000Z",
            "lastAttemptAt": "2026-07-21T13:07:55.000Z",
            "lastSuccessAt": "2026-07-21T13:07:55.000Z",
            "computedAt": "2026-07-21T15:06:03+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T13:07:55.000Z",
            "lastAttemptAt": "2026-07-21T13:07:55.000Z",
            "lastSuccessAt": "2026-07-21T13:07:55.000Z",
            "computedAt": "2026-07-21T15:06:03+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
            "retrievedAt": "2026-07-21T13:07:55.000Z",
            "lastAttemptAt": "2026-07-21T13:07:55.000Z",
            "lastSuccessAt": "2026-07-21T13:07:55.000Z",
            "computedAt": "2026-07-21T15:06:03+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-21T22:16:42.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T12:37:39.000Z",
            "retrievedAt": "2026-07-21T13:07:55.000Z",
            "lastAttemptAt": "2026-07-21T13:07:55.000Z",
            "lastSuccessAt": "2026-07-21T13:07:55.000Z",
            "computedAt": "2026-07-21T15:06:03+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T18:37:39.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T13:02:19.000Z",
            "retrievedAt": "2026-07-21T13:08:19.849Z",
            "lastAttemptAt": "2026-07-21T13:08:19.849Z",
            "lastSuccessAt": "2026-07-21T13:08:19.849Z",
            "computedAt": "2026-07-21T15:06:03+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T19:02:19.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T15:06:03+02:00",
        "latest": [
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "bcc4228fa4f3ec7b966929f37d9d5eb5dc7eb16d1c2ac9806763947e5d0a8096",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "658be416e5e11d024204a3ee9c3ec0a0bc0d37cb08762376528478bfca898d6b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "c2e1d63cc8afe200c9f8c34da28b1046c7fecd47aa5e8ff303bffd5543eb038c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "92a6818d4f76eddc4ff467b7a2ceb497abc2c775b053ab9a4a9af9a09d020813",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "36f1cab1b091629a922993750cd0555d1055f75c4fc76c5edd305e81dbcfc074",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "c4ee201827db2431f323b91760c4e70134feb34bf16f4423e60b085579e10e3d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "11a86356069a47304f0c2399c3275508ac6f982e6ebc4a1b8eab4b25c2071fe4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "d6bfa6419663fa67a133dd369fb8d5149d75bd54540add52c3f12fb8effe49f8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "2f7bd7b7d882ccc1",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-ecb-balance-sheet-target2",
            "title": "Reading the ECB balance sheet and the Target2 balances",
            "url": "https://l0g.fr/en/guides/read-ecb-balance-sheet-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading the ECB balance sheet and the Target2 balances.",
            "objectId": "guide:en:read-ecb-balance-sheet-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "a3586845ee5d929612b18806bb2d22b8f4cebcf04e6dd026478168892417cf06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a7db85b03aa9e2d8",
            "date": "2026-07-19T12:40:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-le-bilan-bce-target2",
            "title": "Lire le bilan de la BCE et les soldes Target2",
            "url": "https://l0g.fr/guides/lire-le-bilan-bce-target2/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire le bilan de la BCE et les soldes Target2.",
            "objectId": "guide:lire-le-bilan-bce-target2",
            "previousVersion": null,
            "currentVersion": "2026-07-19T12:40:00.000Z",
            "previousHash": null,
            "currentHash": "3bb077eff9f4956ee1ea10fdadf0691914d5b8997a58adfedf745bb1ffed8e38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "44a4cb571c04348b",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-la-dette-souveraine-europeenne",
            "title": "Lire la dette souveraine européenne : OAT, Bund, BTP et le spread",
            "url": "https://l0g.fr/guides/lire-la-dette-souveraine-europeenne/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire la dette souveraine européenne : OAT, Bund, BTP et le spread.",
            "objectId": "guide:lire-la-dette-souveraine-europeenne",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "4d52ce865ef75cd9473e5b10155ce3d8fc00622b00883b13b804e759858b47e1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "97c1bf906c662102",
            "date": "2026-07-19T07:58:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-european-sovereign-debt",
            "title": "Reading European sovereign debt: OATs, Bunds, BTPs and the spread",
            "url": "https://l0g.fr/en/guides/read-european-sovereign-debt/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Reading European sovereign debt: OATs, Bunds, BTPs and the spread.",
            "objectId": "guide:en:read-european-sovereign-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T07:58:00.000Z",
            "previousHash": null,
            "currentHash": "1643e845e709ffa87543e20eeb281fbde5afd2acd78c3a3c63a04318382d8ff1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "3ebe617b134a1e16d34756582763773b954d3585a3372f2c65e3da5f06699d30"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T155251+0200-2cd1c7455963-29836591225-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T13:55:21.076Z",
      "computedAt": "2026-07-21T15:52:51+02:00",
      "gitSha": "2cd1c7455963b733d6a418024d620976367f69de",
      "previousFrameHash": "3ebe617b134a1e16d34756582763773b954d3585a3372f2c65e3da5f06699d30",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29836591225",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "10b56821562bb0c831e39416f3e0b62a71be657cb760118db0a40a640553256d",
          "bytes": 6970,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "74ea0fd13a352bf42713ba23050db14a3628724be0042a9a6a6eede3b9e384aa",
          "bytes": 92192,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "c0d50474f155e8dbce19d36454807bb3b13b67b1b5ee82b6ccdae471ad9067db",
          "bytes": 1125861,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "e34ac758e53be6bbaeb897f179ceecc161d381756d34871b6bce3a89d936d53c",
          "bytes": 3328703,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "ebecf14e610b5373a4af416e4afc6b00f5294e768787b3bcd49bcbfa43f12af3",
          "bytes": 601537,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "e296fdda8f6f4702b12c4674eb80b0cb1e5724083760108d89d203729d30e209",
          "bytes": 560413,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "dd1306acd660af4d7f0f36536fd599b332519e1492f551375308720e0dc37b9b",
          "bytes": 28212,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "3403a7e2eb4908866f1ab271823af902827925edb74298c4a13ac0750d267510",
          "bytes": 15281,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "884960671b6dd08cde2bf75b0f4213426c006eeb92e0b794277cf390e256b72a",
          "bytes": 236271,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "36e9ad5d6e1fe8079099e6bd8d34e101a883be3855ff8e01d878873f289456f2",
          "bytes": 139000,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "6e696b45e23536affa9df8b0710f1a64996a9fa8037a317bc6e09f090de01f3e",
          "bytes": 15563,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "2da952b2edefcbfc0c2e5d02b27f6df29a2db54d60e1740693958e14af762c2b",
          "bytes": 7382,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "5981318a1f7bad3d0c47b8cc3ee87678f36e21b382827df4257a8e210dac5fc0",
          "bytes": 920238,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T13:53:05.000Z:522a39dcc1e5",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T13:53:05.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T13:46:48.000Z",
          "retrievedAt": "2026-07-21T13:53:05.000Z",
          "computedAt": "2026-07-21T13:53:05.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54,
          "scale": 100,
          "level": null,
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "522a39dcc1e5772b4d27eea093ef8ba11724f4734f105f66f7cee6642ac22a38",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-21 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T13:53:05.000Z:d08030447786",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T13:53:05.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T13:39:54.000Z",
          "retrievedAt": "2026-07-21T13:53:05.000Z",
          "computedAt": "2026-07-21T13:53:05.000Z",
          "archivedAt": null,
          "value": 47,
          "rawValue": 47,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "d08030447786d1efaa646096f3124b8845aff659f42a7cc462554bf7157005ee",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-21 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T13:53:05.000Z:b112d8e4774c",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T13:53:05.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T13:53:05.000Z",
          "computedAt": "2026-07-21T13:53:05.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": null,
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "b112d8e4774ccf6a944fe134aa19d47c095348671823be4c8fd84c2452163226",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-21 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T13:53:05.000Z:1e9b05139c47",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T13:53:05.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T13:53:05.000Z",
          "computedAt": "2026-07-21T13:53:05.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "1e9b05139c47bd1c54a76353a2dd3548295dfd23377ef169793f648856ff7ede",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-21 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T13:53:05.000Z:79817930c69b",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T13:53:05.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
          "retrievedAt": "2026-07-21T13:53:05.000Z",
          "computedAt": "2026-07-21T13:53:05.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "79817930c69b742ed8dbf11ca9974cf676645c0142d743570288c9214dd3705e",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-21 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T15:52:51+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T13:53:05.000Z",
            "lastAttemptAt": "2026-07-21T13:53:05.000Z",
            "lastSuccessAt": "2026-07-21T13:53:05.000Z",
            "computedAt": "2026-07-21T15:52:51+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T13:53:05.000Z",
            "lastAttemptAt": "2026-07-21T13:53:05.000Z",
            "lastSuccessAt": "2026-07-21T13:53:05.000Z",
            "computedAt": "2026-07-21T15:52:51+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:16:42.000Z",
            "retrievedAt": "2026-07-21T13:53:05.000Z",
            "lastAttemptAt": "2026-07-21T13:53:05.000Z",
            "lastSuccessAt": "2026-07-21T13:53:05.000Z",
            "computedAt": "2026-07-21T15:52:51+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-21T22:16:42.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T13:39:54.000Z",
            "retrievedAt": "2026-07-21T13:53:05.000Z",
            "lastAttemptAt": "2026-07-21T13:53:05.000Z",
            "lastSuccessAt": "2026-07-21T13:53:05.000Z",
            "computedAt": "2026-07-21T15:52:51+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T19:39:54.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T13:46:48.000Z",
            "retrievedAt": "2026-07-21T13:55:21.076Z",
            "lastAttemptAt": "2026-07-21T13:55:21.076Z",
            "lastSuccessAt": "2026-07-21T13:55:21.076Z",
            "computedAt": "2026-07-21T15:52:51+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T19:46:48.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T15:52:51+02:00",
        "latest": [
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "865c2d8554c383d4d3d880688eca2afaf7b953f89ea80ffd0ee9842bc3dd5527",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe0f7a8478631d50355203e25f7e5eff64f4159f4f52480a4f6ca1a373451ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "5a87f588a0f481157b503718675237e6a70be85e5e5a8343502087ca406eafa4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "8d94f2b2d309d44c9fe368b9af0c7cf25bb669e8fe60fa2df879aab955d8b69f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "91d0dc6fe45b79cc1297ff3b8dd551fd360f4d547fcc89701b397f7700bde98d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "8ce1b9e10712db781724e73de1064c79e69fa361ab4c77465c2314d4666c5cc8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "289ffad789cc4cf830742a2297c0f7cf75e799b6ec1b7d4cfde3a8c3eedbce39",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "1a8576294c75243e3755d0a2324086909c22fd17957fe0b4f7e5acd47de405c1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "02ab73bd94bb6a539f0cb9c3d83fa1da0ca8f3961c0db524605dd518464575b5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "220807c2ff93a9d6ad702c0323f37bdf01d5594986ffa5044f57394476ace61b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "aaf318ae180e71015e67c0d2074b5205ef195aaa28ce9bf226e97cd1a0710247",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "3c3584876836affdfad1ee6d11c9439b859d3118361468cff94639838668ecab"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T201916+0200-b8d26794f837-29856724246-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T18:20:28.146Z",
      "computedAt": "2026-07-21T20:19:16+02:00",
      "gitSha": "b8d26794f837472d03b3ebb95ee487ca4754cdf2",
      "previousFrameHash": "3c3584876836affdfad1ee6d11c9439b859d3118361468cff94639838668ecab",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29856724246",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "323e7b264b622cbbc8847011cbcee7f72dc712303dc5a3057b33fe234e970ac3",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "ff65286c8e769d15bcf720331d66f6fcd898e474af6f210cf4e7f05e2c39430b",
          "bytes": 94059,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "a16776ecf1e80314f4e1133c638b7d1ebdb0616462f5d12b4b206d0243d79e9f",
          "bytes": 1125861,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "e34ac758e53be6bbaeb897f179ceecc161d381756d34871b6bce3a89d936d53c",
          "bytes": 3328703,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "80ece9e7fa2fd24b5e6988da63e70e252a684b13a3d5513623c015ca36dbaaf4",
          "bytes": 601537,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "913b00c2a22d8e93dce8c518c2e43eda432b7b02ac7f53cb531db125fa152a7f",
          "bytes": 560413,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "dd1306acd660af4d7f0f36536fd599b332519e1492f551375308720e0dc37b9b",
          "bytes": 28212,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "995b3080c0563da4cc3409e0e09c9b849d1d37891d55a6c18463abfb0140cc31",
          "bytes": 15416,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "8394d31e4315fd28d2019f735ccbe7e60b744ff0224f46de41fba4ade76a7dec",
          "bytes": 236271,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "1b1436ce6729089af082867b5879f770c07019ce5783108cc9bdd03ff99800d6",
          "bytes": 138327,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "95b1ce58210324ea2d756134adb438f9f7b8eb74b9a3ce8b2eb94e81ef550498",
          "bytes": 15657,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "49ce3ac62013aeabae160a4a36fe61501c1f5520f7b091644f0963055cfcc9a1",
          "bytes": 7476,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "5e62883fc14f4832af621d4daa6b24c2e85193de6512323d4fb04fc3238666fe",
          "bytes": 929648,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T18:19:16.000Z:1d737dd9c617",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T18:19:16.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T18:19:19.000Z",
          "retrievedAt": "2026-07-21T18:20:28.146Z",
          "computedAt": "2026-07-21T18:19:16.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 53.87142104431109,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "1d737dd9c617d6812c1ae933a07516c64f167f27b82d2fcf150b84198bac8cc5",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "degraded",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T18:19:16.000Z:6acdbf1efca2",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T18:19:16.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T17:49:56.000Z",
          "retrievedAt": "2026-07-21T18:09:45.000Z",
          "computedAt": "2026-07-21T18:19:16.000Z",
          "archivedAt": null,
          "value": 47,
          "rawValue": 47,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6acdbf1efca2842ad6c46d04466f708d6516c03a565155e7782def583a4af123",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T18:19:16.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T18:19:16.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T18:09:45.000Z",
          "computedAt": "2026-07-21T18:19:16.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T18:19:16.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T18:19:16.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T18:09:45.000Z",
          "computedAt": "2026-07-21T18:19:16.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T18:19:16.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T18:19:16.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T16:19:30.000Z",
          "retrievedAt": "2026-07-21T18:09:45.000Z",
          "computedAt": "2026-07-21T18:19:16.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T20:19:16+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T18:09:45.000Z",
            "lastAttemptAt": "2026-07-21T18:09:45.000Z",
            "lastSuccessAt": "2026-07-21T18:09:45.000Z",
            "computedAt": "2026-07-21T20:19:16+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T18:09:45.000Z",
            "lastAttemptAt": "2026-07-21T18:09:45.000Z",
            "lastSuccessAt": "2026-07-21T18:09:45.000Z",
            "computedAt": "2026-07-21T20:19:16+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T16:19:30.000Z",
            "retrievedAt": "2026-07-21T18:09:45.000Z",
            "lastAttemptAt": "2026-07-21T18:09:45.000Z",
            "lastSuccessAt": "2026-07-21T18:09:45.000Z",
            "computedAt": "2026-07-21T20:19:16+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-22T04:19:30.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T17:49:56.000Z",
            "retrievedAt": "2026-07-21T18:09:45.000Z",
            "lastAttemptAt": "2026-07-21T18:09:45.000Z",
            "lastSuccessAt": "2026-07-21T18:09:45.000Z",
            "computedAt": "2026-07-21T20:19:16+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-21T23:49:56.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T18:19:19.000Z",
            "retrievedAt": "2026-07-21T18:20:28.146Z",
            "lastAttemptAt": "2026-07-21T18:20:28.146Z",
            "lastSuccessAt": "2026-07-21T18:20:28.146Z",
            "computedAt": "2026-07-21T20:19:16+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T00:19:19.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "degraded",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [
              "World Bank: GC.XPN.INTP.RV.ZS: HTTP 400"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T20:19:16+02:00",
        "latest": [
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "94981e5fa6bda5128f97d813a8cc399fef3bb6866af5d50ced1514c9660e2ce3",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe0f7a8478631d50355203e25f7e5eff64f4159f4f52480a4f6ca1a373451ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "d48483c8749e9a2ccd6ca0dca1d05379fb36eed56026b0575fe908221f36ff25",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "a8c3154554e16e0a82e2114525058559b71795faeaf9152407f9e3da200f5440",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "ec982098d001a98c6d1cc5c3996511b632e5f3dc845592b29ffdaae4b5363aef",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "21df01ccca91c33af086bb32e11a1d459030fe4bc97b5e5d247653b9d1743f38",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "ef2ed10756e605e3835cb1ea1ea0015fe8ba107638a9fe1678bd91778723c84c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "d387d121fbfd4805fb1217a4c023d6c353d53f7ee4e891b1ef8637a522621269",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "f43fac94a4c859735a929da78dd92b2cace10579185c683548b42f4d40c0ada3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "55a361f93caefdeebffe9929c3cf5f9b7f21465a463b2fbe7306c90e3ed26329",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "1b085d9b56f68c1adbac888068e646e569d4c20e15d3a4ab0bf60bd43318790f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "dc13d9aa9cc64c2854ddab4b0d07f9fb3a4cbaec4b47ec0af0c4fa471a81ab2e"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T203527+0200-b5798b71dc4a-29857960408-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T18:37:26.904Z",
      "computedAt": "2026-07-21T20:35:27+02:00",
      "gitSha": "b5798b71dc4a54d1cdf276d408d5fe0ba41e1f56",
      "previousFrameHash": "dc13d9aa9cc64c2854ddab4b0d07f9fb3a4cbaec4b47ec0af0c4fa471a81ab2e",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29857960408",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "323e7b264b622cbbc8847011cbcee7f72dc712303dc5a3057b33fe234e970ac3",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "ff65286c8e769d15bcf720331d66f6fcd898e474af6f210cf4e7f05e2c39430b",
          "bytes": 94059,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "0ce593f53f798b36ec430ca817040871116b1e8824742296d5f27dc2cbcc1acb",
          "bytes": 1125861,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "e34ac758e53be6bbaeb897f179ceecc161d381756d34871b6bce3a89d936d53c",
          "bytes": 3328703,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "e0f03a4e05ef92895f83b7929866ccf321f65acdb8203d37b636d9c7846cfc07",
          "bytes": 601537,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "d2b332c91b3b6ef440f70d66feaa90802f0d6a35ed36ac378c23f130d4b2e63c",
          "bytes": 560413,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "dd1306acd660af4d7f0f36536fd599b332519e1492f551375308720e0dc37b9b",
          "bytes": 28212,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "0b08e77058dcd665c19af910127ce6f9257b3d863a5183018bddef6a53a70da2",
          "bytes": 15416,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "c406860c1f6e8486024f1553f69807a9beae6ad6d133aa0302eb2de9494dee10",
          "bytes": 236271,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "8d5db60e1d9787ccf2a89f9e28657a7087ac40283165191281aeeba3bb0c5bcb",
          "bytes": 138288,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "5663d03a9ce0f0c9e690c1656b5fa845c05935ea2290297ae3c626c1d42f894b",
          "bytes": 15561,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "49ebaf0c8c30420fded4c9d590e7df8c2556546bc520a64b627b27c343b76672",
          "bytes": 7381,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "5ad5e638718082547f9d29ac7ada4ec2a94133b1ab4722efe704a2a70a5d6a94",
          "bytes": 939068,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T18:35:27.000Z:6689859316e2",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T18:35:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T18:34:26.000Z",
          "retrievedAt": "2026-07-21T18:37:26.904Z",
          "computedAt": "2026-07-21T18:35:27.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.2444481390687,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "6689859316e2a10b01ad56120b610a14e3d83ba5cebb96e5a410dce8dc87ea06",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T18:35:27.000Z:6acdbf1efca2",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T18:35:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T18:21:28.000Z",
          "retrievedAt": "2026-07-21T18:24:55.000Z",
          "computedAt": "2026-07-21T18:35:27.000Z",
          "archivedAt": null,
          "value": 47,
          "rawValue": 47,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6acdbf1efca2842ad6c46d04466f708d6516c03a565155e7782def583a4af123",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T18:35:27.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T18:35:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T18:24:55.000Z",
          "computedAt": "2026-07-21T18:35:27.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T18:35:27.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T18:35:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T18:24:55.000Z",
          "computedAt": "2026-07-21T18:35:27.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T18:35:27.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T18:35:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T16:19:30.000Z",
          "retrievedAt": "2026-07-21T18:24:55.000Z",
          "computedAt": "2026-07-21T18:35:27.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T20:35:27+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T18:24:55.000Z",
            "lastAttemptAt": "2026-07-21T18:24:55.000Z",
            "lastSuccessAt": "2026-07-21T18:24:55.000Z",
            "computedAt": "2026-07-21T20:35:27+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T18:24:55.000Z",
            "lastAttemptAt": "2026-07-21T18:24:55.000Z",
            "lastSuccessAt": "2026-07-21T18:24:55.000Z",
            "computedAt": "2026-07-21T20:35:27+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T16:19:30.000Z",
            "retrievedAt": "2026-07-21T18:24:55.000Z",
            "lastAttemptAt": "2026-07-21T18:24:55.000Z",
            "lastSuccessAt": "2026-07-21T18:24:55.000Z",
            "computedAt": "2026-07-21T20:35:27+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-22T04:19:30.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T18:21:28.000Z",
            "retrievedAt": "2026-07-21T18:24:55.000Z",
            "lastAttemptAt": "2026-07-21T18:24:55.000Z",
            "lastSuccessAt": "2026-07-21T18:24:55.000Z",
            "computedAt": "2026-07-21T20:35:27+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T00:21:28.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T18:34:26.000Z",
            "retrievedAt": "2026-07-21T18:37:26.904Z",
            "lastAttemptAt": "2026-07-21T18:37:26.904Z",
            "lastSuccessAt": "2026-07-21T18:37:26.904Z",
            "computedAt": "2026-07-21T20:35:27+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T00:34:26.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T20:35:27+02:00",
        "latest": [
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "4b980458267c9ff73ace89ec344ad3df186e9129e014add62bfc3f694f856c35",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe0f7a8478631d50355203e25f7e5eff64f4159f4f52480a4f6ca1a373451ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "eb146d9f99b64e78bd63eb36a2827480682b1deccf7fc261a16c13ce8aaa7078",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "319b703874f7aed002dc2fb30201bea0f600dcfd916fb6d82fe1f8a515ec3a67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "61374b4955e1b13299001b780f7d143bfa5bba424f4ff243040c6a2f5204d4b3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67e14c638be7bfb1e3b292b59704384b368e51574e52fe20103464717aea1ba2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "fb54def25fa854cbd2e043ae72739ab36eb582bd95d1fdd147593406a814b35e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "f938bced7de2b948a548c6d03bb517089a0d21ca02bbfad62a61a3dc53dbff2f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "6bf254f977633d6a36c2743cd79a377eec79939842ea32264ea2a5471c5cf354",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "93d5a3bb8b31b6dd7804af547b7152f00d1b99a04b99761432e16f01fd73b240",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "a7a2e9d720bdbe665d3a8c5bc1069677b13ad4ec37b94216a56ff99c18aca332",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "136807a7398673d616d69c7471215be442a8f3046752ff2333c580ad5700b407"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T205307+0200-e5d0c0deee73-29859135572-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T18:54:13.400Z",
      "computedAt": "2026-07-21T20:53:07+02:00",
      "gitSha": "e5d0c0deee73e3d64804d4005542c906336db5f9",
      "previousFrameHash": "136807a7398673d616d69c7471215be442a8f3046752ff2333c580ad5700b407",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29859135572",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "323e7b264b622cbbc8847011cbcee7f72dc712303dc5a3057b33fe234e970ac3",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "ff65286c8e769d15bcf720331d66f6fcd898e474af6f210cf4e7f05e2c39430b",
          "bytes": 94059,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "5bfeaaffe3306bee945eb72672679fa70dd0616e4ddce48fcbf64616ff13c38a",
          "bytes": 1125861,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "e34ac758e53be6bbaeb897f179ceecc161d381756d34871b6bce3a89d936d53c",
          "bytes": 3328703,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "bbaa561074da7f3162cd56ced4d946a8db14edb631b6d44a0254899353b08e87",
          "bytes": 601537,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "d4fc7bf0ec4c913fb90d02c9e8aaf2fcf71bf1c636e1f0ff267cef23b3935dad",
          "bytes": 560413,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "dd1306acd660af4d7f0f36536fd599b332519e1492f551375308720e0dc37b9b",
          "bytes": 28212,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "1d9a161ef5cb5d7442ad544872842eb7e67d8392e25942a0c84e687d622bc7d8",
          "bytes": 15416,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "aa828e7c802b03a004c6db0e31c1238c86ea81206e427c96d87a96260c2f287c",
          "bytes": 236271,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "a240b99f0d65532e6232584b939e61798b1a70f0930d220f32d6b3afcd8457dc",
          "bytes": 138288,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "c61dc4840c66945e6446bb44b6393502c5f222430896e4396f49600b9bb57029",
          "bytes": 15561,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "c42d90ee1ab86b5813341acdd7e7c2620e09aa05d2898890bfada047a15dcfc9",
          "bytes": 7380,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "586f0ec210c387122274e9366996e24261768d39e797250dc422af586d7bc895",
          "bytes": 948490,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T18:53:07.000Z:ff862ad0a4d1",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T18:53:07.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T18:49:27.000Z",
          "retrievedAt": "2026-07-21T18:54:13.400Z",
          "computedAt": "2026-07-21T18:53:07.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.2444481390687,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "ff862ad0a4d1578646a9f03ef645f011647a460a97146f0cd3cf3c625f042990",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T18:53:07.000Z:6acdbf1efca2",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T18:53:07.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T18:21:28.000Z",
          "retrievedAt": "2026-07-21T18:40:04.000Z",
          "computedAt": "2026-07-21T18:53:07.000Z",
          "archivedAt": null,
          "value": 47,
          "rawValue": 47,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6acdbf1efca2842ad6c46d04466f708d6516c03a565155e7782def583a4af123",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T18:53:07.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T18:53:07.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T18:40:04.000Z",
          "computedAt": "2026-07-21T18:53:07.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T18:53:07.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T18:53:07.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T18:40:04.000Z",
          "computedAt": "2026-07-21T18:53:07.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T18:53:07.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T18:53:07.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T16:19:30.000Z",
          "retrievedAt": "2026-07-21T18:40:04.000Z",
          "computedAt": "2026-07-21T18:53:07.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T20:53:07+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T18:40:04.000Z",
            "lastAttemptAt": "2026-07-21T18:40:04.000Z",
            "lastSuccessAt": "2026-07-21T18:40:04.000Z",
            "computedAt": "2026-07-21T20:53:07+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T18:40:04.000Z",
            "lastAttemptAt": "2026-07-21T18:40:04.000Z",
            "lastSuccessAt": "2026-07-21T18:40:04.000Z",
            "computedAt": "2026-07-21T20:53:07+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T16:19:30.000Z",
            "retrievedAt": "2026-07-21T18:40:04.000Z",
            "lastAttemptAt": "2026-07-21T18:40:04.000Z",
            "lastSuccessAt": "2026-07-21T18:40:04.000Z",
            "computedAt": "2026-07-21T20:53:07+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-22T04:19:30.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T18:21:28.000Z",
            "retrievedAt": "2026-07-21T18:40:04.000Z",
            "lastAttemptAt": "2026-07-21T18:40:04.000Z",
            "lastSuccessAt": "2026-07-21T18:40:04.000Z",
            "computedAt": "2026-07-21T20:53:07+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T00:21:28.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T18:49:27.000Z",
            "retrievedAt": "2026-07-21T18:54:13.400Z",
            "lastAttemptAt": "2026-07-21T18:54:13.400Z",
            "lastSuccessAt": "2026-07-21T18:54:13.400Z",
            "computedAt": "2026-07-21T20:53:07+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T00:49:27.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T20:53:07+02:00",
        "latest": [
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "ae314c0c0e5add7be809ef22f3cb867cde0b9637af82461355d492ee5021dfb0",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe0f7a8478631d50355203e25f7e5eff64f4159f4f52480a4f6ca1a373451ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "4030adc88987abadd6e3c98de31c46f397f77c37e42d9610b3105b5ac3306574",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "bd6b74b0dee967fb7ffda2ed1cd52373f4899674ec03f4fc26fcc29f7c87ade3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "1411c73e3331e850687d54905368b92260822bffb6a8c643dc0fe46654f44f89",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "43c856f79b1e238518a8bb0c1ecc77d0a9a0f444f5ab47152fdc36033171b219",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "c44acb307dd945efee4d4bad35f9afd5ee1528b438da738c934f443d8fc13f8f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "64b85029791c1cf1583fb0382012e483767574cfb5c26606a622c23cd763413f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "c84ffcc5f99f83056841a83f48101e03d0ba81f3dc55196f7572125d29ea1b2f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "faac329f956147cb90bc7cb799a52a1ba3ec83e80c48008ff8688913dd7609e8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "4f5bb41d37db421a074df2edffc47b1d258e0a70e9351146167474c2ae9e8001",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "2aa71d40121bb4f80617056787796e8c45a58de88cf577d62ae80aaddb6aa4a2"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T213015+0200-3a93d62332d2-29861905329-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T19:32:51.204Z",
      "computedAt": "2026-07-21T21:30:15+02:00",
      "gitSha": "3a93d62332d258c874d083079be09e06be794afe",
      "previousFrameHash": "2aa71d40121bb4f80617056787796e8c45a58de88cf577d62ae80aaddb6aa4a2",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29861905329",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "323e7b264b622cbbc8847011cbcee7f72dc712303dc5a3057b33fe234e970ac3",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "ff65286c8e769d15bcf720331d66f6fcd898e474af6f210cf4e7f05e2c39430b",
          "bytes": 94059,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "8413c075bf5a4989ab0e280be6079e6aec49a4a84d43cafa87b4a159d37101ea",
          "bytes": 1125861,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "e34ac758e53be6bbaeb897f179ceecc161d381756d34871b6bce3a89d936d53c",
          "bytes": 3328703,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "2ce80675dc67c931d7da17286a2d367c6dc12e74d08b25608afa4e530ef3113f",
          "bytes": 601537,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "9f607c1abdd78f68c22f29d6f44c906850f6188b44ea25bfc0df7b937d5d9f4b",
          "bytes": 560413,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "dd1306acd660af4d7f0f36536fd599b332519e1492f551375308720e0dc37b9b",
          "bytes": 28212,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "f0ca02c8ee74856e84f4d82a4bd74e7d52963a0a00885141d7d2a2057557972a",
          "bytes": 15416,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "50911f312898112775701a50a759a9d6bace5bc1862e014c2802efcd8189b5d3",
          "bytes": 236271,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "f748afdf43102cdea463ad2928c6b7430e0aa0d24c5a1d1236733754c8f9f0de",
          "bytes": 138288,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "09c8e7e98f37490b184eeb0e39536002607ba61ee76be92e655c1d0086d22f4f",
          "bytes": 15560,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "b41ec92eca35985126de11ab6c11d8cc7709c3f5a99fa44108e7b5be2b66fd92",
          "bytes": 7380,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "2fe876aebd6867404f19eaee0f46fb9b4b1a1546fafdaec65f3407efa7d32504",
          "bytes": 957912,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T19:30:15.000Z:b96441a01438",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T19:30:15.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T19:19:27.000Z",
          "retrievedAt": "2026-07-21T19:32:51.204Z",
          "computedAt": "2026-07-21T19:30:15.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.2444481390687,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "b96441a014386ca41d0e17694dd5cd84f42dc8bb371ba896e1506845720272a3",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T19:30:15.000Z:6acdbf1efca2",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T19:30:15.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T19:24:48.000Z",
          "retrievedAt": "2026-07-21T19:26:05.000Z",
          "computedAt": "2026-07-21T19:30:15.000Z",
          "archivedAt": null,
          "value": 47,
          "rawValue": 47,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6acdbf1efca2842ad6c46d04466f708d6516c03a565155e7782def583a4af123",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T19:30:15.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T19:30:15.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T19:26:05.000Z",
          "computedAt": "2026-07-21T19:30:15.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T19:30:15.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T19:30:15.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T19:26:05.000Z",
          "computedAt": "2026-07-21T19:30:15.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T19:30:15.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T19:30:15.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T16:19:30.000Z",
          "retrievedAt": "2026-07-21T19:26:05.000Z",
          "computedAt": "2026-07-21T19:30:15.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T21:30:15+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T19:26:05.000Z",
            "lastAttemptAt": "2026-07-21T19:26:05.000Z",
            "lastSuccessAt": "2026-07-21T19:26:05.000Z",
            "computedAt": "2026-07-21T21:30:15+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T19:26:05.000Z",
            "lastAttemptAt": "2026-07-21T19:26:05.000Z",
            "lastSuccessAt": "2026-07-21T19:26:05.000Z",
            "computedAt": "2026-07-21T21:30:15+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T16:19:30.000Z",
            "retrievedAt": "2026-07-21T19:26:05.000Z",
            "lastAttemptAt": "2026-07-21T19:26:05.000Z",
            "lastSuccessAt": "2026-07-21T19:26:05.000Z",
            "computedAt": "2026-07-21T21:30:15+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-22T04:19:30.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T19:24:48.000Z",
            "retrievedAt": "2026-07-21T19:26:05.000Z",
            "lastAttemptAt": "2026-07-21T19:26:05.000Z",
            "lastSuccessAt": "2026-07-21T19:26:05.000Z",
            "computedAt": "2026-07-21T21:30:15+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T01:24:48.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T19:19:27.000Z",
            "retrievedAt": "2026-07-21T19:32:51.204Z",
            "lastAttemptAt": "2026-07-21T19:32:51.204Z",
            "lastSuccessAt": "2026-07-21T19:32:51.204Z",
            "computedAt": "2026-07-21T21:30:15+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T01:19:27.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T21:30:15+02:00",
        "latest": [
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "2d929067f1589fa80c57506e7e8eae0d93fbc8c8c79da6ec0afb523b44e83da0",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe0f7a8478631d50355203e25f7e5eff64f4159f4f52480a4f6ca1a373451ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "86c0e3481525dd83cee2b713967463ab4779c015adc06e1acb9cfb99a4bafc3a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "6f40719afee8e610b551c37560b9a45d8685089d39584d26691a846e013166b2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "70146874a53548d2e227f6cb6ec50f31f702757798255c507a3a15bd8f79e805",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "66d206575dfc32d000d61d4199d03ab3799eed9181997c23f4717befbedf84f1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "0e4fcb5bd77441aaae72858cfc4e639e395a2d5319770aa40f1b472e497be823",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "12c6d68eb985bf21e2bd4adc84bb8a9106f279afe61c5200f740c38094414ac8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "ec5120d1925a410334552a9f105bf49744e7714dccb05b9595ae3bd4720d72e6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "272e6cd377c360738b650be2bbdb60d1c848a85eef051e604b1a9768aba6d1bf",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "47cb96f4385ac2bd1b07db31096c5c7761f8ef04defa63476b657b1f1fe8a2dd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "8841aa79d2e28c79f262f767790641ba3f8d3d09ff09846aa803326be19a0071"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260721T213713+0200-7aff720855c7-29862379607-1",
      "date": "2026-07-21",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T19:39:30.637Z",
      "computedAt": "2026-07-21T21:37:13+02:00",
      "gitSha": "7aff720855c71d54ad4c758fdd2becfda396d0b1",
      "previousFrameHash": "8841aa79d2e28c79f262f767790641ba3f8d3d09ff09846aa803326be19a0071",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29862379607",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "323e7b264b622cbbc8847011cbcee7f72dc712303dc5a3057b33fe234e970ac3",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "ff65286c8e769d15bcf720331d66f6fcd898e474af6f210cf4e7f05e2c39430b",
          "bytes": 94059,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "cc0d0603f2d089ff771713759f4588c8bd6edac7de4f4d3a52e0aa58e3da78eb",
          "bytes": 1125861,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "e34ac758e53be6bbaeb897f179ceecc161d381756d34871b6bce3a89d936d53c",
          "bytes": 3328703,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "a77cef3c21bc48f46107136b51ac819e6b9b27df162961c55e7236cf65381489",
          "bytes": 601537,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "63085e67fe960422df9726a8dbc2979b1d3fcba0d4e1451d4c76b9487b971579",
          "bytes": 560413,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "dd1306acd660af4d7f0f36536fd599b332519e1492f551375308720e0dc37b9b",
          "bytes": 28212,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "4e56578fc76192b942473aba92eaad642e356a2660ffac5a2abd5ef4eb4210f0",
          "bytes": 15416,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "f475c90dbbcb9b0089737d91ab45fe4e8795b8e6b38712cc639c85b4fa099d82",
          "bytes": 236271,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "04ac76f4284f00ca46cef7841ac40d0240051441532ed1a4e4de4bcf5464355c",
          "bytes": 138288,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "544aaccfbefacccbf71381b659cdc8f37ca58e71396e549d966ff65be7b83f60",
          "bytes": 15560,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "1bf29583e3d28027a7346b82466c329f6edd19d1ed381c3891c28b5ea938e9e9",
          "bytes": 7380,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "90af4da12f0774f71baab4fd93cf561a0a8357136b49fd44acacc170f8f22d1a",
          "bytes": 967334,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T19:37:13.000Z:fdc050d8a51d",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T19:37:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T19:34:34.000Z",
          "retrievedAt": "2026-07-21T19:39:30.637Z",
          "computedAt": "2026-07-21T19:37:13.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.2444481390687,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "fdc050d8a51d62d1f68d171dcb534e4912d28426a1b255c5bb8f4d612f2bfc47",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T19:37:13.000Z:6acdbf1efca2",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T19:37:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T19:24:48.000Z",
          "retrievedAt": "2026-07-21T19:26:05.000Z",
          "computedAt": "2026-07-21T19:37:13.000Z",
          "archivedAt": null,
          "value": 47,
          "rawValue": 47,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6acdbf1efca2842ad6c46d04466f708d6516c03a565155e7782def583a4af123",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T19:37:13.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T19:37:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T19:26:05.000Z",
          "computedAt": "2026-07-21T19:37:13.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T19:37:13.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T19:37:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T19:26:05.000Z",
          "computedAt": "2026-07-21T19:37:13.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T19:37:13.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T19:37:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T16:19:30.000Z",
          "retrievedAt": "2026-07-21T19:26:05.000Z",
          "computedAt": "2026-07-21T19:37:13.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-21T21:37:13+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T19:26:05.000Z",
            "lastAttemptAt": "2026-07-21T19:26:05.000Z",
            "lastSuccessAt": "2026-07-21T19:26:05.000Z",
            "computedAt": "2026-07-21T21:37:13+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T19:26:05.000Z",
            "lastAttemptAt": "2026-07-21T19:26:05.000Z",
            "lastSuccessAt": "2026-07-21T19:26:05.000Z",
            "computedAt": "2026-07-21T21:37:13+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T16:19:30.000Z",
            "retrievedAt": "2026-07-21T19:26:05.000Z",
            "lastAttemptAt": "2026-07-21T19:26:05.000Z",
            "lastSuccessAt": "2026-07-21T19:26:05.000Z",
            "computedAt": "2026-07-21T21:37:13+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-22T04:19:30.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T19:24:48.000Z",
            "retrievedAt": "2026-07-21T19:26:05.000Z",
            "lastAttemptAt": "2026-07-21T19:26:05.000Z",
            "lastSuccessAt": "2026-07-21T19:26:05.000Z",
            "computedAt": "2026-07-21T21:37:13+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T01:24:48.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T19:34:34.000Z",
            "retrievedAt": "2026-07-21T19:39:30.637Z",
            "lastAttemptAt": "2026-07-21T19:39:30.637Z",
            "lastSuccessAt": "2026-07-21T19:39:30.637Z",
            "computedAt": "2026-07-21T21:37:13+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T01:34:34.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-21T21:37:13+02:00",
        "latest": [
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "93e8c21b837ce430995faebdbe9487e590fe91551afc301256754c9b77978da5",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe0f7a8478631d50355203e25f7e5eff64f4159f4f52480a4f6ca1a373451ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "f188276ae04d1ab7dbf1a5133d905c822c313f2cdb0ce5c6abf906eed870fc9d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "eb429acc5bfe07bcfd04bf6b8341b97d3699e926aed4cc25af8e59378a819304",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "0a496fd53d468960b664edc2a6da2475699a95d08fc602d5c93290cad19af19c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "910aa014d769c5ccc91f422fe242fd4be0e7d2d109e1d83935b79c06012b1de3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "bc8e7c1513062d5fb852ba0798259dac5677d99fe97452a160ab96a73fd3a531",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "57e1e13a1555a5d1ac5b24c3082067e860c9eb70f8b0b944054baa6c90d60fc7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "e8b5b474496380d457bea93bf574f94ef62e415aa2937b5de180577f92bbaa52",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "a65c3b96ad354a865704d31d0fb48f8d771c865d37eeca56635235a4f63a1c89",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "844261243c616d16",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "europe-s-endette-sans-dette-emprunts-communs",
            "title": "L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio",
            "url": "https://l0g.fr/posts/europe-s-endette-sans-dette-emprunts-communs/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Europe s'endette sans dette : la pile d'emprunts communs qui n'apparaît dans aucun ratio.",
            "objectId": "article:europe-s-endette-sans-dette-emprunts-communs",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "877d22ec58970982ff72688f9422f0b69065277f26dd1cc82da57178500be328",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ae2034dd525c2a7d",
            "date": "2026-07-19T16:14:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "europe-borrows-without-debt",
            "title": "Europe borrows without debt: the stack of common borrowing that appears in no ratio",
            "url": "https://l0g.fr/en/analysis/europe-borrows-without-debt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Europe borrows without debt: the stack of common borrowing that appears in no ratio.",
            "objectId": "article:en:europe-borrows-without-debt",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:14:00.000Z",
            "previousHash": null,
            "currentHash": "c29a8a6965987b3a3fb1e27bdc8534ebfc5fc746fcb76660775ce3445f82f9aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "413795ae26f7632dd453c1169e62f0ec1a260c6b94063d745dd368a89db30a70"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260722T015427+0200-a8f53c9f221d-29878671815-1",
      "date": "2026-07-22",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-21T23:56:39.521Z",
      "computedAt": "2026-07-22T01:54:27+02:00",
      "gitSha": "a8f53c9f221dfe88e0d78f14a1de5af081c0487d",
      "previousFrameHash": "413795ae26f7632dd453c1169e62f0ec1a260c6b94063d745dd368a89db30a70",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29878671815",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "5f59e7e31fdd7467cdf3238771175e3185ed19b7df8d6cfcb3c757f3a3c2d308",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "ff65286c8e769d15bcf720331d66f6fcd898e474af6f210cf4e7f05e2c39430b",
          "bytes": 94059,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "dfa79920872d36c98b87d674f6ce769a77d24dd3e36db441b14f927aebcc911f",
          "bytes": 1128959,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "5d18f0b02d45fc80024072e866fca0b9f608c4a60e5bc500654ad7b36848a990",
          "bytes": 3353344,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "51adce91bba4def4275aee41daf465262931b62f905cd1d88dc796b15e9e473d",
          "bytes": 601537,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "1be2a5f8dd57c506162205379ef934f4252b88e477ad8a3d73165657d706adef",
          "bytes": 560413,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "dd1306acd660af4d7f0f36536fd599b332519e1492f551375308720e0dc37b9b",
          "bytes": 28212,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "7c372a98b6bdfe72357ec48bb2fbb744d62bf64867fcc409cf442938fbc16d86",
          "bytes": 15435,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "588e438eff76f6ad9248ad2723f50d1616ecc36b585fab6ffaa3ea3176f686e6",
          "bytes": 237788,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "8af7d2d75579df50ef4cbf7dc3f391e0e725df92ea2024d4c3531a32b9e0efc8",
          "bytes": 137671,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "0ec0667a3d211b36115215c3251a0ea3b183ce1904efeb15475abdb42186350e",
          "bytes": 15561,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "4a4336d8ed228ee07749df9e8a75ccf565fbdad931b8d176bde3a7bc7d9a5a06",
          "bytes": 7380,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "2fec3e93d242bd299f1bad5ab1f03fa2ca47fc4583a8a18d5153d43c7052842c",
          "bytes": 976758,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-21T23:54:27.000Z:baae831facf1",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-21T23:54:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T23:54:20.000Z",
          "retrievedAt": "2026-07-21T23:56:39.521Z",
          "computedAt": "2026-07-21T23:54:27.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.33058899458053,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "baae831facf1ebeed81792bec405bb912f524aff8ff8712a1c1bd5f068921f58",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-21T23:54:27.000Z:6acdbf1efca2",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-21T23:54:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T23:26:14.000Z",
          "retrievedAt": "2026-07-21T23:53:57.000Z",
          "computedAt": "2026-07-21T23:54:27.000Z",
          "archivedAt": null,
          "value": 47,
          "rawValue": 47,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6acdbf1efca2842ad6c46d04466f708d6516c03a565155e7782def583a4af123",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-21T23:54:27.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-21T23:54:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
          "retrievedAt": "2026-07-21T23:53:57.000Z",
          "computedAt": "2026-07-21T23:54:27.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-21T23:54:27.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-21T23:54:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
          "retrievedAt": "2026-07-21T23:53:57.000Z",
          "computedAt": "2026-07-21T23:54:27.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-21T23:54:27.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-21T23:54:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-21T23:28:16.000Z",
          "retrievedAt": "2026-07-21T23:53:57.000Z",
          "computedAt": "2026-07-21T23:54:27.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-22T01:54:27+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T04:02:03.000Z",
            "retrievedAt": "2026-07-21T23:53:57.000Z",
            "lastAttemptAt": "2026-07-21T23:53:57.000Z",
            "lastSuccessAt": "2026-07-21T23:53:57.000Z",
            "computedAt": "2026-07-22T01:54:27+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T16:02:03.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T10:21:24.000Z",
            "retrievedAt": "2026-07-21T23:53:57.000Z",
            "lastAttemptAt": "2026-07-21T23:53:57.000Z",
            "lastSuccessAt": "2026-07-21T23:53:57.000Z",
            "computedAt": "2026-07-22T01:54:27+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-22T22:21:24.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T23:28:16.000Z",
            "retrievedAt": "2026-07-21T23:53:57.000Z",
            "lastAttemptAt": "2026-07-21T23:53:57.000Z",
            "lastSuccessAt": "2026-07-21T23:53:57.000Z",
            "computedAt": "2026-07-22T01:54:27+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-22T11:28:16.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T23:26:14.000Z",
            "retrievedAt": "2026-07-21T23:53:57.000Z",
            "lastAttemptAt": "2026-07-21T23:53:57.000Z",
            "lastSuccessAt": "2026-07-21T23:53:57.000Z",
            "computedAt": "2026-07-22T01:54:27+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T05:26:14.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (8 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-21T23:54:20.000Z",
            "retrievedAt": "2026-07-21T23:56:39.521Z",
            "lastAttemptAt": "2026-07-21T23:56:39.521Z",
            "lastSuccessAt": "2026-07-21T23:56:39.521Z",
            "computedAt": "2026-07-22T01:54:27+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T05:54:20.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-22T01:54:27+02:00",
        "latest": [
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "811e447834a7095787d8a9b5393fa932956dbc38c43fbef5739a10c5b7fa92b6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "9ce2d488962a06fa3cda6e1b8a96aaa8cf83c1f9e1176c80eaad3b9f485279d0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "bb1b7151b7502cb517e052f7e833f3532cc8c3545ad38ca5ac2aac55f46d8efe",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe0f7a8478631d50355203e25f7e5eff64f4159f4f52480a4f6ca1a373451ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fc5902fc940bcc4ec33683617d30b70ba1785b34eeb39259b0293c8973613393",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "6ad467d608a4f64cb7584811411c54252d6d9c2fadaefce132ba949397bf956a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "1d14356d0fadf2c763c35ed85c785e1c16113ce0e476d9be9c17625b22ef20f2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "a5745775a52fb027926b54892fbbb76ae589a3e808503f316e74117760fd3299",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "4320db2c23f5cb2bb1eee3cdee9dcd1109f5676a1dc53e7a0bf88720fb886bad",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "2c69832216f054d027b1ca9319ddde0bdce53c7923919c3c9588e1185963430e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "2fb2b76a590c2fca4b17a11295b1de7e6438301aca43e9a21636c580b490f9f2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d53789758336cd5f",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ecb-2011-remake-oil-shock",
            "title": "The ECB faces a 2011 remake: tightening into an oil shock",
            "url": "https://l0g.fr/en/analysis/ecb-2011-remake-oil-shock/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ECB faces a 2011 remake: tightening into an oil shock.",
            "objectId": "article:en:ecb-2011-remake-oil-shock",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "d64106238c5e3e8863c89ee58f8f78152566af3f733c631e4af0bc376cea6ca8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "e8b875fe62faa236",
            "date": "2026-07-19T16:15:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "bce-remake-2011-choc-petrolier",
            "title": "La BCE face au remake de 2011 : resserrer dans un choc pétrolier",
            "url": "https://l0g.fr/posts/bce-remake-2011-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La BCE face au remake de 2011 : resserrer dans un choc pétrolier.",
            "objectId": "article:bce-remake-2011-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:15:00.000Z",
            "previousHash": null,
            "currentHash": "87e5ca087e4615829a72cb92a5340f515cc6469f04e1e5f72545c9cc67e02c07",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "f7ced2c66caf0e99f160fe3fb1d1415c7bd14c9f64b2a0a3f1e679a286ae81d4"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260722T103027+0200-4cf5879bd559-29912824831-1",
      "date": "2026-07-22",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-22T10:41:35.715Z",
      "computedAt": "2026-07-22T10:30:27+02:00",
      "gitSha": "4cf5879bd559d89483c7289dadf3d6b794d12c82",
      "previousFrameHash": "f7ced2c66caf0e99f160fe3fb1d1415c7bd14c9f64b2a0a3f1e679a286ae81d4",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29912824831",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "459cac3ab5c32fa19d476e3dd6cb279df50aa0ef4eec4a9bf0d0ca70f1c7ac78",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "ff65286c8e769d15bcf720331d66f6fcd898e474af6f210cf4e7f05e2c39430b",
          "bytes": 94059,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "49842963eeb14fc19da2c18601f2108f554e4a07d01ebff1af382fe2cd140748",
          "bytes": 1138565,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ddb2714af8316983b00b74f2f81d30bfc950bb278245a3212b208594e38996e3",
          "bytes": 3372792,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "bfb03feb84c7a1317b7908ff4b198bd98e22d071e66c64a764f858e40c4be360",
          "bytes": 609313,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "5f5f22e4f46827dcbd310804059b0af7dc4fb6c145e43b0cd20b15e563438b97",
          "bytes": 567210,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "0dec9b0b8935637a1ce922a79090356ad7dd45b6deb4119f8ab59426553f5d8c",
          "bytes": 28212,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "afc13d8893d33adf224f9b03abd441bb641eb76a8c7a09975c3c0acad78e4be3",
          "bytes": 15542,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "7cba6122334303bfc9e3d8e27d19ef5e4df292dd47d858cdc095af9b9cb07ae0",
          "bytes": 239639,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "9ae74c33aa1a583345f9626128498cebebeb809abd3c85b08116810121ff5e2e",
          "bytes": 134986,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "942b31af4ec3d666ff126b6767ede17a62dae3850fc56a7d3dd8e7924875d975",
          "bytes": 15564,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "14b80d08a6595d7cdbdd4ea75c20d2f0c2b7060642d5ca5a6805913f83dd7044",
          "bytes": 7385,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "5564af7862c1962450076d85155d1c350cdf7f99bcc22bec614d64fbfb554231",
          "bytes": 995463,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-22T10:30:57.000Z:f0eb7ef9ccda",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-22T10:30:57.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T10:16:18.000Z",
          "retrievedAt": "2026-07-22T10:30:57.000Z",
          "computedAt": "2026-07-22T10:30:57.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54,
          "scale": 100,
          "level": null,
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "f0eb7ef9ccda0393570575e6da0013ac3a476f05e8b43476594e6417f53c971f",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-22 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-22T10:30:57.000Z:7f5017693371",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-22T10:30:57.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T10:15:55.000Z",
          "retrievedAt": "2026-07-22T10:30:57.000Z",
          "computedAt": "2026-07-22T10:30:57.000Z",
          "archivedAt": null,
          "value": 48,
          "rawValue": 48,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7f50176933713a20d27ac83a39ea68d099d361963efe83a7ceab77104468c741",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-22 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-22T10:30:57.000Z:121ce7c1dec2",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-22T10:30:57.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T05:49:16.000Z",
          "retrievedAt": "2026-07-22T10:30:57.000Z",
          "computedAt": "2026-07-22T10:30:57.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": null,
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "121ce7c1dec210d4d0bd94cb198c6711daa6088867b2d43c744de921742e4c96",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-22 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-22T10:30:57.000Z:e25bbb5f4bb6",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-22T10:30:57.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T04:02:11.000Z",
          "retrievedAt": "2026-07-22T10:30:57.000Z",
          "computedAt": "2026-07-22T10:30:57.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "e25bbb5f4bb60b1cbea1dfe3e7b1ac3bb1289bf0805168309a4c990b2eba9de8",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-22 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-22T10:30:57.000Z:ed309f6b65f0",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-22T10:30:57.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T10:16:32.000Z",
          "retrievedAt": "2026-07-22T10:30:57.000Z",
          "computedAt": "2026-07-22T10:30:57.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "ed309f6b65f0c7e7345300ad4e0acfb40c9e5041b2a31e0e480d8ac31932e31c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-22 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-22T10:30:27+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T04:02:11.000Z",
            "retrievedAt": "2026-07-22T10:30:57.000Z",
            "lastAttemptAt": "2026-07-22T10:30:57.000Z",
            "lastSuccessAt": "2026-07-22T10:30:57.000Z",
            "computedAt": "2026-07-22T10:30:27+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-23T16:02:11.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T05:49:16.000Z",
            "retrievedAt": "2026-07-22T10:30:57.000Z",
            "lastAttemptAt": "2026-07-22T10:30:57.000Z",
            "lastSuccessAt": "2026-07-22T10:30:57.000Z",
            "computedAt": "2026-07-22T10:30:27+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-23T17:49:16.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T10:16:32.000Z",
            "retrievedAt": "2026-07-22T10:30:57.000Z",
            "lastAttemptAt": "2026-07-22T10:30:57.000Z",
            "lastSuccessAt": "2026-07-22T10:30:57.000Z",
            "computedAt": "2026-07-22T10:30:27+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-22T22:16:32.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T10:15:55.000Z",
            "retrievedAt": "2026-07-22T10:30:57.000Z",
            "lastAttemptAt": "2026-07-22T10:30:57.000Z",
            "lastSuccessAt": "2026-07-22T10:30:57.000Z",
            "computedAt": "2026-07-22T10:30:27+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T16:15:55.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (9 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (9 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T10:38:55.000Z",
            "retrievedAt": "2026-07-22T10:41:35.715Z",
            "lastAttemptAt": "2026-07-22T10:41:35.715Z",
            "lastSuccessAt": "2026-07-22T10:41:35.715Z",
            "computedAt": "2026-07-22T10:30:27+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T16:38:55.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-22T10:30:27+02:00",
        "latest": [
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "b4e60e246895436ab333920606c22b5375b66e9876ee219e60214698a95bf79e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "8e20c9d67cf29fff65ac5dbdf04c253bc5eca7aac36ddac11065614143ce0ec6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "811e447834a7095787d8a9b5393fa932956dbc38c43fbef5739a10c5b7fa92b6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "9ce2d488962a06fa3cda6e1b8a96aaa8cf83c1f9e1176c80eaad3b9f485279d0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "99cf3127c6ed1dfddb1fbbef1863d23f018eb58f1f593f439296077d2ae5d166",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe0f7a8478631d50355203e25f7e5eff64f4159f4f52480a4f6ca1a373451ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "10d87cad5cfa219d8b5d36bf8fcabaca6e48aa8a416d5453b0de606700f62cd9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "7852f82dcb403b4ee26c4c6d88e1378dc8fdb5126ee355523590d1401b3da517",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "cc12c04e1abcfe49b0a188e369527e87c1103e06cab9d5c5b19ee136362a45f2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "51134717e5384417df12c0f6b4f8104d0dba9339d956688834cf96f839a1bf3a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "8ee8cf8eec4b4838a1b63efcbf32ba3e1743e61718b5d1a5eeec4dbaab59ded1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "3b5dcaa0bf361409d2ca60d6d1beaf04645017ec75f45f160d1ae183a6396b6f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "43c8fec45f8dce52954f38ce26c564f8b86ab8a154a9a085e56ba80321ce91e7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "75d9cb1dcdba4121903f7334aa1a547a913079787661b79b1849dfb4933638e4"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260722T130005+0200-3333248760bc-29914061975-1",
      "date": "2026-07-22",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-22T11:01:18.701Z",
      "computedAt": "2026-07-22T13:00:05+02:00",
      "gitSha": "3333248760bc5627e7ae2d85bda81c63b2cadc05",
      "previousFrameHash": "75d9cb1dcdba4121903f7334aa1a547a913079787661b79b1849dfb4933638e4",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29914061975",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "459cac3ab5c32fa19d476e3dd6cb279df50aa0ef4eec4a9bf0d0ca70f1c7ac78",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "ff65286c8e769d15bcf720331d66f6fcd898e474af6f210cf4e7f05e2c39430b",
          "bytes": 94059,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "2807c25814745e2d6ad916e1cd254f97060f7cd8dda2aef682ec4d60e53fba86",
          "bytes": 1138565,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ddb2714af8316983b00b74f2f81d30bfc950bb278245a3212b208594e38996e3",
          "bytes": 3372792,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "8cf454a5681d5f0928731340bba9763e34e78f2ed1d85dc7d6eccebec05e286c",
          "bytes": 609313,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "d4a2d9e15b89be3b5189ac5305a9f6bbe8cbdf70741b9615554e18b660681aa8",
          "bytes": 567210,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "0dec9b0b8935637a1ce922a79090356ad7dd45b6deb4119f8ab59426553f5d8c",
          "bytes": 28212,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "612dcc63c1ad461dfc8e9885292d4fdfd939a07e96344cf21a46deccce8ff085",
          "bytes": 15542,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "dd6dd0eb0fa1e42782c8b3da1f61e943a152abc7c946e6172ecccab1fd525a9e",
          "bytes": 239639,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "734eb7f96bb502cad943f4aa4c150716a178e0ad909173cd84a42cd83fec81a2",
          "bytes": 134986,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "3a6ac4ca8ae8338400dcd2854b2eb1da2e99eea469770d7b29a7bc0dd87098c5",
          "bytes": 15565,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "edf9b4c010ba1af309509786b1fa298df957f304786fdfc16c8b1edb81ae689e",
          "bytes": 7385,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "f0428cf7cadf8f9e25410c0ef65bba52bda8e54c3d62a9a284f822bc56a505bb",
          "bytes": 1005229,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-22T11:01:17.000Z:722a4f1c93e2",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-22T11:01:17.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T10:46:26.000Z",
          "retrievedAt": "2026-07-22T11:01:17.000Z",
          "computedAt": "2026-07-22T11:01:17.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54,
          "scale": 100,
          "level": null,
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "722a4f1c93e21a553ebee596b1bdd778562c1afb46ed7a2a1e424d86c400d768",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-22 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-22T11:01:17.000Z:49e790be173f",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-22T11:01:17.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T10:46:56.000Z",
          "retrievedAt": "2026-07-22T11:01:17.000Z",
          "computedAt": "2026-07-22T11:01:17.000Z",
          "archivedAt": null,
          "value": 48,
          "rawValue": 48,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "49e790be173f48594f7bd4a5b5f7578b65dd5255b0e064081b87fffd443e827d",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-22 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-22T11:01:17.000Z:e2296a6b5b3f",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-22T11:01:17.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T05:49:16.000Z",
          "retrievedAt": "2026-07-22T11:01:17.000Z",
          "computedAt": "2026-07-22T11:01:17.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": null,
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "e2296a6b5b3f42be42ccaa7bcc5bc3d0173e2f9c02fb18ef6397a95b2ef7b1b6",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-22 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-22T11:01:17.000Z:d273e9fa2cba",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-22T11:01:17.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T04:02:11.000Z",
          "retrievedAt": "2026-07-22T11:01:17.000Z",
          "computedAt": "2026-07-22T11:01:17.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "d273e9fa2cba9fe439e5b0c8716775cd948d6a41e5fc08df74b709f8f038e255",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-22 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-22T11:01:17.000Z:24929a9a2cdd",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-22T11:01:17.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T10:16:32.000Z",
          "retrievedAt": "2026-07-22T11:01:17.000Z",
          "computedAt": "2026-07-22T11:01:17.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "24929a9a2cddf23168840cb098681a90cd9667971b9731381159375ceda683f1",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-22 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-22T13:00:05+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T04:02:11.000Z",
            "retrievedAt": "2026-07-22T11:01:17.000Z",
            "lastAttemptAt": "2026-07-22T11:01:17.000Z",
            "lastSuccessAt": "2026-07-22T11:01:17.000Z",
            "computedAt": "2026-07-22T13:00:05+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-23T16:02:11.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T05:49:16.000Z",
            "retrievedAt": "2026-07-22T11:01:17.000Z",
            "lastAttemptAt": "2026-07-22T11:01:17.000Z",
            "lastSuccessAt": "2026-07-22T11:01:17.000Z",
            "computedAt": "2026-07-22T13:00:05+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-23T17:49:16.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T10:16:32.000Z",
            "retrievedAt": "2026-07-22T11:01:17.000Z",
            "lastAttemptAt": "2026-07-22T11:01:17.000Z",
            "lastSuccessAt": "2026-07-22T11:01:17.000Z",
            "computedAt": "2026-07-22T13:00:05+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-22T22:16:32.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T10:46:56.000Z",
            "retrievedAt": "2026-07-22T11:01:17.000Z",
            "lastAttemptAt": "2026-07-22T11:01:17.000Z",
            "lastSuccessAt": "2026-07-22T11:01:17.000Z",
            "computedAt": "2026-07-22T13:00:05+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T16:46:56.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (9 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (9 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T10:46:26.000Z",
            "retrievedAt": "2026-07-22T11:01:18.701Z",
            "lastAttemptAt": "2026-07-22T11:01:18.701Z",
            "lastSuccessAt": "2026-07-22T11:01:18.701Z",
            "computedAt": "2026-07-22T13:00:05+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T16:46:26.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-22T13:00:05+02:00",
        "latest": [
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "b4e60e246895436ab333920606c22b5375b66e9876ee219e60214698a95bf79e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "0381238e27ad86a26b53bbbd7d23359edba38b1c6b72931153eef75377c69bbd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "811e447834a7095787d8a9b5393fa932956dbc38c43fbef5739a10c5b7fa92b6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "9ce2d488962a06fa3cda6e1b8a96aaa8cf83c1f9e1176c80eaad3b9f485279d0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "135734b27845e703fb67fecd72928b4961008d746ae0f24d6a80ad0a43450516",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe0f7a8478631d50355203e25f7e5eff64f4159f4f52480a4f6ca1a373451ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "667c45cd1599d14d017d01ee62653150caf180a2a67eec342007f0c3c5e7fddc",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "ab28193b799bad1cf73cdf116d1b659d2bda526b936a4a9afb11b22ea05e2fee",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "de330090f74a22bb3a3f1f94545ed3f4163be2cdeeadd02e1eae8eed87f721d5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "160c7bc9e983fcabc9ea708cee7515d2d6ddde89ac190262716821839c26b303",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "917952d0d38993f4220726db1617b78ccb70582d7be09ed7686584d2677fc3d7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "0600d5458dd97c420090d5a75f767d2911f33498763d02ba0d0bb80804d8630f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "5361d949c5e6996857a81459c9be8ba751c720804d6698fd2b1affdcf4c1fbef",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "87e250c56c5369f20d609fa60e55e3b7e827a6f40798bda50e6e734cbd42d5ca"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260722T130508+0200-49c42edcd1d8-29914374517-1",
      "date": "2026-07-22",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-22T11:06:10.049Z",
      "computedAt": "2026-07-22T13:05:08+02:00",
      "gitSha": "49c42edcd1d82e40ac9c882df7dc03ec3003b9f0",
      "previousFrameHash": "87e250c56c5369f20d609fa60e55e3b7e827a6f40798bda50e6e734cbd42d5ca",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29914374517",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "459cac3ab5c32fa19d476e3dd6cb279df50aa0ef4eec4a9bf0d0ca70f1c7ac78",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "ff65286c8e769d15bcf720331d66f6fcd898e474af6f210cf4e7f05e2c39430b",
          "bytes": 94059,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "f710d9952dbf31ff7afb717d7ef1f5583a51f43ec9ebf13d16653dbc11826d9f",
          "bytes": 1138565,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ddb2714af8316983b00b74f2f81d30bfc950bb278245a3212b208594e38996e3",
          "bytes": 3372792,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "2e898dfece9d2df453ac0d0f37d0f9953898388a8d16b3d998363e9b5ffdb2ec",
          "bytes": 609313,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "8a1df4849e6009b24f772ff60fdd14148324ba8bac7f27932d72ae515a44618b",
          "bytes": 567210,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "0dec9b0b8935637a1ce922a79090356ad7dd45b6deb4119f8ab59426553f5d8c",
          "bytes": 28212,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "9bf6e8cc6f26244dbab893d9d50ab5ed9e896f935a986d70a3fbbd5882a66d7f",
          "bytes": 15542,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "4a1cd16c4beaf4d2bf21812de35ec169fe944440d45d0798a49b96a13f6feca7",
          "bytes": 239639,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "576f8ea38b7b693c04c72e169eae9bd3a4682e17bd1b789429f3ddcb5726496f",
          "bytes": 135064,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "6dc8ab314757a6c50d7bb1a7f5f50f1c70447a37d31a0a1a9cd9f1b598574f14",
          "bytes": 15565,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "f950a40234a97aac9dac6249b68258c3517cfacf923492d271a71c61560ccdb6",
          "bytes": 7385,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "088a01fbc1b1827ec9f455902eb8af8efa4513b005d69ad7e016a6e92324cf2a",
          "bytes": 1014638,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-22T11:05:08.000Z:3130bd60baea",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-22T11:05:08.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T11:02:17.000Z",
          "retrievedAt": "2026-07-22T11:06:10.049Z",
          "computedAt": "2026-07-22T11:05:08.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.323159385232564,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "3130bd60baea7453ef8af37a9727392f9342b9db0b7c0acd75105cb9f320f2ef",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-22T11:05:08.000Z:75bae066d8e3",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-22T11:05:08.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T10:46:56.000Z",
          "retrievedAt": "2026-07-22T11:01:17.000Z",
          "computedAt": "2026-07-22T11:05:08.000Z",
          "archivedAt": null,
          "value": 48,
          "rawValue": 48,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "75bae066d8e3ad7005821cf7caae132fdf4739a0923ec76040ee077297df16cb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-22T11:05:08.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-22T11:05:08.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T05:49:16.000Z",
          "retrievedAt": "2026-07-22T11:01:17.000Z",
          "computedAt": "2026-07-22T11:05:08.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-22T11:05:08.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-22T11:05:08.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T04:02:11.000Z",
          "retrievedAt": "2026-07-22T11:01:17.000Z",
          "computedAt": "2026-07-22T11:05:08.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-22T11:05:08.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-22T11:05:08.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T10:16:32.000Z",
          "retrievedAt": "2026-07-22T11:01:17.000Z",
          "computedAt": "2026-07-22T11:05:08.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-22T13:05:08+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T04:02:11.000Z",
            "retrievedAt": "2026-07-22T11:01:17.000Z",
            "lastAttemptAt": "2026-07-22T11:01:17.000Z",
            "lastSuccessAt": "2026-07-22T11:01:17.000Z",
            "computedAt": "2026-07-22T13:05:08+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-23T16:02:11.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T05:49:16.000Z",
            "retrievedAt": "2026-07-22T11:01:17.000Z",
            "lastAttemptAt": "2026-07-22T11:01:17.000Z",
            "lastSuccessAt": "2026-07-22T11:01:17.000Z",
            "computedAt": "2026-07-22T13:05:08+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-23T17:49:16.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T10:16:32.000Z",
            "retrievedAt": "2026-07-22T11:01:17.000Z",
            "lastAttemptAt": "2026-07-22T11:01:17.000Z",
            "lastSuccessAt": "2026-07-22T11:01:17.000Z",
            "computedAt": "2026-07-22T13:05:08+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-22T22:16:32.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T10:46:56.000Z",
            "retrievedAt": "2026-07-22T11:01:17.000Z",
            "lastAttemptAt": "2026-07-22T11:01:17.000Z",
            "lastSuccessAt": "2026-07-22T11:01:17.000Z",
            "computedAt": "2026-07-22T13:05:08+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T16:46:56.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (9 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (9 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T11:02:17.000Z",
            "retrievedAt": "2026-07-22T11:06:10.049Z",
            "lastAttemptAt": "2026-07-22T11:06:10.049Z",
            "lastSuccessAt": "2026-07-22T11:06:10.049Z",
            "computedAt": "2026-07-22T13:05:08+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T17:02:17.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-22T13:05:08+02:00",
        "latest": [
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "b4e60e246895436ab333920606c22b5375b66e9876ee219e60214698a95bf79e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "b81a0bc206575ded99810d53fa3d47224dad2ef17b685331dd5d617082a24e00",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "811e447834a7095787d8a9b5393fa932956dbc38c43fbef5739a10c5b7fa92b6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "9ce2d488962a06fa3cda6e1b8a96aaa8cf83c1f9e1176c80eaad3b9f485279d0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "99e0d45197c957e4daf6140a18335cc14bfe84321a30917c26a9bab2a3d19432",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe0f7a8478631d50355203e25f7e5eff64f4159f4f52480a4f6ca1a373451ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "2c8aa8f165db6599d74791bef5b2665dfc1df85442fd5e58b5caff2eae67645f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "c98328f9b1c7ebffbf3b68b8c1888382ac8065a7e89f7ed32f085260e7e57dbc",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "d1b8860bb3a5ba0ec78923145f69f46e7d1d29259befcbcb99998fd2aaab1904",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "357c2cc76d27602c222ded2b4cd8e6cf1538beb214480758831fa93496bdfdce",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "103ee1491cba7bf12288d6956638b9701000a52b607b9906c82f1127298d3067",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "12ac561f1df77de631fddfb89cc8fa226e5a401845f74adf68bb14931081ad8c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "ab6ba8d9f4ffcd6178d7f7fd777ed3de10f701053dd730015ee253e7efad4752",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "ebee504cf7828db33a49b3c33e83306e468c350c1b3a5fa1f62da7fec0dfbbea"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260722T131851+0200-497f53006786-29915234824-1",
      "date": "2026-07-22",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-22T11:19:52.903Z",
      "computedAt": "2026-07-22T13:18:51+02:00",
      "gitSha": "497f530067869a8eb55d6e4b786077ddc0e0e360",
      "previousFrameHash": "ebee504cf7828db33a49b3c33e83306e468c350c1b3a5fa1f62da7fec0dfbbea",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29915234824",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "459cac3ab5c32fa19d476e3dd6cb279df50aa0ef4eec4a9bf0d0ca70f1c7ac78",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "ff65286c8e769d15bcf720331d66f6fcd898e474af6f210cf4e7f05e2c39430b",
          "bytes": 94059,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "8bafeef86dfc5ff0b519a69a9eca4dce8bce4d8cb4684c556c8d75df990d2269",
          "bytes": 1138565,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "ddb2714af8316983b00b74f2f81d30bfc950bb278245a3212b208594e38996e3",
          "bytes": 3372792,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "5cc25011788e1f9070fc4e355691450d56ef3dd2a6decc1438f454af704aca3e",
          "bytes": 609313,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "a42f11a0c09b0db27d67d5f5074f451ee60ab33ecfe3001778d4fa19c49b2019",
          "bytes": 567210,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "0dec9b0b8935637a1ce922a79090356ad7dd45b6deb4119f8ab59426553f5d8c",
          "bytes": 28212,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "e7506f5f607dd9a29ef026edf0203272f114817c681767e71a4ad5a9316f2e51",
          "bytes": 15542,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "a9ed86492e2d4033c99915b2e7a6e79942137ff03cf906dd1e054d3a8221ec8a",
          "bytes": 239639,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "f3e68b1d84a9c5ed68010a764cd47c4c1957e00582efa4b34434a23c50aa0dfb",
          "bytes": 135064,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "00425b1a4a9cc7b2a4dbdf85b137d1bf45d6795113548c3b3703cd4a8a59cd41",
          "bytes": 15566,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "b48999ede3b2aef2b4a7a6aac8e17fc80c29d4217eb54039d33fa725bd74cf20",
          "bytes": 7385,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "5e9a37b7a42232b0f096f6fb7d3c5df437725d2c7e6c2dc4ca5c3a15cd81d534",
          "bytes": 1024062,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-22T11:18:51.000Z:44834a5b85be",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-22T11:18:51.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T11:16:35.000Z",
          "retrievedAt": "2026-07-22T11:19:52.903Z",
          "computedAt": "2026-07-22T11:18:51.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.323159385232564,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "44834a5b85bed7f9fc53251ffeda6f5d865b15f870933357ff0366d407b3a580",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-22T11:18:51.000Z:75bae066d8e3",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-22T11:18:51.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T10:46:56.000Z",
          "retrievedAt": "2026-07-22T11:16:17.000Z",
          "computedAt": "2026-07-22T11:18:51.000Z",
          "archivedAt": null,
          "value": 48,
          "rawValue": 48,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "75bae066d8e3ad7005821cf7caae132fdf4739a0923ec76040ee077297df16cb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-22T11:18:51.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-22T11:18:51.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T05:49:16.000Z",
          "retrievedAt": "2026-07-22T11:16:17.000Z",
          "computedAt": "2026-07-22T11:18:51.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-22T11:18:51.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-22T11:18:51.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T04:02:11.000Z",
          "retrievedAt": "2026-07-22T11:16:17.000Z",
          "computedAt": "2026-07-22T11:18:51.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-22T11:18:51.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-22T11:18:51.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T10:16:32.000Z",
          "retrievedAt": "2026-07-22T11:16:17.000Z",
          "computedAt": "2026-07-22T11:18:51.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-22T13:18:51+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T04:02:11.000Z",
            "retrievedAt": "2026-07-22T11:16:17.000Z",
            "lastAttemptAt": "2026-07-22T11:16:17.000Z",
            "lastSuccessAt": "2026-07-22T11:16:17.000Z",
            "computedAt": "2026-07-22T13:18:51+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-23T16:02:11.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T05:49:16.000Z",
            "retrievedAt": "2026-07-22T11:16:17.000Z",
            "lastAttemptAt": "2026-07-22T11:16:17.000Z",
            "lastSuccessAt": "2026-07-22T11:16:17.000Z",
            "computedAt": "2026-07-22T13:18:51+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-23T17:49:16.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T10:16:32.000Z",
            "retrievedAt": "2026-07-22T11:16:17.000Z",
            "lastAttemptAt": "2026-07-22T11:16:17.000Z",
            "lastSuccessAt": "2026-07-22T11:16:17.000Z",
            "computedAt": "2026-07-22T13:18:51+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-22T22:16:32.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T10:46:56.000Z",
            "retrievedAt": "2026-07-22T11:16:17.000Z",
            "lastAttemptAt": "2026-07-22T11:16:17.000Z",
            "lastSuccessAt": "2026-07-22T11:16:17.000Z",
            "computedAt": "2026-07-22T13:18:51+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T16:46:56.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (9 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (9 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T11:16:35.000Z",
            "retrievedAt": "2026-07-22T11:19:52.903Z",
            "lastAttemptAt": "2026-07-22T11:19:52.903Z",
            "lastSuccessAt": "2026-07-22T11:19:52.903Z",
            "computedAt": "2026-07-22T13:18:51+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T17:16:35.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-22T13:18:51+02:00",
        "latest": [
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "b4e60e246895436ab333920606c22b5375b66e9876ee219e60214698a95bf79e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "e6f62f157fe54f7e65ad3f2b5c9a3df8b90dec432f64f4ea91f83055461137d9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "811e447834a7095787d8a9b5393fa932956dbc38c43fbef5739a10c5b7fa92b6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "9ce2d488962a06fa3cda6e1b8a96aaa8cf83c1f9e1176c80eaad3b9f485279d0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "b69cb39857aaee8ba836786ec22f9a443c4d71e9cfe45c23466531dce9648ac4",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe0f7a8478631d50355203e25f7e5eff64f4159f4f52480a4f6ca1a373451ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "554f1058be9ccb4c8eda52ccdabbec151f8bb6e0181e37609da452cc32125fa7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "6a4cbda5d15bf0b233b0de24e65b0bb102ed21e8a2c7eb3138641693b1704471",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "01c1812d4e474caea1fa4bb26fc2e718164630041dddf0cc1165a6781b0436a1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "329201f5b149903c33b1a21c98e39984b705577fc5c04f3ce956ba1cff4da2eb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "6c99691fae449df79af3b76038976aa424c0838e7707ac3e73a10b1d003266e8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "25834613d5e0997552a9e70a720ce2c12a49c32635c252025cb3e99bf49de3b9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0bf0eca5ec2f9670",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-end-of-bund-scarcity",
            "title": "The end of Bund scarcity",
            "url": "https://l0g.fr/en/analysis/the-end-of-bund-scarcity/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The end of Bund scarcity.",
            "objectId": "article:en:the-end-of-bund-scarcity",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "d236706407d1c4dafbb46f2c4f071a64a30e5761367c172177723df60a63884c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "5e416bb51853d4a0",
            "date": "2026-07-19T16:57:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fin-de-la-rarete-du-bund",
            "title": "La fin de la rareté du Bund",
            "url": "https://l0g.fr/posts/fin-de-la-rarete-du-bund/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La fin de la rareté du Bund.",
            "objectId": "article:fin-de-la-rarete-du-bund",
            "previousVersion": null,
            "currentVersion": "2026-07-19T16:57:00.000Z",
            "previousHash": null,
            "currentHash": "497c2046b26603d8f8d00feae4862591ad0ff0ce9177f906412026737c34a9f1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "72d9a8d4dc348e68643aa8fe16d74095a7914a71c15111dc15799eeb0b021f5c"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260722T151823+0200-f361ae40d6e9-29925787171-1",
      "date": "2026-07-22",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-22T13:52:04.670Z",
      "computedAt": "2026-07-22T15:18:23+02:00",
      "gitSha": "f361ae40d6e932b2f0c61ffbbc33072afd215df1",
      "previousFrameHash": "72d9a8d4dc348e68643aa8fe16d74095a7914a71c15111dc15799eeb0b021f5c",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29925787171",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "0ca04e25eef33ae53ae1eaca1eaa1f9629c01951e3de99907403566c209e6bdf",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "ff65286c8e769d15bcf720331d66f6fcd898e474af6f210cf4e7f05e2c39430b",
          "bytes": 94059,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "02787a8c79e6a5758d1b620a7520ca8db6d87565f2625a4dfe5b9e5e58ac933c",
          "bytes": 1149490,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "f89f4c81114e583f4b15d439b2c85b8e185c1a0cc21d07b7a310d5336958f1fa",
          "bytes": 3390380,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "4e54b79bcc1735bd3c5247295c1b809e16b475567304d8b6a0f68d5c25578465",
          "bytes": 621331,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "cfc773cbb6a20a634a9adf1dafecf0556f4a2d182407ad2f687f3980c0b1a420",
          "bytes": 577759,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "9360203a1b03fc183658c85b5f8b93cbf262583a3a8974f7e1448b803d24c8c9",
          "bytes": 28304,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "a88bdbfe437ec7d8fa861400cf3b68ffa5b60ddadaa4cadd59e050bdc486cc4f",
          "bytes": 15693,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "e5b5c5bf8c3cd114e57c72afe5ae1e7e5d82e3bc198d90ed8fff6ec2ad5d9b3e",
          "bytes": 241406,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "80ba5dcf426a933489df33c7b0410cd42fa65a61344fc6b9ec2fa89f7dff44c1",
          "bytes": 138367,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "026b25d5b852c2c41fefc7e5068567432f2bc5924561f138903c59534099cd2f",
          "bytes": 15565,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "e9de1ad634c0af25589a2da399ff78e56cf73bf0402228d3d0514ce111c0f178",
          "bytes": 7383,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "dc38c0deadf2e123d05a9c91a596732c9a36aeadc4f70ade8439eb9e6bcc4750",
          "bytes": 1033843,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-22T13:47:37.000Z:474aa74c6fa7",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-22T13:47:37.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T13:32:53.000Z",
          "retrievedAt": "2026-07-22T13:47:37.000Z",
          "computedAt": "2026-07-22T13:47:37.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54,
          "scale": 100,
          "level": null,
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "474aa74c6fa75094b898321dadb7b09b1360bc011e0bd67583b504111832c1f0",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-22 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-22T13:47:37.000Z:0ddfc0f1b69d",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-22T13:47:37.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T13:23:05.000Z",
          "retrievedAt": "2026-07-22T13:47:37.000Z",
          "computedAt": "2026-07-22T13:47:37.000Z",
          "archivedAt": null,
          "value": 48,
          "rawValue": 48,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "0ddfc0f1b69ddf0e92f82487a6580df19b6095eaef75117c96bf671404a59a1f",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-22 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-22T13:47:37.000Z:fd816c7ceb5c",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-22T13:47:37.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T05:49:16.000Z",
          "retrievedAt": "2026-07-22T13:47:37.000Z",
          "computedAt": "2026-07-22T13:47:37.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": null,
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "fd816c7ceb5c8c947da50a0ad376dab8d581d5d3e58ecd9b8ff8204b88422ae0",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-22 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-22T13:47:37.000Z:a0b3cc6ff1df",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-22T13:47:37.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T04:02:11.000Z",
          "retrievedAt": "2026-07-22T13:47:37.000Z",
          "computedAt": "2026-07-22T13:47:37.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "a0b3cc6ff1df36993bb85a6ca50ab7b3c5d9050143c782bc459b0da0e8c0188a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-22 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-22T13:47:37.000Z:78e0189b4dec",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-22T13:47:37.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T10:16:32.000Z",
          "retrievedAt": "2026-07-22T13:47:37.000Z",
          "computedAt": "2026-07-22T13:47:37.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "78e0189b4decd06b20e7454a3232c577df2880dd29a6a59787dca8bb14facf7d",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-22 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-22T15:18:23+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T04:02:11.000Z",
            "retrievedAt": "2026-07-22T13:47:37.000Z",
            "lastAttemptAt": "2026-07-22T13:47:37.000Z",
            "lastSuccessAt": "2026-07-22T13:47:37.000Z",
            "computedAt": "2026-07-22T15:18:23+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-23T16:02:11.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T05:49:16.000Z",
            "retrievedAt": "2026-07-22T13:47:37.000Z",
            "lastAttemptAt": "2026-07-22T13:47:37.000Z",
            "lastSuccessAt": "2026-07-22T13:47:37.000Z",
            "computedAt": "2026-07-22T15:18:23+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-23T17:49:16.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T10:16:32.000Z",
            "retrievedAt": "2026-07-22T13:47:37.000Z",
            "lastAttemptAt": "2026-07-22T13:47:37.000Z",
            "lastSuccessAt": "2026-07-22T13:47:37.000Z",
            "computedAt": "2026-07-22T15:18:23+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-22T22:16:32.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T13:23:05.000Z",
            "retrievedAt": "2026-07-22T13:47:37.000Z",
            "lastAttemptAt": "2026-07-22T13:47:37.000Z",
            "lastSuccessAt": "2026-07-22T13:47:37.000Z",
            "computedAt": "2026-07-22T15:18:23+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T19:23:05.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (9 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (9 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T13:47:59.000Z",
            "retrievedAt": "2026-07-22T13:52:04.670Z",
            "lastAttemptAt": "2026-07-22T13:52:04.670Z",
            "lastSuccessAt": "2026-07-22T13:52:04.670Z",
            "computedAt": "2026-07-22T15:18:23+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T19:47:59.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-22T15:18:23+02:00",
        "latest": [
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "035aec7fd27e86f62eeb8d4e299ae8d8fe4af23e9946ebd4723adab6044771c3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "8c6c8783d8af3ae61cd42d2578f2ccbddb7aae3cd38a043943aa415ed505a851",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "b4e60e246895436ab333920606c22b5375b66e9876ee219e60214698a95bf79e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "965e914f8b37c73b86b9dc43ac7dc3e74ba731bab72d147b5595c96a61c31665",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "811e447834a7095787d8a9b5393fa932956dbc38c43fbef5739a10c5b7fa92b6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "9ce2d488962a06fa3cda6e1b8a96aaa8cf83c1f9e1176c80eaad3b9f485279d0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "ce02566ef263119521139a184656bb229614e508a269b33efb198aa288f48f80",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe0f7a8478631d50355203e25f7e5eff64f4159f4f52480a4f6ca1a373451ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "0e0e97061b3ff9df10eec803c62110f64810c7722ef4f2ab9c25040ab10f3424",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "a4450d00fac165605b9fc56516aab33597be8a9ba700e87d7c66da9e23809181",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "73f0a9518d89a74aedb243875e5264da8aedb1740ad870c336daf98164b60c62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "b2fe521030aa85516037a7d9ed40d08f46bbf07d43e0183de54c2c4e8864a6db",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "b5397c1b9d8f6707f6d918f2acb44719e4890c1370b90dfdc22c9650015684de",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "1a8238101ad278d633e6e6165c1d9472ca05e6d94d14b833d6236d1dab5ed18b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "598128455a4df67e241804d73c851f4487e222257e9e82154ca3a05bf7c4a1fa"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260722T185728+0200-2c59d5662121-29940296143-1",
      "date": "2026-07-22",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-22T16:58:39.637Z",
      "computedAt": "2026-07-22T18:57:28+02:00",
      "gitSha": "2c59d5662121f9df22f53c0f7fbfe2e793d93a7d",
      "previousFrameHash": "598128455a4df67e241804d73c851f4487e222257e9e82154ca3a05bf7c4a1fa",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29940296143",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "0ca04e25eef33ae53ae1eaca1eaa1f9629c01951e3de99907403566c209e6bdf",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "ff65286c8e769d15bcf720331d66f6fcd898e474af6f210cf4e7f05e2c39430b",
          "bytes": 94059,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "effe1e388bb7faf2ff280dedd4602d87d0fcef090170d93444b7ee139552ec9a",
          "bytes": 1149510,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "2d4b0d316e2dc356e7645a092dffbb89afe46775ad8bd80c8f1b1428cd98675c",
          "bytes": 3391258,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "e67ef60796833f64691d520da962c360aea2366536970188befd9b76cbe17926",
          "bytes": 621389,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "79baa7322618e8ff57ced35a91a4d182728008b7cec258150bba3d844033d823",
          "bytes": 577128,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "9360203a1b03fc183658c85b5f8b93cbf262583a3a8974f7e1448b803d24c8c9",
          "bytes": 28304,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "085a9f85080ae416f7649bc23ded2700d1567a26751758c9610603badfde4201",
          "bytes": 15693,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "ae349801f6b7a9080f9a7d980925e552280f5d804099c5126852d3b112c25c9e",
          "bytes": 241406,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "7f4f3ac233eb8b95cb4123801a8be7d3ef2e60fea91b13b33630a212ae0d3931",
          "bytes": 136655,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "84b922f4c8ffb0cc9780a6dcae8d4848cc26b7d24f724350dafc6e5c66adfc27",
          "bytes": 15563,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "2b9c237f61d3b1d8af06bf9073cc9f188bec881420c9d2655397ca9a582ec6ce",
          "bytes": 7382,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "675c9e6801b3f5ece8bc35ea3f21b9eb1650340b81c288b2a8885242980e4c12",
          "bytes": 1043250,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-22T16:57:28.000Z:7c28dabcf71e",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-22T16:57:28.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T16:49:58.000Z",
          "retrievedAt": "2026-07-22T16:58:39.637Z",
          "computedAt": "2026-07-22T16:57:28.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.26571688587073,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "7c28dabcf71eff1c0f7d14a97217e12ae6197132dcf659129a327ad85db73d08",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-22T16:57:28.000Z:75bae066d8e3",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-22T16:57:28.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T16:30:25.000Z",
          "retrievedAt": "2026-07-22T16:49:37.000Z",
          "computedAt": "2026-07-22T16:57:28.000Z",
          "archivedAt": null,
          "value": 48,
          "rawValue": 48,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "75bae066d8e3ad7005821cf7caae132fdf4739a0923ec76040ee077297df16cb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-22T16:57:28.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-22T16:57:28.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T05:49:16.000Z",
          "retrievedAt": "2026-07-22T16:49:37.000Z",
          "computedAt": "2026-07-22T16:57:28.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-22T16:57:28.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-22T16:57:28.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T04:02:11.000Z",
          "retrievedAt": "2026-07-22T16:49:37.000Z",
          "computedAt": "2026-07-22T16:57:28.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-22T16:57:28.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-22T16:57:28.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-22T16:19:17.000Z",
          "retrievedAt": "2026-07-22T16:49:37.000Z",
          "computedAt": "2026-07-22T16:57:28.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-22T18:57:28+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T04:02:11.000Z",
            "retrievedAt": "2026-07-22T16:49:37.000Z",
            "lastAttemptAt": "2026-07-22T16:49:37.000Z",
            "lastSuccessAt": "2026-07-22T16:49:37.000Z",
            "computedAt": "2026-07-22T18:57:28+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-23T16:02:11.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T05:49:16.000Z",
            "retrievedAt": "2026-07-22T16:49:37.000Z",
            "lastAttemptAt": "2026-07-22T16:49:37.000Z",
            "lastSuccessAt": "2026-07-22T16:49:37.000Z",
            "computedAt": "2026-07-22T18:57:28+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-23T17:49:16.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T16:19:17.000Z",
            "retrievedAt": "2026-07-22T16:49:37.000Z",
            "lastAttemptAt": "2026-07-22T16:49:37.000Z",
            "lastSuccessAt": "2026-07-22T16:49:37.000Z",
            "computedAt": "2026-07-22T18:57:28+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-23T04:19:17.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T16:30:25.000Z",
            "retrievedAt": "2026-07-22T16:49:37.000Z",
            "lastAttemptAt": "2026-07-22T16:49:37.000Z",
            "lastSuccessAt": "2026-07-22T16:49:37.000Z",
            "computedAt": "2026-07-22T18:57:28+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T22:30:25.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-13 (9 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-13 (9 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-22T16:49:58.000Z",
            "retrievedAt": "2026-07-22T16:58:39.637Z",
            "lastAttemptAt": "2026-07-22T16:58:39.637Z",
            "lastSuccessAt": "2026-07-22T16:58:39.637Z",
            "computedAt": "2026-07-22T18:57:28+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-22T22:49:58.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-22T18:57:28+02:00",
        "latest": [
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "0f2670420f7745eddba1c4858cd4deaf8deef3ebf9bc6e121027bcbd7e52659a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "8c6c8783d8af3ae61cd42d2578f2ccbddb7aae3cd38a043943aa415ed505a851",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "b4e60e246895436ab333920606c22b5375b66e9876ee219e60214698a95bf79e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "15fb58e48a8bf2b921d7bf1834d103d3c8038fabce7db8d7fd3bace024881ab9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "811e447834a7095787d8a9b5393fa932956dbc38c43fbef5739a10c5b7fa92b6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "9ce2d488962a06fa3cda6e1b8a96aaa8cf83c1f9e1176c80eaad3b9f485279d0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "c539d0cdc5c94591987f7b985fe707982d7e84eaa7558f8674126731afd03680",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe0f7a8478631d50355203e25f7e5eff64f4159f4f52480a4f6ca1a373451ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe96d6c95ba10026754ef350061914e7da7e06fe78b7538d10fb0c3637fe4ce0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "0ea2e6387f198e0318609fda438811fb765e1c44766e72250ee45d0e5b06b384",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "878684c097e64594a685af06e7a14c18dd185ce8cceef6da4f8c432944590fff",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "5a49947ec0289760b4df56503f4bcd7abf22d8219ed7ff705f46ae91fe1490c9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "82250e40a347a428861eadb6741209a2892568168c7cde6078a78f1c14207b55",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "29972232952235f4",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "emerging-markets-double-squeeze-dollar-oil",
            "title": "The emerging markets double squeeze: strong dollar, wartime barrel",
            "url": "https://l0g.fr/en/analysis/emerging-markets-double-squeeze-dollar-oil/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The emerging markets double squeeze: strong dollar, wartime barrel.",
            "objectId": "article:en:emerging-markets-double-squeeze-dollar-oil",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fc96c51bc684c3957b328c16f17f931c9835f1247c7674716a035b94315a07d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "926715d0ba96a63f",
            "date": "2026-07-20T09:37:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "double-peine-emergents-dollar-fort-baril-de-guerre",
            "title": "La double peine des émergents : dollar fort, baril de guerre",
            "url": "https://l0g.fr/posts/double-peine-emergents-dollar-fort-baril-de-guerre/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La double peine des émergents : dollar fort, baril de guerre.",
            "objectId": "article:double-peine-emergents-dollar-fort-baril-de-guerre",
            "previousVersion": null,
            "currentVersion": "2026-07-20T09:37:00.000Z",
            "previousHash": null,
            "currentHash": "fa30c9a4dbe7bd6ae963e2a3e417872c574400c30c4f61eacb347feeae12f7f7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "63c0a79fb5f18a0926709d865e2b52c81edd3ed8a0b7272e78643c29b69e6b5a"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T100044+0200-75b0ee8803e2-29989923760-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T08:01:36.883Z",
      "computedAt": "2026-07-23T10:00:44+02:00",
      "gitSha": "75b0ee8803e2cfb943bf78abeee880cbafc48bb5",
      "previousFrameHash": "63c0a79fb5f18a0926709d865e2b52c81edd3ed8a0b7272e78643c29b69e6b5a",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29989923760",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "d4a17f0fa073d9d53baa7e60ec9ba22c70b3868eed658bdef4982429b96e6873",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "ff65286c8e769d15bcf720331d66f6fcd898e474af6f210cf4e7f05e2c39430b",
          "bytes": 94059,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "d6d405cc8518537a8e140565d9e6f30cce7339f2d6018c4fc6b605860a70d15a",
          "bytes": 1160397,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "81c047f6e74bed526d3a8e8b907c13e3f2a3e2212185238a7e9c4c6bf0c51b57",
          "bytes": 3409780,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "84b363076817714219a841992d30c717a6dd02b95d64dd0ba023bbb4330ac1e0",
          "bytes": 632522,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "d7306e0323772746375e5029916ec9ab642bb71d9554e78f81a2348aad576450",
          "bytes": 587799,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "8126f81c6f30e4d525437e2e615b72b1a3be8972b390e7135c4d46aad674da64",
          "bytes": 28381,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "c63ce204837bb8925da0e9af0f20ea3aaced45b26f5163c612eb470a27b0cc2f",
          "bytes": 15955,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "a5b5a5cbd881e58e8e9f75b67c0a05ead9a652a143f04d909993129ec1f72960",
          "bytes": 243153,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "a2e1daa906bfc6d5d1671adef7e32ead94debcfe21550e0beb21d5099b28151a",
          "bytes": 141096,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "abc893d83036474448f064fe458a08bc1e098eb8d0dddd9b3d193ce5aee184fd",
          "bytes": 15564,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "9acc5c62f73c74be1c503012f070de3b7affdedf88ef26d7e235bc08300183ae",
          "bytes": 7383,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "069b8f7937c49cc5d3ae0c354eae7296d9c7cc163e81b1b6e88699b890924534",
          "bytes": 1061596,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T08:00:44.000Z:cac119cdd1b9",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T08:00:44.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T07:58:15.000Z",
          "retrievedAt": "2026-07-23T08:01:36.883Z",
          "computedAt": "2026-07-23T08:00:44.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.74523067283486,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "cac119cdd1b95ceee51f7f9effa81596c9feaf0b8ac8b44a102ce71880484fd4",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T08:00:44.000Z:39e89118efe0",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T08:00:44.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T07:28:26.000Z",
          "retrievedAt": "2026-07-23T07:57:55.000Z",
          "computedAt": "2026-07-23T08:00:44.000Z",
          "archivedAt": null,
          "value": 51,
          "rawValue": 51,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "39e89118efe06568410bd798d0b2d9bc2565829f9c8758a7d40a8c671091ef53",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T08:00:44.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T08:00:44.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T07:57:55.000Z",
          "computedAt": "2026-07-23T08:00:44.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T08:00:44.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T08:00:44.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T07:57:55.000Z",
          "computedAt": "2026-07-23T08:00:44.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T08:00:44.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T08:00:44.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:18:37.000Z",
          "retrievedAt": "2026-07-23T07:57:55.000Z",
          "computedAt": "2026-07-23T08:00:44.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T10:00:44+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T07:57:55.000Z",
            "lastAttemptAt": "2026-07-23T07:57:55.000Z",
            "lastSuccessAt": "2026-07-23T07:57:55.000Z",
            "computedAt": "2026-07-23T10:00:44+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T07:57:55.000Z",
            "lastAttemptAt": "2026-07-23T07:57:55.000Z",
            "lastSuccessAt": "2026-07-23T07:57:55.000Z",
            "computedAt": "2026-07-23T10:00:44+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:18:37.000Z",
            "retrievedAt": "2026-07-23T07:57:55.000Z",
            "lastAttemptAt": "2026-07-23T07:57:55.000Z",
            "lastSuccessAt": "2026-07-23T07:57:55.000Z",
            "computedAt": "2026-07-23T10:00:44+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-23T16:18:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T07:28:26.000Z",
            "retrievedAt": "2026-07-23T07:57:55.000Z",
            "lastAttemptAt": "2026-07-23T07:57:55.000Z",
            "lastSuccessAt": "2026-07-23T07:57:55.000Z",
            "computedAt": "2026-07-23T10:00:44+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T13:28:26.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T07:58:15.000Z",
            "retrievedAt": "2026-07-23T08:01:36.883Z",
            "lastAttemptAt": "2026-07-23T08:01:36.883Z",
            "lastSuccessAt": "2026-07-23T08:01:36.883Z",
            "computedAt": "2026-07-23T10:00:44+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T13:58:15.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T10:00:44+02:00",
        "latest": [
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "c7a9f23e0eca40295f87d0610e02296999df7c396e820904fa55ff2166ed2f1b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "b6473bec31e25e0ed7cdb189b53e6e161f5481ce202dc12b6f38f2b10435874d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "94a696ebd6b4642c74acb49f9de1b4a8fc7e80f9dc12eca95e874c2606b4b599",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "8c6c8783d8af3ae61cd42d2578f2ccbddb7aae3cd38a043943aa415ed505a851",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "b4e60e246895436ab333920606c22b5375b66e9876ee219e60214698a95bf79e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "7bf939d963e39981fe72c04117b95bec63353a6765346e224d5e04ce1761ace9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "811e447834a7095787d8a9b5393fa932956dbc38c43fbef5739a10c5b7fa92b6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "9ce2d488962a06fa3cda6e1b8a96aaa8cf83c1f9e1176c80eaad3b9f485279d0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fc579748049001fb2ea21aa2ec9d766b84b9be0632e9101d1ddd0b65dd9baf36",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe0f7a8478631d50355203e25f7e5eff64f4159f4f52480a4f6ca1a373451ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "b19a0f396145c8f61eda844cb0840b057097bd8eb54d90ba01408ebefc7c3a8a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "93f34b77536b93f7facdd52a380b7764c4f28aea368fc9806d5771410cb0be14",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "b9f7142bf27a4dab1f5ed10bbcd7f8df7f31c42a213b4e06bc5145b1a37d428b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "02911df1617b8ff764c990146652dc1cfd3c667daea45b458715d1bd3d60d2d6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "35d7f44e23c8b86e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-deflation-shock-absorber-and-poison",
            "title": "The world's factory marks everything down: China's deflation, shock absorber and poison",
            "url": "https://l0g.fr/en/analysis/china-deflation-shock-absorber-and-poison/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The world's factory marks everything down: China's deflation, shock absorber and poison.",
            "objectId": "article:en:china-deflation-shock-absorber-and-poison",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "7290b2750cf6a527390a20e6a43a2ecba42cdd2845ad801f8135b8e77870aee0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b5b0698a482a540e",
            "date": "2026-07-20T13:04:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "usine-mondiale-brade-deflation-chinoise",
            "title": "L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier",
            "url": "https://l0g.fr/posts/usine-mondiale-brade-deflation-chinoise/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'usine mondiale brade : la déflation chinoise, amortisseur et poison du choc pétrolier.",
            "objectId": "article:usine-mondiale-brade-deflation-chinoise",
            "previousVersion": null,
            "currentVersion": "2026-07-20T13:04:00.000Z",
            "previousHash": null,
            "currentHash": "40357ae8a73fdf192ce07f59995473bc82632dc8455f02d6a3e52deb809c1c16",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "13f75ff1de4c0cf1f253414cac5174cb20b0bbea5ffcd1e542e985e2e5f035a2"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T105702+0200-9afe31217274-29993218038-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T08:57:56.137Z",
      "computedAt": "2026-07-23T10:57:02+02:00",
      "gitSha": "9afe31217274ba0b57917f468fe344b64e655d82",
      "previousFrameHash": "13f75ff1de4c0cf1f253414cac5174cb20b0bbea5ffcd1e542e985e2e5f035a2",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29993218038",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "6682624d74127887bebfc7b692e7b91d599aef3ac16c674be47b0da28f683417",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "ff65286c8e769d15bcf720331d66f6fcd898e474af6f210cf4e7f05e2c39430b",
          "bytes": 94059,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "e8496b1b4133244da1f1c5b964763a28c95b8d1bdbbce6946685028f5c46a14d",
          "bytes": 1169714,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "b7603cb0cc4036e24fb2b125c3637a5c587ecd463ded00ef512f6ef464d53cf5",
          "bytes": 3436366,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "bc2a4528e2f285af6635b104bd5e97972ba776eb65e1ed8c3bf2f42662b69817",
          "bytes": 640839,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "d0389395ab1ed0895db78c0f0ba59cecb154678fbd5ea07ca288e69f5b2de134",
          "bytes": 594492,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "6f1f2b5e0a206abb7aa353ac7e2dd2d3626ba146f2a96e8d4aafc1858f348108",
          "bytes": 28381,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "274f436a1fbb0f3b5b024f2b74ca97c8a3337c2a9b98b3fb5370d465213cdeed",
          "bytes": 15956,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "f9614798745e723a1c82be83c44467b91f89be94203e0028effcb9ff2154f30f",
          "bytes": 244868,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "96a4d98b95256636db0f4a11bd661060e09d0cf1fc929d11dfb5574f94b4f704",
          "bytes": 144736,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "08fe17e23aaaf3566d4badbd4e91c83f2d8f08713950d0d15d2a3314cd839dcd",
          "bytes": 15564,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "c1743dea9483fae708fe95a7f83efdb45b5724514fb6ca998d37d5cb1b25aa6b",
          "bytes": 7383,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "a5892914c701a028233c454b7c00579c01b08cad9893ff2904a4fda0021f8269",
          "bytes": 1071019,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T08:57:02.000Z:a9033953f527",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T08:57:02.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T08:43:27.000Z",
          "retrievedAt": "2026-07-23T08:57:56.137Z",
          "computedAt": "2026-07-23T08:57:02.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.74523067283486,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "a9033953f527b31c0db486e90a0cf94bf34e68ba58dc0c7763a4163bc29ade18",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T08:57:02.000Z:39e89118efe0",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T08:57:02.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T08:31:35.000Z",
          "retrievedAt": "2026-07-23T08:43:04.000Z",
          "computedAt": "2026-07-23T08:57:02.000Z",
          "archivedAt": null,
          "value": 51,
          "rawValue": 51,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "39e89118efe06568410bd798d0b2d9bc2565829f9c8758a7d40a8c671091ef53",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T08:57:02.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T08:57:02.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T08:43:04.000Z",
          "computedAt": "2026-07-23T08:57:02.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T08:57:02.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T08:57:02.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T08:43:04.000Z",
          "computedAt": "2026-07-23T08:57:02.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T08:57:02.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T08:57:02.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:18:37.000Z",
          "retrievedAt": "2026-07-23T08:43:04.000Z",
          "computedAt": "2026-07-23T08:57:02.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T10:57:02+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T08:43:04.000Z",
            "lastAttemptAt": "2026-07-23T08:43:04.000Z",
            "lastSuccessAt": "2026-07-23T08:43:04.000Z",
            "computedAt": "2026-07-23T10:57:02+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T08:43:04.000Z",
            "lastAttemptAt": "2026-07-23T08:43:04.000Z",
            "lastSuccessAt": "2026-07-23T08:43:04.000Z",
            "computedAt": "2026-07-23T10:57:02+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:18:37.000Z",
            "retrievedAt": "2026-07-23T08:43:04.000Z",
            "lastAttemptAt": "2026-07-23T08:43:04.000Z",
            "lastSuccessAt": "2026-07-23T08:43:04.000Z",
            "computedAt": "2026-07-23T10:57:02+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-23T16:18:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T08:31:35.000Z",
            "retrievedAt": "2026-07-23T08:43:04.000Z",
            "lastAttemptAt": "2026-07-23T08:43:04.000Z",
            "lastSuccessAt": "2026-07-23T08:43:04.000Z",
            "computedAt": "2026-07-23T10:57:02+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T14:31:35.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T08:43:27.000Z",
            "retrievedAt": "2026-07-23T08:57:56.137Z",
            "lastAttemptAt": "2026-07-23T08:57:56.137Z",
            "lastSuccessAt": "2026-07-23T08:57:56.137Z",
            "computedAt": "2026-07-23T10:57:02+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T14:43:27.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T10:57:02+02:00",
        "latest": [
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "7ec8866266a36b7fd35bee9f8884ba02cea36bca3aecbb78f45e7e30dc7d1123",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "f17dcc2985a5fea789b4c65e5e2204ec8159944c3119adb3656cb97af28ba1c4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "c7a9f23e0eca40295f87d0610e02296999df7c396e820904fa55ff2166ed2f1b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "cd3610ad18bd483663e5452bc4636646a001c8503759ffc6e08b9841fa7a26e9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "c2a569b8f07b5c0fffc4b2c27842956c25b34e824ec08e698f942d2cade53568",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "8c6c8783d8af3ae61cd42d2578f2ccbddb7aae3cd38a043943aa415ed505a851",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "b4e60e246895436ab333920606c22b5375b66e9876ee219e60214698a95bf79e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "2d98216e377dbeb354fc1f404813a6363d67a533a88d973b5edd8ce6aaf25022",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "811e447834a7095787d8a9b5393fa932956dbc38c43fbef5739a10c5b7fa92b6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "9ce2d488962a06fa3cda6e1b8a96aaa8cf83c1f9e1176c80eaad3b9f485279d0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fbc5445e5c30e607f5d869dbe23910976f7064d374fcb428bdf9b63f2ebfaa90",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "fe0f7a8478631d50355203e25f7e5eff64f4159f4f52480a4f6ca1a373451ed6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "e4f1c131adeab8fee8a62019d01af47c64f6c8cfe370625c179c87f5cc80de3d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4d5a03d72665ca5a524fc4cc01b41f4182c1726f5b7d27e4c75b51a0b53e1ebe",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4503d8d3a27390a3db24df51764728c278d1385379fc48841a5ee6ca2d0dfec2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "40927f4cf4d4a24f448b61644fd65af694f1648d91ec5acd5d44290d8a66046b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "790495848033cedcef9a826a5ea38a873e2eb3e7f84860f5911bbc3066e0dfdb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "67632023078194a9dbde5637883477ee69c09afd1184dc7509cd590c57d3749e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "06b4e8702f7495ddd0b316b9f106689ce6d852aaceba1d78b0dd498d1705f968",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "d6a4d66d9b4880e9cbaf746434bcc0c7e0ed4ab549cb39713572ab717eee2d14"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T112204+0200-4bb3910f6ac8-29995018342-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T09:22:50.942Z",
      "computedAt": "2026-07-23T11:22:04+02:00",
      "gitSha": "4bb3910f6ac81578f5982dbeb51e36a4f0d873c4",
      "previousFrameHash": "d6a4d66d9b4880e9cbaf746434bcc0c7e0ed4ab549cb39713572ab717eee2d14",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29995018342",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "6682624d74127887bebfc7b692e7b91d599aef3ac16c674be47b0da28f683417",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "ff65286c8e769d15bcf720331d66f6fcd898e474af6f210cf4e7f05e2c39430b",
          "bytes": 94059,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "e496a3bda2ff975e8fb001371fd797e97b82e0a17cffa8272578e73df73bff68",
          "bytes": 1169728,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "05941a8f8da84203a0190c1742b477f5ac62cef5280682fd0a9ef4aa5c75c8a0",
          "bytes": 3436380,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "d302b7f90b1f39c7ad0c7ad48bc99a3a993d0f7ceedfa12a427d2d9d8efbb631",
          "bytes": 640839,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "606192f71fc1d14087c6c34ccb1fe5a5ce15c0922e4d30c2f735652414d06e85",
          "bytes": 594492,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "6f1f2b5e0a206abb7aa353ac7e2dd2d3626ba146f2a96e8d4aafc1858f348108",
          "bytes": 28381,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "c5cc40f9ccc892ebc997e7b7e00fb3a27c1674914ba0516f7cb4c141c762d4de",
          "bytes": 15956,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "d3a86222bc89d2b40a028bb043cd7d5810ff8696b283c7b22945dfc146c4d652",
          "bytes": 244868,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "a03f2a76d7f70e983ad5d6bf1f861958592e52ecd2533d678822c3584e6b03b4",
          "bytes": 144736,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "644c7fab9facf3fba39e947096addc3a31d3e1289e9df2d7e8d75348d100d478",
          "bytes": 15564,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "52ac0549b465959f268f469015ecd59dea31754bace33c78087564ea2fbbdb9d",
          "bytes": 7383,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "3d63dbb6143d8f423cc5d20e4475b3c027a93d54b0adf95668d6e9ec9ab0f3d3",
          "bytes": 1080442,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T09:22:04.000Z:2b4827d8d7aa",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T09:22:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T09:13:38.000Z",
          "retrievedAt": "2026-07-23T09:22:50.942Z",
          "computedAt": "2026-07-23T09:22:04.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.74523067283486,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "2b4827d8d7aa835e50b908d284e5f72aa16f0f12a5d38e6f2635abbfcfab24fa",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T09:22:04.000Z:39e89118efe0",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T09:22:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T09:02:56.000Z",
          "retrievedAt": "2026-07-23T09:13:17.000Z",
          "computedAt": "2026-07-23T09:22:04.000Z",
          "archivedAt": null,
          "value": 51,
          "rawValue": 51,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "39e89118efe06568410bd798d0b2d9bc2565829f9c8758a7d40a8c671091ef53",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T09:22:04.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T09:22:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T09:13:17.000Z",
          "computedAt": "2026-07-23T09:22:04.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T09:22:04.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T09:22:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T09:13:17.000Z",
          "computedAt": "2026-07-23T09:22:04.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T09:22:04.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T09:22:04.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:18:37.000Z",
          "retrievedAt": "2026-07-23T09:13:17.000Z",
          "computedAt": "2026-07-23T09:22:04.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T11:22:04+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T09:13:17.000Z",
            "lastAttemptAt": "2026-07-23T09:13:17.000Z",
            "lastSuccessAt": "2026-07-23T09:13:17.000Z",
            "computedAt": "2026-07-23T11:22:04+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T09:13:17.000Z",
            "lastAttemptAt": "2026-07-23T09:13:17.000Z",
            "lastSuccessAt": "2026-07-23T09:13:17.000Z",
            "computedAt": "2026-07-23T11:22:04+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:18:37.000Z",
            "retrievedAt": "2026-07-23T09:13:17.000Z",
            "lastAttemptAt": "2026-07-23T09:13:17.000Z",
            "lastSuccessAt": "2026-07-23T09:13:17.000Z",
            "computedAt": "2026-07-23T11:22:04+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-23T16:18:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T09:02:56.000Z",
            "retrievedAt": "2026-07-23T09:13:17.000Z",
            "lastAttemptAt": "2026-07-23T09:13:17.000Z",
            "lastSuccessAt": "2026-07-23T09:13:17.000Z",
            "computedAt": "2026-07-23T11:22:04+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T15:02:56.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T09:13:38.000Z",
            "retrievedAt": "2026-07-23T09:22:50.942Z",
            "lastAttemptAt": "2026-07-23T09:22:50.942Z",
            "lastSuccessAt": "2026-07-23T09:22:50.942Z",
            "computedAt": "2026-07-23T11:22:04+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T15:13:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T11:22:04+02:00",
        "latest": [
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "ec76373f8e1e6762bb89d6a636c0227dc2fefb331c3f6aff54df46ad47f9558e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "9e6abe01ec511960372e6966bbd4fb994709b601b965d43fec596f00de4192cf",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "8823398827474373d71bc35ea8ec90b63785b522e7b944ceaae8642e52d0edd6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "584653b56a4b8bb9f1a1564b02009b53ecf14bf13db60ff2bb2fae906c701235",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "403a0b89e1d763326467213a97ba4f4dc8b35327df452c7e047fb3db76ed828c",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "77c8d9a4980bce2ebc1dc3774c5c26269dfd81d09e9f401462cb7364dd21d90f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4a6e1d9421fb58c8c9054e18a2ff80f0a8d290b9e51d4a41f7fdce1278545b5e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "f81405288e9f41c8d4c1e61f9785fad685a4edb1d2f0932fe463bf1907c582b1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "e53889fed2e080f96921f3d146c975dd16cc39f4b81ca8ad1c053f8a523e96f5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "e44f6ecb5923ce1f688b162404d52d9a930df00ba954a7ace22a6720472fbe12",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "23450984f0f3ad8b6878c2148191ac024cbb884dd2b5d4fe5c63e0c7bf5d9fec"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T112351+0200-eb62337b8aa4-29995157063-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T09:25:18.875Z",
      "computedAt": "2026-07-23T11:23:51+02:00",
      "gitSha": "eb62337b8aa40aa0b14d4e1e2d4b78009776d2fa",
      "previousFrameHash": "23450984f0f3ad8b6878c2148191ac024cbb884dd2b5d4fe5c63e0c7bf5d9fec",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29995157063",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "6682624d74127887bebfc7b692e7b91d599aef3ac16c674be47b0da28f683417",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "65bf6a793c997d795f7e6092fc28a4de140eea689cb9ad91d796dd17aadc06c0",
          "bytes": 1170882,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "c60cf29ec5382d6e265a20ee0428638ee3a776dbf26df8a132a18b2c9243ac5a",
          "bytes": 3436777,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "04e8713903a9a9dea0311d6e380eba0b1cc460ade568b39754a97361ca72e16e",
          "bytes": 640871,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "6efc4915fa83d5a4a512a62e03d1f6e449e09b6b7fe6560fa08ba0e21d17c2b8",
          "bytes": 594508,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "6f1f2b5e0a206abb7aa353ac7e2dd2d3626ba146f2a96e8d4aafc1858f348108",
          "bytes": 28381,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "3c33f0caaea6fe18ac0e837980ea33daccfd2197e7263ab47352169ef60e3338",
          "bytes": 15956,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "6f9a4b24302a348527a9d5db50bda14517a82c69a91652c55d855b95602a1a40",
          "bytes": 244900,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "4c7f882e8bf28c5b294f70fa399df0f8260412c5f99b736de76c3241010d54b2",
          "bytes": 144736,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "ef457607eb9ad8637ae09be1feec5b36099cde37a836da8057dde746e9d86ba4",
          "bytes": 15564,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "37fef3cf7f94c39c2ba9c31c0e2589b9761eff8710818250ce0fcc41c15732fc",
          "bytes": 7383,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "2c82becec24b1735e2d246a7d15e189504127d18506e8296821768c9a5ddd83a",
          "bytes": 1090239,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T09:23:51.000Z:98f5ac80ca79",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T09:23:51.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T09:13:38.000Z",
          "retrievedAt": "2026-07-23T09:25:18.875Z",
          "computedAt": "2026-07-23T09:23:51.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.74523067283486,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "98f5ac80ca79b096f2c35a15f1442cf1357a3b25247a1c8469f8cbb331e132ac",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T09:23:51.000Z:39e89118efe0",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T09:23:51.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T09:02:56.000Z",
          "retrievedAt": "2026-07-23T09:13:17.000Z",
          "computedAt": "2026-07-23T09:23:51.000Z",
          "archivedAt": null,
          "value": 51,
          "rawValue": 51,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "39e89118efe06568410bd798d0b2d9bc2565829f9c8758a7d40a8c671091ef53",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T09:23:51.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T09:23:51.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T09:13:17.000Z",
          "computedAt": "2026-07-23T09:23:51.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T09:23:51.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T09:23:51.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T09:13:17.000Z",
          "computedAt": "2026-07-23T09:23:51.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T09:23:51.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T09:23:51.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:18:37.000Z",
          "retrievedAt": "2026-07-23T09:13:17.000Z",
          "computedAt": "2026-07-23T09:23:51.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T11:23:51+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T09:13:17.000Z",
            "lastAttemptAt": "2026-07-23T09:13:17.000Z",
            "lastSuccessAt": "2026-07-23T09:13:17.000Z",
            "computedAt": "2026-07-23T11:23:51+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T09:13:17.000Z",
            "lastAttemptAt": "2026-07-23T09:13:17.000Z",
            "lastSuccessAt": "2026-07-23T09:13:17.000Z",
            "computedAt": "2026-07-23T11:23:51+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:18:37.000Z",
            "retrievedAt": "2026-07-23T09:13:17.000Z",
            "lastAttemptAt": "2026-07-23T09:13:17.000Z",
            "lastSuccessAt": "2026-07-23T09:13:17.000Z",
            "computedAt": "2026-07-23T11:23:51+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-23T16:18:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T09:02:56.000Z",
            "retrievedAt": "2026-07-23T09:13:17.000Z",
            "lastAttemptAt": "2026-07-23T09:13:17.000Z",
            "lastSuccessAt": "2026-07-23T09:13:17.000Z",
            "computedAt": "2026-07-23T11:23:51+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T15:02:56.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T09:13:38.000Z",
            "retrievedAt": "2026-07-23T09:25:18.875Z",
            "lastAttemptAt": "2026-07-23T09:25:18.875Z",
            "lastSuccessAt": "2026-07-23T09:25:18.875Z",
            "computedAt": "2026-07-23T11:23:51+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T15:13:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T11:23:51+02:00",
        "latest": [
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "4281b5b9c6b0f73ec082005410a6449f686dfdbb2927460062cc5813cca0d18c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "d6d648d0b56c5d3d85044e1803afd2ffec04edc08419bcd5727e94e745084fd9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "3ba82e1617b8d84be28f918e73612264d88a438778bac9f0f7a67ab10104c524",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "0fe23d585756bf9e3fdbb0077d3d78eb39525bd6c587e2f82bb2b5b56fef7e84",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "4f94bfab3546aa969f8b02ea46c9b217237393a2113b22043920fee7842bb10a",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "e559514a88db7a83c617d511d8d316788c5aaa6c8b8468eb5f8bf325ecb2a55f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "eee862975309fa4eb4285d4237318fdb68e9c0ad4dc0e02a29a800408b50e6b3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "71155b57858d220cbc11eab733db4fc2857b33317a3226225c1a21e3e11b0be3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "e53889fed2e080f96921f3d146c975dd16cc39f4b81ca8ad1c053f8a523e96f5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "a2fb8ddb84b15cdc2c33e1a06ed4d891e96025234b56667f4f6faf28a6159df3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "3d9e60834fe08e996a5cb84fd97251ef765fe3a93bbf7ad977701138b9e861da"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T114602+0200-4bdd7a9e1e8c-29996671196-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T09:25:18.875Z",
      "computedAt": "2026-07-23T11:46:02+02:00",
      "gitSha": "4bdd7a9e1e8c5ccbe7ec28bd54a3f1c0f5871a72",
      "previousFrameHash": "3d9e60834fe08e996a5cb84fd97251ef765fe3a93bbf7ad977701138b9e861da",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/29996671196",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "6682624d74127887bebfc7b692e7b91d599aef3ac16c674be47b0da28f683417",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "3dd01e7a0b2f465b9c49c6c97c849601d5ec0fdb0de5d06c7d6da352dfd929b0",
          "bytes": 1170882,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "c60cf29ec5382d6e265a20ee0428638ee3a776dbf26df8a132a18b2c9243ac5a",
          "bytes": 3436777,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "623f0c4410087afdd769b6f04ee953edc05edceb8d12366b23cdab6f0c27e720",
          "bytes": 640871,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "f0df0a2ec96a4bd857b475186f463b5cd73adbd72b8b5964fcd39f7d76dbeb33",
          "bytes": 594508,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "6f1f2b5e0a206abb7aa353ac7e2dd2d3626ba146f2a96e8d4aafc1858f348108",
          "bytes": 28381,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "18deafc9d5c1dc75b18df22dc804cf846d4ab595cae9524d71038f0cea576d23",
          "bytes": 15956,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "186f657b814476bd7bfd83be0fb350e7b13c72d0b650a12638ac02890259ecf5",
          "bytes": 244900,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "fcc1a987dc8a795c5931a92015803552e09ed24da96f6c60f598b9c847cde21c",
          "bytes": 143296,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "f9fef830abe46cb04cfd3078ae6833c8afcef727954cdb3d63d80d2b85f3fd70",
          "bytes": 14237,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "d03a75ef40b37d9605ed48418f845a2bfc0e1d22c0014c9a1970936f157d66da",
          "bytes": 7284,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "2ee74714dc365661b5772c880b4dc9a97ad9ca908016efc459a66bee9360cfd0",
          "bytes": 818930,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T09:46:02.000Z:785486f337bd",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T09:46:02.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-18T11:23:13.000Z",
          "retrievedAt": "2026-07-18T11:32:06.602Z",
          "computedAt": "2026-07-23T09:46:02.000Z",
          "archivedAt": null,
          "value": 54,
          "rawValue": 54.285531303835384,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "785486f337bd823604c33215131f1aa5b9d90a2858ae20ef483b44abcaef837f",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "fallback",
          "qualityStatus": "degraded",
          "fallbackUsed": true,
          "fallbackReason": "Debt Risk Radar indisponible au build: fetch failed",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T09:46:02.000Z:5cf05c7cf53c",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T09:46:02.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-18T11:32:06.602Z",
          "computedAt": "2026-07-23T09:46:02.000Z",
          "archivedAt": null,
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5cf05c7cf53cb93b657584a30cba5113824cc5b07a3597aeed9d49d53fd868db",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "fallback",
          "qualityStatus": "degraded",
          "fallbackUsed": true,
          "fallbackReason": "Agrégateur indisponible au build: fetch failed",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T09:46:02.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T09:46:02.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-18T11:32:06.602Z",
          "computedAt": "2026-07-23T09:46:02.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "fallback",
          "qualityStatus": "degraded",
          "fallbackUsed": true,
          "fallbackReason": "Agrégateur indisponible au build: fetch failed",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T09:46:02.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T09:46:02.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-18T11:32:06.602Z",
          "computedAt": "2026-07-23T09:46:02.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "fallback",
          "qualityStatus": "degraded",
          "fallbackUsed": true,
          "fallbackReason": "Agrégateur indisponible au build: fetch failed",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T09:46:02.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T09:46:02.000Z",
          "observedAt": null,
          "sourcePublishedAt": null,
          "retrievedAt": "2026-07-18T11:32:06.602Z",
          "computedAt": "2026-07-23T09:46:02.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "fallback",
          "qualityStatus": "degraded",
          "fallbackUsed": true,
          "fallbackReason": "Agrégateur indisponible au build: fetch failed",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Date de publication de la source amont non exposée par le snapshot historique.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T11:46:02+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-18T11:32:06.602Z",
            "lastAttemptAt": "2026-07-23T09:47:15.162Z",
            "lastSuccessAt": "2026-07-18T11:32:06.602Z",
            "computedAt": "2026-07-23T11:46:02+02:00",
            "staleAfter": "PT36H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "fallback",
            "qualityStatus": "degraded",
            "fallbackUsed": true,
            "fallbackReason": "Agrégateur indisponible au build: fetch failed",
            "warnings": [
              "Agrégateur indisponible au build: fetch failed"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-18T11:32:06.602Z",
            "lastAttemptAt": "2026-07-23T09:47:15.162Z",
            "lastSuccessAt": "2026-07-18T11:32:06.602Z",
            "computedAt": "2026-07-23T11:46:02+02:00",
            "staleAfter": "PT36H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "fallback",
            "qualityStatus": "degraded",
            "fallbackUsed": true,
            "fallbackReason": "Agrégateur indisponible au build: fetch failed",
            "warnings": [
              "Agrégateur indisponible au build: fetch failed"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-18T11:32:06.602Z",
            "lastAttemptAt": "2026-07-23T09:47:15.162Z",
            "lastSuccessAt": "2026-07-18T11:32:06.602Z",
            "computedAt": "2026-07-23T11:46:02+02:00",
            "staleAfter": "PT12H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "fallback",
            "qualityStatus": "degraded",
            "fallbackUsed": true,
            "fallbackReason": "Agrégateur indisponible au build: fetch failed",
            "warnings": [
              "Agrégateur indisponible au build: fetch failed"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": null,
            "retrievedAt": "2026-07-18T11:32:06.602Z",
            "lastAttemptAt": "2026-07-23T09:47:15.162Z",
            "lastSuccessAt": "2026-07-18T11:32:06.602Z",
            "computedAt": "2026-07-23T11:46:02+02:00",
            "staleAfter": "PT6H",
            "expiresAt": null,
            "timelinessStatus": "unknown",
            "sourceStatus": "fallback",
            "qualityStatus": "degraded",
            "fallbackUsed": true,
            "fallbackReason": "Agrégateur indisponible au build: fetch failed",
            "warnings": [
              "Agrégateur indisponible au build: fetch failed"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": false,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt",
              "sourcePublishedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-18T11:23:13.000Z",
            "retrievedAt": "2026-07-18T11:32:06.602Z",
            "lastAttemptAt": "2026-07-23T09:47:15.162Z",
            "lastSuccessAt": "2026-07-18T11:32:06.602Z",
            "computedAt": "2026-07-23T11:46:02+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-18T17:23:13.000Z",
            "timelinessStatus": "stale",
            "sourceStatus": "fallback",
            "qualityStatus": "degraded",
            "fallbackUsed": true,
            "fallbackReason": "Debt Risk Radar indisponible au build: fetch failed",
            "warnings": [
              "Debt Risk Radar indisponible au build: fetch failed"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T11:46:02+02:00",
        "latest": [
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "1f2eadc478e2a45e4b4d0f40c603ed1d4c580c4ec1578cab6e7270094ca725dd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "7f0cbb2419693200d09be9c87b8312d08cf2393eb98137e704ecfa4dcf0a3b71",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "aa934319a0e07852d572746dc106496c97d72487ab81f5e590ae314b2de3d49a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "e9ca4f94153100f3af6f231f7bab392b76cf614657e810d2440df3ab614d2f12",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "88da36bff6f2b32f8495a5dbec52e5a30b0c8f03e3ae77ae1cf6605fa630d68e",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "49ed8bc2ed57a0801e1523ee73ec3ab6ec2d858c50d9d1b44a8d3da0cfab56ac",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "22b2bb96b3f18ecca8ca1b6cc96e428db27143ccce8da3af1b8d8013e1e490b0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "1ae79c7f34d678d200d50e83843dd2162b3e1999dd91377e5b8dcc8bcfd51031",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "e53889fed2e080f96921f3d146c975dd16cc39f4b81ca8ad1c053f8a523e96f5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "826c0f4441fe870aaf066aacc5a5fc57c43ca95aef333e3dcf962c242a754ffb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "a28382822d4072b175955d0fba628e7cfeb8ac8c5bccd1c9d9b1291562240c1f"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T132319+0200-67d3c9a38e3c-30002958320-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T11:24:33.458Z",
      "computedAt": "2026-07-23T13:23:19+02:00",
      "gitSha": "67d3c9a38e3cb10629819a8f22794bf3b3dc61ef",
      "previousFrameHash": "a28382822d4072b175955d0fba628e7cfeb8ac8c5bccd1c9d9b1291562240c1f",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30002958320",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "6682624d74127887bebfc7b692e7b91d599aef3ac16c674be47b0da28f683417",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "dd1d4c6c0cef19f91bad11ee2fb0aa1a809a7a324ba47225688081a205b22f52",
          "bytes": 1170882,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "c60cf29ec5382d6e265a20ee0428638ee3a776dbf26df8a132a18b2c9243ac5a",
          "bytes": 3436777,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "a9624288316088c752b263eba6058e12dbefa2585491a39d26ad9d35b6b579de",
          "bytes": 640871,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "68492ea9b676abec859fef96c3860e5a019d3afad1c5aee2f6cc1d110af1c292",
          "bytes": 594508,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "6f1f2b5e0a206abb7aa353ac7e2dd2d3626ba146f2a96e8d4aafc1858f348108",
          "bytes": 28381,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "a733cf881a2e77088952080eb6423d9536b25fcdc9b17bd9d00d16dd7706069d",
          "bytes": 15956,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "c8964dc3f5f849783ded87e67c0e5fc9f301c12e1c83e9e69b08fa41a75e1253",
          "bytes": 244900,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "bcbc7aff65f0e305d2675d379a819494a59fd78a438068ebcb4a2cebe1894edc",
          "bytes": 145002,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "2ef53391258d612c4cf7e2b9a41f0bf79c3a8998e9e4002ff7c1f8f3a8851591",
          "bytes": 15563,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "d77ff484f5a95a6990e72c02943977ef441d1ba3133db9039dce7165e92255f1",
          "bytes": 7383,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "30806c94f0b22947d76708a0ce2d843ff1ef62ede5155b19c10aa5fda83ecaa4",
          "bytes": 1109515,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T11:23:19.000Z:8179902a4f7b",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T11:23:19.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T11:15:09.000Z",
          "retrievedAt": "2026-07-23T11:24:33.458Z",
          "computedAt": "2026-07-23T11:23:19.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.74523067283486,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "8179902a4f7bb6564421b57f432c8f574dec80357468603668983262ce88a3e0",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T11:23:19.000Z:39e89118efe0",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T11:23:19.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T11:06:31.000Z",
          "retrievedAt": "2026-07-23T11:14:47.000Z",
          "computedAt": "2026-07-23T11:23:19.000Z",
          "archivedAt": null,
          "value": 51,
          "rawValue": 51,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "39e89118efe06568410bd798d0b2d9bc2565829f9c8758a7d40a8c671091ef53",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T11:23:19.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T11:23:19.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T11:14:47.000Z",
          "computedAt": "2026-07-23T11:23:19.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T11:23:19.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T11:23:19.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T11:14:47.000Z",
          "computedAt": "2026-07-23T11:23:19.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T11:23:19.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T11:23:19.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T10:16:47.000Z",
          "retrievedAt": "2026-07-23T11:14:47.000Z",
          "computedAt": "2026-07-23T11:23:19.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T13:23:19+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T11:14:47.000Z",
            "lastAttemptAt": "2026-07-23T11:14:47.000Z",
            "lastSuccessAt": "2026-07-23T11:14:47.000Z",
            "computedAt": "2026-07-23T13:23:19+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T11:14:47.000Z",
            "lastAttemptAt": "2026-07-23T11:14:47.000Z",
            "lastSuccessAt": "2026-07-23T11:14:47.000Z",
            "computedAt": "2026-07-23T13:23:19+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T10:16:47.000Z",
            "retrievedAt": "2026-07-23T11:14:47.000Z",
            "lastAttemptAt": "2026-07-23T11:14:47.000Z",
            "lastSuccessAt": "2026-07-23T11:14:47.000Z",
            "computedAt": "2026-07-23T13:23:19+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-23T22:16:47.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T11:06:31.000Z",
            "retrievedAt": "2026-07-23T11:14:47.000Z",
            "lastAttemptAt": "2026-07-23T11:14:47.000Z",
            "lastSuccessAt": "2026-07-23T11:14:47.000Z",
            "computedAt": "2026-07-23T13:23:19+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T17:06:31.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T11:15:09.000Z",
            "retrievedAt": "2026-07-23T11:24:33.458Z",
            "lastAttemptAt": "2026-07-23T11:24:33.458Z",
            "lastSuccessAt": "2026-07-23T11:24:33.458Z",
            "computedAt": "2026-07-23T13:23:19+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T17:15:09.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T13:23:19+02:00",
        "latest": [
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "a15da786d149002703e007b7a2edf74d454978339e4cf65e6194c31a02ac7fc9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "f483846c708e3e7d661905616f8a3cc944d1c7108ea5e926db121f88bfda066c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "1a55286e5e5a9fbc5ebe513340c6ac42bd66f2dce7a863f4e1e5915948abc0a9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "662cdffd8bf24d17ccf40a78708abea7736b57c6f6376aa3899de52c54b778ce",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "283223a3da29703ca310ce44cb00016a1cfbf06d34d981afd152e345517645be",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "98a2a8545eb8a0ad99160f9a3f84cf1ff3f703ecc94f4ce3a2085f9c1bed9b0f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "4971de5ddaee9c2b5d6818b3a35aa3292d3eb6418571c72dff35ca5e9009fd00",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "db16229e9aad1dbc49939c76acfcfaabe5a2e808daa185bc74c26bf8ff47de22",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "e53889fed2e080f96921f3d146c975dd16cc39f4b81ca8ad1c053f8a523e96f5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "9a396eb34f50ac1b53fabe8007ea1705fb0b73ea75afbc694b418dead33fcc31",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "3d9b3d5e172d14a9d88f10691891e8209758e90995130ff4932891fff765f171"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T140859+0200-1d5d1cdf6d0f-30005866744-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T12:10:21.627Z",
      "computedAt": "2026-07-23T14:08:59+02:00",
      "gitSha": "1d5d1cdf6d0f76c8bc1aa18ebf80ca01d75f0cbc",
      "previousFrameHash": "3d9b3d5e172d14a9d88f10691891e8209758e90995130ff4932891fff765f171",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30005866744",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "6682624d74127887bebfc7b692e7b91d599aef3ac16c674be47b0da28f683417",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "b9a0158b952fa3931ef51c0190d4422df9ca39aa657772dd08764c5270f66024",
          "bytes": 1170882,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "c60cf29ec5382d6e265a20ee0428638ee3a776dbf26df8a132a18b2c9243ac5a",
          "bytes": 3436777,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "4156a1b00eb699486d8840abbe7a7db06f164bbf94d0ca1989e8fc8bb051412e",
          "bytes": 640871,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "d72091999df10dc2349e8981a88dc21e41de92afa45c2ac87e5c514e4e0732f1",
          "bytes": 594508,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "6f1f2b5e0a206abb7aa353ac7e2dd2d3626ba146f2a96e8d4aafc1858f348108",
          "bytes": 28381,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "ba2d072f4dad7cf73e9e40e166b05e47e2c583523d9a58c3893d098f307b6478",
          "bytes": 15956,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "65f1c1a9cad896bbf16ac5d43b2dd16ae285dd0b246de7afc44b0fa15273c25b",
          "bytes": 244900,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "2733af13f29db2022df76a05143337890c79c2e1e6c5246f7cb5f5d13a0a6a08",
          "bytes": 145000,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "aad09e4dbfeeb616d5878a3a20c9474551fc89f691b37ce7701d73a194136c82",
          "bytes": 15564,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "84590c06370c039549dab9a3158b58eed1a4b7221a78b4e57022c0a225fbe117",
          "bytes": 7383,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "756b2b1f20ab22cad20223822a13a4f2cc1e4b6368b191361013af9e37cb149a",
          "bytes": 1118938,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T12:08:59.000Z:321748889071",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T12:08:59.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T12:02:37.000Z",
          "retrievedAt": "2026-07-23T12:10:21.627Z",
          "computedAt": "2026-07-23T12:08:59.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.74523067283486,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "321748889071c67f087e9bed7d2f70ee6ac367a6240a58a1b2cd556d14f11975",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T12:08:59.000Z:39e89118efe0",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T12:08:59.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T11:37:37.000Z",
          "retrievedAt": "2026-07-23T12:00:07.000Z",
          "computedAt": "2026-07-23T12:08:59.000Z",
          "archivedAt": null,
          "value": 51,
          "rawValue": 51,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "39e89118efe06568410bd798d0b2d9bc2565829f9c8758a7d40a8c671091ef53",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T12:08:59.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T12:08:59.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T12:00:07.000Z",
          "computedAt": "2026-07-23T12:08:59.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T12:08:59.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T12:08:59.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T12:00:07.000Z",
          "computedAt": "2026-07-23T12:08:59.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T12:08:59.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T12:08:59.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T10:16:47.000Z",
          "retrievedAt": "2026-07-23T12:00:07.000Z",
          "computedAt": "2026-07-23T12:08:59.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T14:08:59+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T12:00:07.000Z",
            "lastAttemptAt": "2026-07-23T12:00:07.000Z",
            "lastSuccessAt": "2026-07-23T12:00:07.000Z",
            "computedAt": "2026-07-23T14:08:59+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T12:00:07.000Z",
            "lastAttemptAt": "2026-07-23T12:00:07.000Z",
            "lastSuccessAt": "2026-07-23T12:00:07.000Z",
            "computedAt": "2026-07-23T14:08:59+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T10:16:47.000Z",
            "retrievedAt": "2026-07-23T12:00:07.000Z",
            "lastAttemptAt": "2026-07-23T12:00:07.000Z",
            "lastSuccessAt": "2026-07-23T12:00:07.000Z",
            "computedAt": "2026-07-23T14:08:59+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-23T22:16:47.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T11:37:37.000Z",
            "retrievedAt": "2026-07-23T12:00:07.000Z",
            "lastAttemptAt": "2026-07-23T12:00:07.000Z",
            "lastSuccessAt": "2026-07-23T12:00:07.000Z",
            "computedAt": "2026-07-23T14:08:59+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T17:37:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T12:02:37.000Z",
            "retrievedAt": "2026-07-23T12:10:21.627Z",
            "lastAttemptAt": "2026-07-23T12:10:21.627Z",
            "lastSuccessAt": "2026-07-23T12:10:21.627Z",
            "computedAt": "2026-07-23T14:08:59+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T18:02:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T14:08:59+02:00",
        "latest": [
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "01c8c1f89f2ba022703a2ad492c69edac4aa9573eb4701dc6cf755e1d10f3fa4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "f8fedfceb6804c7a3fe653328337dd78d5ae2babc6641a676d44eb22fac8c05a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "8155f08c67ed28f0331141baffd5a71793492ccdcb09771ac7a52b4d4c066d3f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "f597361e8e6382d6a3d2a2e16cdb2079c58a2ca0f1327b684e752ec08b07f55f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "356905ef473020da670780fbb560ff91f858d953260e499e13a773c949ebcdad",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "84f6a38711cb6307a6f24364c40569a613f17de8278411f9adb3706dbf7e4d85",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "9b50c2e14ecf76ad2b617bae3eb388b3496dc43e23385175139636f9fac66ba1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "4f0e7b8ef7788b2e996e8a4f5cf7f4f5d7789345f141787da2c86da9b043f173",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "e53889fed2e080f96921f3d146c975dd16cc39f4b81ca8ad1c053f8a523e96f5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "37e398d0c9887843f53de3b3fdec8123e7cc41dfecfe3edc90c5e6feb4cd801b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "fd3e3b2420882f8056b5ef07df3e860d278b3843737f4d3b6333109950341070"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T165803+0200-04aa558f38ee-30018332539-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T14:59:15.791Z",
      "computedAt": "2026-07-23T16:58:03+02:00",
      "gitSha": "04aa558f38ee8a8d8e79f2826f731ba7b4d354ad",
      "previousFrameHash": "fd3e3b2420882f8056b5ef07df3e860d278b3843737f4d3b6333109950341070",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30018332539",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "6682624d74127887bebfc7b692e7b91d599aef3ac16c674be47b0da28f683417",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "b1848f100d05daf9a3c0bfda6881209143a572403287afa9194b67de1ab5f82c",
          "bytes": 1170882,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "c60cf29ec5382d6e265a20ee0428638ee3a776dbf26df8a132a18b2c9243ac5a",
          "bytes": 3436777,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "ce270087b04359e4a964ffe0647d79efa958dccf6d7af0b5852fea593a6582a0",
          "bytes": 640871,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "018e17d0f49f6bbca345cfda19c6ee879602346a0d8eb82d9fc39d0ac14baeb8",
          "bytes": 594508,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "6f1f2b5e0a206abb7aa353ac7e2dd2d3626ba146f2a96e8d4aafc1858f348108",
          "bytes": 28381,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "370e0f4172f966748beafc57d3b01ec1a5e65e0d083b1a20c1fe1242571fccbc",
          "bytes": 15956,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "82cb542ca417156f137445013636d8846a69d9762745be12908161793f872f5b",
          "bytes": 244900,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "7f0cd3657c05c7561e2b944e84f67848481aa6c313bdcd19eed741c82590d14f",
          "bytes": 144008,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "cefe4a9332a8cb519287a95fca28d2604d7cbe85063e8a3a3084a999cf34919d",
          "bytes": 15562,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "da9d2a9bf1ad716808d0a60f821f3169ae688d11a9e807718100ce99d5c441ce",
          "bytes": 7381,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "9ebcbce6435049446aadd421df3b26c13062e7299aad1b5dfc526ad3b26ff6b7",
          "bytes": 1128361,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T14:58:03.000Z:cacb7d11d3ca",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T14:58:03.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T14:46:48.000Z",
          "retrievedAt": "2026-07-23T14:59:15.791Z",
          "computedAt": "2026-07-23T14:58:03.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.73423041340924,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "cacb7d11d3cae3162cd7d20ffb7b41b5aea4252bbcace10364c373096a06f814",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T14:58:03.000Z:08be70f51b59",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T14:58:03.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T14:44:41.000Z",
          "retrievedAt": "2026-07-23T14:46:27.000Z",
          "computedAt": "2026-07-23T14:58:03.000Z",
          "archivedAt": null,
          "value": 52,
          "rawValue": 52,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "08be70f51b595568fc9075f53845a757a2c9152cd115f643cea9b2eb414e567a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T14:58:03.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T14:58:03.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T14:46:27.000Z",
          "computedAt": "2026-07-23T14:58:03.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T14:58:03.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T14:58:03.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T14:46:27.000Z",
          "computedAt": "2026-07-23T14:58:03.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T14:58:03.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T14:58:03.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T10:16:47.000Z",
          "retrievedAt": "2026-07-23T14:46:27.000Z",
          "computedAt": "2026-07-23T14:58:03.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T16:58:03+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T14:46:27.000Z",
            "lastAttemptAt": "2026-07-23T14:46:27.000Z",
            "lastSuccessAt": "2026-07-23T14:46:27.000Z",
            "computedAt": "2026-07-23T16:58:03+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T14:46:27.000Z",
            "lastAttemptAt": "2026-07-23T14:46:27.000Z",
            "lastSuccessAt": "2026-07-23T14:46:27.000Z",
            "computedAt": "2026-07-23T16:58:03+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T10:16:47.000Z",
            "retrievedAt": "2026-07-23T14:46:27.000Z",
            "lastAttemptAt": "2026-07-23T14:46:27.000Z",
            "lastSuccessAt": "2026-07-23T14:46:27.000Z",
            "computedAt": "2026-07-23T16:58:03+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-23T22:16:47.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T14:44:41.000Z",
            "retrievedAt": "2026-07-23T14:46:27.000Z",
            "lastAttemptAt": "2026-07-23T14:46:27.000Z",
            "lastSuccessAt": "2026-07-23T14:46:27.000Z",
            "computedAt": "2026-07-23T16:58:03+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T20:44:41.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T14:46:48.000Z",
            "retrievedAt": "2026-07-23T14:59:15.791Z",
            "lastAttemptAt": "2026-07-23T14:59:15.791Z",
            "lastSuccessAt": "2026-07-23T14:59:15.791Z",
            "computedAt": "2026-07-23T16:58:03+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T20:46:48.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T16:58:03+02:00",
        "latest": [
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "97ee61d59bb6fb4e4dec7e2ca58ed16ba75ac0a597bea2ec0f89f48465c1bb9e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "5275b61d9f1215cbff89ad8d4aaba81e83e3d9db07646c65a6c9c87539b2615d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "0d1272aa00afda25b56d02e0e3a2be26a0ad1479cf1ee5b106e6e12ff1788c7b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "46e4ca581e671a4ed1589ad37d84c43e59c2cf747619f0a89dd8d27ba55e7025",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "88abfdfb0edc9b8260e64c265e1420886aa61dca6705515546c46505ae50c285",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "efee58a2d4b29c131137e239296532cba3fa0f81b451548bab789e65931c797e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "7eadb26a85d875d20c0814a94ab2b0e9fbb766ed4bf6ddcc1f6501be72ac90a0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "dfa3036f1f973407856e93e13bfe0e17c11afb38def315755fa260ee5d9e9995",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "e53889fed2e080f96921f3d146c975dd16cc39f4b81ca8ad1c053f8a523e96f5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "a55cb0e0cdcf8cd2629b1eb0b9eb13f74438b4d3e9c8e98bf3a378e0166ef14b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "933ccb86a859ee675889db5bb04468eb6f848a99a40c692426b851aecbc3b8c5"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T173853+0200-af86438463f9-30021527128-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T15:39:55.896Z",
      "computedAt": "2026-07-23T17:38:53+02:00",
      "gitSha": "af86438463f9d942ff120ae0eab87dbe39af10de",
      "previousFrameHash": "933ccb86a859ee675889db5bb04468eb6f848a99a40c692426b851aecbc3b8c5",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30021527128",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "6682624d74127887bebfc7b692e7b91d599aef3ac16c674be47b0da28f683417",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "480172a9ffa31ebf744cb8d30dcd8a54a65b7d8013c9f3f2384087ebff513e93",
          "bytes": 1170882,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "c60cf29ec5382d6e265a20ee0428638ee3a776dbf26df8a132a18b2c9243ac5a",
          "bytes": 3436777,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "05738a1c1469893970eef4962780dd08c77ab3270b4d4900cbf30f2908723dda",
          "bytes": 640871,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "5e67623ddd78d1d88e88925e183809f723b0eabf1cb19702ed1e693632ce0112",
          "bytes": 594508,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "6f1f2b5e0a206abb7aa353ac7e2dd2d3626ba146f2a96e8d4aafc1858f348108",
          "bytes": 28381,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "f8748b89cab505ac4027de0335d37451043e7029474736131fd4f16ecc630dee",
          "bytes": 15956,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "f12cf3ec815106f321f2c33c2baf3b05da9cd33de00c289ae8f5fd2879ef84fa",
          "bytes": 244900,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "0d8e2cc49c0ea4c5ef795061fb904ba42ad16f6fa573ecbfaaa04d37f923bbc4",
          "bytes": 144890,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "319f9b670677993f8c9231a301eb3fe4349eadb74af4b1cd6c1042ae9fceaa91",
          "bytes": 17658,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "f41ae1a90f0760f24d2cf0518104e6dcdce93fe97eed5b99c4e111c82bc0cfeb",
          "bytes": 9477,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "55d5f3dbb60962f1487667fda9deb48b9931de641b6b84530197321056b3aa9e",
          "bytes": 1137786,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T15:38:53.000Z:cb1995d11116",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T15:38:53.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T15:31:57.000Z",
          "retrievedAt": "2026-07-23T15:39:55.896Z",
          "computedAt": "2026-07-23T15:38:53.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.56143685245449,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "cb1995d11116354beba52f905fd1c0402c2a2a882cc30487f68041aa666246d5",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "degraded",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T15:38:53.000Z:08be70f51b59",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T15:38:53.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T15:15:05.000Z",
          "retrievedAt": "2026-07-23T15:31:37.000Z",
          "computedAt": "2026-07-23T15:38:53.000Z",
          "archivedAt": null,
          "value": 52,
          "rawValue": 52,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "08be70f51b595568fc9075f53845a757a2c9152cd115f643cea9b2eb414e567a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T15:38:53.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T15:38:53.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T15:31:37.000Z",
          "computedAt": "2026-07-23T15:38:53.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T15:38:53.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T15:38:53.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T15:31:37.000Z",
          "computedAt": "2026-07-23T15:38:53.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T15:38:53.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T15:38:53.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T10:16:47.000Z",
          "retrievedAt": "2026-07-23T15:31:37.000Z",
          "computedAt": "2026-07-23T15:38:53.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T17:38:53+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T15:31:37.000Z",
            "lastAttemptAt": "2026-07-23T15:31:37.000Z",
            "lastSuccessAt": "2026-07-23T15:31:37.000Z",
            "computedAt": "2026-07-23T17:38:53+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T15:31:37.000Z",
            "lastAttemptAt": "2026-07-23T15:31:37.000Z",
            "lastSuccessAt": "2026-07-23T15:31:37.000Z",
            "computedAt": "2026-07-23T17:38:53+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T10:16:47.000Z",
            "retrievedAt": "2026-07-23T15:31:37.000Z",
            "lastAttemptAt": "2026-07-23T15:31:37.000Z",
            "lastSuccessAt": "2026-07-23T15:31:37.000Z",
            "computedAt": "2026-07-23T17:38:53+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-23T22:16:47.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T15:15:05.000Z",
            "retrievedAt": "2026-07-23T15:31:37.000Z",
            "lastAttemptAt": "2026-07-23T15:31:37.000Z",
            "lastSuccessAt": "2026-07-23T15:31:37.000Z",
            "computedAt": "2026-07-23T17:38:53+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T21:15:05.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T15:31:57.000Z",
            "retrievedAt": "2026-07-23T15:39:55.896Z",
            "lastAttemptAt": "2026-07-23T15:39:55.896Z",
            "lastSuccessAt": "2026-07-23T15:39:55.896Z",
            "computedAt": "2026-07-23T17:38:53+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T21:31:57.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "degraded",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [
              "Massive Market Data: TLT: HTTP 429: {\"status\":\"ERROR\",\"request_id\":\"ea93a263811ad22881feac226fe32f8a\",\"error\":\"You've exceeded the maximum requests per minute, please wait or upgrade your subscription to continue. https://massive.com/pr",
              "Massive Market Data: HYG: HTTP 429: {\"status\":\"ERROR\",\"request_id\":\"6bd77edfd5bed2b7530da77b4287cec1\",\"error\":\"You've exceeded the maximum requests per minute, please wait or upgrade your subscription to continue. https://massive.com/pr",
              "Massive Market Data: LQD: HTTP 429: {\"status\":\"ERROR\",\"request_id\":\"b46cf5cc6f0ec6c59c0968e83c84aa24\",\"error\":\"You've exceeded the maximum requests per minute, please wait or upgrade your subscription to continue. https://massive.com/pr",
              "Massive Market Data: SHY: HTTP 429: {\"status\":\"ERROR\",\"request_id\":\"3ba60c5a1276e3b12e52c9ac3457f7a6\",\"error\":\"You've exceeded the maximum requests per minute, please wait or upgrade your subscription to continue. https://massive.com/pr",
              "Massive Market Data: SPY: HTTP 429: {\"status\":\"ERROR\",\"request_id\":\"9e233e9235710a9093c4daa4949f0528\",\"error\":\"You've exceeded the maximum requests per minute, please wait or upgrade your subscription to continue. https://massive.com/pr"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T17:38:53+02:00",
        "latest": [
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "74237cea6b9a2fe4f490bd2907b60a2a2a2ce51d33081bdc303ad2a7342a9057",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "4a257ba8baa292195e95a0b96cc7bc9986994c75b30fa13fe3c0679503a66323",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "23dd715e2c3270c555ceb4507aa80d717b39f781232a6738bc6cc8e270379836",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "9fb7007880f5f105802d7727031698457185e03d7fb6b9d7300857bf0278559d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "c892c4e2a8688e9a56b5c4513422c43e601cc1b267e6c1a42ecb75e5bfa2d9e9",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "2b46af23c95ad6fa472921e85d696b513b60aeea61909529e5c6a2fd69c21360",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "74ed9bffc8b9a9c291db3b69dd6ff41db1886d5d894afedf7451e28f105096f0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "b44b785bcc7e129ece20d5b7c09246fcb5688a33c8f3fb9d89ef65fb8a45726a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "e53889fed2e080f96921f3d146c975dd16cc39f4b81ca8ad1c053f8a523e96f5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "e5b010dbef59630497f37eb60c5df6c0fdd02597c8b6a971dd569a6b4d6a0c31",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "b580c9c13a465454d81abbd117df6ff6084b60fad6f2125630d45f57f685eec4"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T180646+0200-1492bf8d57fa-30023672520-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T16:07:49.701Z",
      "computedAt": "2026-07-23T18:06:46+02:00",
      "gitSha": "1492bf8d57faefb223b6a7f886d325d747598103",
      "previousFrameHash": "b580c9c13a465454d81abbd117df6ff6084b60fad6f2125630d45f57f685eec4",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30023672520",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "6682624d74127887bebfc7b692e7b91d599aef3ac16c674be47b0da28f683417",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "a1033165463555a21fd8f998d9a093943a130490116288100a3d3602dd4d26bd",
          "bytes": 1170882,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "c60cf29ec5382d6e265a20ee0428638ee3a776dbf26df8a132a18b2c9243ac5a",
          "bytes": 3436777,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "300e9ec4369aad3e00f5b2641dee4119b1bc8c9447ac0d6eb2261f1db1daee39",
          "bytes": 640871,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "e0e1422ebd6a3d7fd5fbf7c119b72f2783171ddf2df8dd543b371b651138f4d0",
          "bytes": 594508,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "6f1f2b5e0a206abb7aa353ac7e2dd2d3626ba146f2a96e8d4aafc1858f348108",
          "bytes": 28381,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "8aa80463b43648bca035aafb31a06cf49366c21049e6f1ae736212f87842d425",
          "bytes": 15956,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "4f70bb86b896f57816b7ab9b2a43704c8ca3535af6bfce65cbc97a1915967692",
          "bytes": 244900,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "3118d0f3f1a7f14452a341b420b39bffcc7fcd8a73f4886ce06d661ff6f20ffc",
          "bytes": 144890,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "c8cd3c1b4122193e960886a594e864fca8763d4e7fe5a8cac8b612f85cf3795e",
          "bytes": 17658,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "5005d12bedb9850d2dd21602db4fa82e84dede11f3ab50fb2ba8ff06c9119c9a",
          "bytes": 9477,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "1d30e3d6f33e3921008e0aeea612232bc156e4b7b5b465937b4617d5884c2e80",
          "bytes": 1147210,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T16:06:46.000Z:6999cd416ec2",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T16:06:46.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T16:02:50.000Z",
          "retrievedAt": "2026-07-23T16:07:49.701Z",
          "computedAt": "2026-07-23T16:06:46.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.56143685245449,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "6999cd416ec2256f5f1b607ef22a45c6d7be775879de86daa2296706b9d40fdb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "degraded",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T16:06:46.000Z:08be70f51b59",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T16:06:46.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T15:46:09.000Z",
          "retrievedAt": "2026-07-23T16:01:37.000Z",
          "computedAt": "2026-07-23T16:06:46.000Z",
          "archivedAt": null,
          "value": 52,
          "rawValue": 52,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "08be70f51b595568fc9075f53845a757a2c9152cd115f643cea9b2eb414e567a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T16:06:46.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T16:06:46.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T16:01:37.000Z",
          "computedAt": "2026-07-23T16:06:46.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T16:06:46.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T16:06:46.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T16:01:37.000Z",
          "computedAt": "2026-07-23T16:06:46.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T16:06:46.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T16:06:46.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T10:16:47.000Z",
          "retrievedAt": "2026-07-23T16:01:37.000Z",
          "computedAt": "2026-07-23T16:06:46.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T18:06:46+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T16:01:37.000Z",
            "lastAttemptAt": "2026-07-23T16:01:37.000Z",
            "lastSuccessAt": "2026-07-23T16:01:37.000Z",
            "computedAt": "2026-07-23T18:06:46+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T16:01:37.000Z",
            "lastAttemptAt": "2026-07-23T16:01:37.000Z",
            "lastSuccessAt": "2026-07-23T16:01:37.000Z",
            "computedAt": "2026-07-23T18:06:46+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T10:16:47.000Z",
            "retrievedAt": "2026-07-23T16:01:37.000Z",
            "lastAttemptAt": "2026-07-23T16:01:37.000Z",
            "lastSuccessAt": "2026-07-23T16:01:37.000Z",
            "computedAt": "2026-07-23T18:06:46+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-23T22:16:47.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T15:46:09.000Z",
            "retrievedAt": "2026-07-23T16:01:37.000Z",
            "lastAttemptAt": "2026-07-23T16:01:37.000Z",
            "lastSuccessAt": "2026-07-23T16:01:37.000Z",
            "computedAt": "2026-07-23T18:06:46+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T21:46:09.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T16:02:50.000Z",
            "retrievedAt": "2026-07-23T16:07:49.701Z",
            "lastAttemptAt": "2026-07-23T16:07:49.701Z",
            "lastSuccessAt": "2026-07-23T16:07:49.701Z",
            "computedAt": "2026-07-23T18:06:46+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T22:02:50.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "degraded",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [
              "Massive Market Data: TLT: HTTP 429: {\"status\":\"ERROR\",\"request_id\":\"86a89e9cdec6b8ccca5934e5d550f460\",\"error\":\"You've exceeded the maximum requests per minute, please wait or upgrade your subscription to continue. https://massive.com/pr",
              "Massive Market Data: HYG: HTTP 429: {\"status\":\"ERROR\",\"request_id\":\"ac6c1f773a58262b06606925267389b1\",\"error\":\"You've exceeded the maximum requests per minute, please wait or upgrade your subscription to continue. https://massive.com/pr",
              "Massive Market Data: LQD: HTTP 429: {\"status\":\"ERROR\",\"request_id\":\"eea0153c358f992d957f11916e2609df\",\"error\":\"You've exceeded the maximum requests per minute, please wait or upgrade your subscription to continue. https://massive.com/pr",
              "Massive Market Data: SHY: HTTP 429: {\"status\":\"ERROR\",\"request_id\":\"4285fe4455a0ee4caa9c9d4a74b3d95a\",\"error\":\"You've exceeded the maximum requests per minute, please wait or upgrade your subscription to continue. https://massive.com/pr",
              "Massive Market Data: SPY: HTTP 429: {\"status\":\"ERROR\",\"request_id\":\"76c85053e7c9b670f0678dc2e044a452\",\"error\":\"You've exceeded the maximum requests per minute, please wait or upgrade your subscription to continue. https://massive.com/pr"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T18:06:46+02:00",
        "latest": [
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "fcf14801311bb6aff722ff65274978a794b9969d13c76f31ed0de78a16f74496",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "9805d77fc99edb2c727570e06754b32d059f10c1d8716e3a258556d9658b74c1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "c18173b8ce699cf019dc2fdf5ad76e234ee9e8a44de34e22664ded602c91527d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "3ec9656f4f0dac5a63e8f7445a9e9c385f25a71e90edab658e3fd8a5fd2c80c5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "f4fec5f03067acff2c3cc2ecfadf180e258dba260e1ad8dfffc71cd71abccc48",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "725c15d40c084376d56370885fbf4164120e839dbd2f25281d87d7bd5f213e79",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "2281d8a57dba7334d1da4344f555ce3d7bf108e15f11eef1051308dd1fb4337a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "7395f9d6a4cdec5788431be0e1bfd985b979855dbc54b209c27aff34a44b29b9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "7dc73197200de9eb",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "gulf-thirst-desalination-financial-achilles-heel",
            "title": "The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel",
            "url": "https://l0g.fr/en/analysis/gulf-thirst-desalination-financial-achilles-heel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Gulf is thirsty: desalinated water, the petromonarchies' financial Achilles heel.",
            "objectId": "article:en:gulf-thirst-desalination-financial-achilles-heel",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "e53889fed2e080f96921f3d146c975dd16cc39f4b81ca8ad1c053f8a523e96f5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d48f44ac06e95adc",
            "date": "2026-07-20T14:19:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "golfe-a-soif-eau-dessalee-talon-achille-financier",
            "title": "Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies",
            "url": "https://l0g.fr/posts/golfe-a-soif-eau-dessalee-talon-achille-financier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le Golfe a soif : l'eau dessalée, talon d'Achille financier des pétromonarchies.",
            "objectId": "article:golfe-a-soif-eau-dessalee-talon-achille-financier",
            "previousVersion": null,
            "currentVersion": "2026-07-20T14:19:00.000Z",
            "previousHash": null,
            "currentHash": "3e4fd747a44718f70bec40a522511d0bf924052db5eda07592be92d2b9a07c09",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "ba795f150910dd23efeda43d886da46fcfaea8a0f18d96d4bbfabd55cf66e4e8"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T182916+0200-45edc449ccf2-30025309177-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T16:30:10.999Z",
      "computedAt": "2026-07-23T18:29:16+02:00",
      "gitSha": "45edc449ccf2cbf59a288202e4d7c4742be94d51",
      "previousFrameHash": "ba795f150910dd23efeda43d886da46fcfaea8a0f18d96d4bbfabd55cf66e4e8",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30025309177",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "b113537c871464dd54259353adce3770d3e61b78d91ff8b4b5fad26597f20d33",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "cb4ab07891d2ebff78bacaa8768ecebc4ef62d632c7551e94050d16e25d5bae5",
          "bytes": 1181274,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "7062ab6dd3142f42d2017c5f58c0a8987d24442f49e7029c2ae39720b27af38d",
          "bytes": 3455105,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "3a293a81c487a4a5658af485936a28467cc11fb9744301d3f86943d3bdf7af91",
          "bytes": 652023,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "dbedfc60be8ef058a937ad69706996cca6165a1c1fa987c727abbe75c171c4dd",
          "bytes": 603079,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "4d1f6fa05bcc154698ad0ff0b70df31ae70276811d076354a826bd3244915abc",
          "bytes": 28538,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "51fe4723a34a108175ca3d3ab2ddec81825b5f517b16edc6280638db2db881b6",
          "bytes": 15953,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "94150113a1e0258880845e2b25f2c69e504b173ee513293d456018889d1bc655",
          "bytes": 246597,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "fc08b7e223bfeb68e267763104bbcc7bca0fcb9ac9f58cccb658684fb2a0dcb1",
          "bytes": 148768,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "bbb4e0cfebe5d31df556c4776cf167c87c0a91c97fb8746b94fae6c02cfd0338",
          "bytes": 15563,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "11db7bca0ae660293f19825e63aa77c76ce29d182992cde2c4bc937b2308d637",
          "bytes": 7381,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "e84e010b4e3cd354e6c1c68fde54543bb537fe7fc635de329964df8945517424",
          "bytes": 1156632,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T16:29:16.000Z:65e338ea10dd",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T16:29:16.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T16:16:58.000Z",
          "retrievedAt": "2026-07-23T16:30:10.999Z",
          "computedAt": "2026-07-23T16:29:16.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.73423041340924,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "65e338ea10dddf85573d6cf2ae6e0294efe16303e7387fb0ce880079d3ece05e",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T16:29:16.000Z:08be70f51b59",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T16:29:16.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T15:46:09.000Z",
          "retrievedAt": "2026-07-23T16:16:37.000Z",
          "computedAt": "2026-07-23T16:29:16.000Z",
          "archivedAt": null,
          "value": 52,
          "rawValue": 52,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "08be70f51b595568fc9075f53845a757a2c9152cd115f643cea9b2eb414e567a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T16:29:16.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T16:29:16.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T16:16:37.000Z",
          "computedAt": "2026-07-23T16:29:16.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T16:29:16.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T16:29:16.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T16:16:37.000Z",
          "computedAt": "2026-07-23T16:29:16.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T16:29:16.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T16:29:16.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T10:16:47.000Z",
          "retrievedAt": "2026-07-23T16:16:37.000Z",
          "computedAt": "2026-07-23T16:29:16.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T18:29:16+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T16:16:37.000Z",
            "lastAttemptAt": "2026-07-23T16:16:37.000Z",
            "lastSuccessAt": "2026-07-23T16:16:37.000Z",
            "computedAt": "2026-07-23T18:29:16+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T16:16:37.000Z",
            "lastAttemptAt": "2026-07-23T16:16:37.000Z",
            "lastSuccessAt": "2026-07-23T16:16:37.000Z",
            "computedAt": "2026-07-23T18:29:16+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T10:16:47.000Z",
            "retrievedAt": "2026-07-23T16:16:37.000Z",
            "lastAttemptAt": "2026-07-23T16:16:37.000Z",
            "lastSuccessAt": "2026-07-23T16:16:37.000Z",
            "computedAt": "2026-07-23T18:29:16+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-23T22:16:47.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T15:46:09.000Z",
            "retrievedAt": "2026-07-23T16:16:37.000Z",
            "lastAttemptAt": "2026-07-23T16:16:37.000Z",
            "lastSuccessAt": "2026-07-23T16:16:37.000Z",
            "computedAt": "2026-07-23T18:29:16+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T21:46:09.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T16:16:58.000Z",
            "retrievedAt": "2026-07-23T16:30:10.999Z",
            "lastAttemptAt": "2026-07-23T16:30:10.999Z",
            "lastSuccessAt": "2026-07-23T16:30:10.999Z",
            "computedAt": "2026-07-23T18:29:16+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T22:16:58.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T18:29:16+02:00",
        "latest": [
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "54cf3f97c9f4e0c9476864202f65f633872a26ee6c386e68a7b7f41501c6fed8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "ba98d18fe2411c027adddf0699a983903e6f1ff6fe5fda59cab239cb0cd5bf30",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "ddbddd8e3d1e9c6899c527f20799100bdae241d329d77a6081474fd1ecd50200",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "d51533d0e18357aa84416480b7f8367fa4f3c376686b9b7e41aacb6303719469",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "259b1454dcb56c4ae32b9bd3c56a4ec8b59e6d23f0fcc08ed92e46aaf969595c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "fc7378403e90f359911daf20262825480af17e31e15848af8c621cd894d3333c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "187936f764720168316c3550c1d263168662aa71193355f2e86e905d83494a3f",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "1f8d0a8d25044cd9dea11d098990e22ffd207c3a38914c64dd10f3f44a036dc8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "b60062b9f51ae7586a7acb31a84ebccad5527b9cd059d13aef0f08f92a1006e3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "168eca633cebf97027eab35af57c51131cb2a8006da23a5ea19a0411a7f4abe7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "52a450cf49638dcf606f4fa29745908152ae4894f54fe1b2e9bba9bb2efd4074"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T184333+0200-1a036d2598ca-30026409803-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T16:45:14.784Z",
      "computedAt": "2026-07-23T18:43:33+02:00",
      "gitSha": "1a036d2598ca527de93167f68ae3f8108db2a57a",
      "previousFrameHash": "52a450cf49638dcf606f4fa29745908152ae4894f54fe1b2e9bba9bb2efd4074",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30026409803",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "b113537c871464dd54259353adce3770d3e61b78d91ff8b4b5fad26597f20d33",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "b61fdb588ac5fca97a41ae18cdc0ed33428be16fb29a7e74b609e27ecc409f0e",
          "bytes": 1181274,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "7062ab6dd3142f42d2017c5f58c0a8987d24442f49e7029c2ae39720b27af38d",
          "bytes": 3455105,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "8acdf228c6c8236e309478bd2246a8615f3b3d0297b420f0f6f17d0e4a13ac2c",
          "bytes": 652023,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "63de0b5565e4a303bd3dda6a30a156b8d59c290e96d17d45a042f7e0404ad772",
          "bytes": 603079,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "4d1f6fa05bcc154698ad0ff0b70df31ae70276811d076354a826bd3244915abc",
          "bytes": 28538,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "67be70a04cfa640a26f198cae6d756a0e805762efeefccc280301fa51ee61928",
          "bytes": 15953,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "772cab85ce30a9ddb499251aba870b93bbf8f75071489f1bf59fe71d9213b143",
          "bytes": 246597,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "b5e5198a2e0de19e4aac76c7292c85c49e45fcf86ba7b725407103a0aea5ee21",
          "bytes": 148768,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "425aa441e30a0eec726ed2c24eea74f2b36d2b56e3ebdb4d560b6c83905f893f",
          "bytes": 15560,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "a0355673f70f10210b073c1df1de86ca691c0cfd6d8437f41a4932419312c9d0",
          "bytes": 7381,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "8340e9b183cba2fd16f5d0fa6f448eadd3ff1342717326f518dade50a4afae2f",
          "bytes": 1166055,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T16:43:33.000Z:e0bcb9fe068f",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T16:43:33.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T16:32:15.000Z",
          "retrievedAt": "2026-07-23T16:45:14.784Z",
          "computedAt": "2026-07-23T16:43:33.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.73423041340924,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "e0bcb9fe068f3a6f8f117a55b77835aecdaa2d3c00dea3cf3ba6a4e66d365ba0",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T16:43:33.000Z:08be70f51b59",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T16:43:33.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T16:17:32.000Z",
          "retrievedAt": "2026-07-23T16:31:53.000Z",
          "computedAt": "2026-07-23T16:43:33.000Z",
          "archivedAt": null,
          "value": 52,
          "rawValue": 52,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "08be70f51b595568fc9075f53845a757a2c9152cd115f643cea9b2eb414e567a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T16:43:33.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T16:43:33.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T16:31:53.000Z",
          "computedAt": "2026-07-23T16:43:33.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T16:43:33.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T16:43:33.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T16:31:53.000Z",
          "computedAt": "2026-07-23T16:43:33.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T16:43:33.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T16:43:33.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
          "retrievedAt": "2026-07-23T16:31:53.000Z",
          "computedAt": "2026-07-23T16:43:33.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T18:43:33+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T16:31:53.000Z",
            "lastAttemptAt": "2026-07-23T16:31:53.000Z",
            "lastSuccessAt": "2026-07-23T16:31:53.000Z",
            "computedAt": "2026-07-23T18:43:33+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T16:31:53.000Z",
            "lastAttemptAt": "2026-07-23T16:31:53.000Z",
            "lastSuccessAt": "2026-07-23T16:31:53.000Z",
            "computedAt": "2026-07-23T18:43:33+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
            "retrievedAt": "2026-07-23T16:31:53.000Z",
            "lastAttemptAt": "2026-07-23T16:31:53.000Z",
            "lastSuccessAt": "2026-07-23T16:31:53.000Z",
            "computedAt": "2026-07-23T18:43:33+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-24T04:19:07.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T16:17:32.000Z",
            "retrievedAt": "2026-07-23T16:31:53.000Z",
            "lastAttemptAt": "2026-07-23T16:31:53.000Z",
            "lastSuccessAt": "2026-07-23T16:31:53.000Z",
            "computedAt": "2026-07-23T18:43:33+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T22:17:32.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T16:32:15.000Z",
            "retrievedAt": "2026-07-23T16:45:14.784Z",
            "lastAttemptAt": "2026-07-23T16:45:14.784Z",
            "lastSuccessAt": "2026-07-23T16:45:14.784Z",
            "computedAt": "2026-07-23T18:43:33+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T22:32:15.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T18:43:33+02:00",
        "latest": [
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "12f67a69e0d4a887774c523f43b7fb57a83cd9df7104aad5d9f2f9ab10e5d26c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "ba98d18fe2411c027adddf0699a983903e6f1ff6fe5fda59cab239cb0cd5bf30",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "b41abe72e4a9170da1dae1ca802730331e0bc9e117cd93f02559a7fa0ea3b271",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "a8a41e2c7554932b109433f656e657bf0ab8ef0c58348df9bab26d2ff4154bbd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "1a5f08f9ad7be2d071537bbeffb0c13076af2bc1b44c77a8b9a8d581383f45cc",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "d7746e6125d249e437229b4030f444131236fd3535a64bdf136fda877d77a25e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "8eb1e595006a1a365c237c5e18174632101cdcfac821af2db7f1a679c390bd8a",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "bab455c28b65e872cabccd3b9beb03692419eeffe2df73142eee9b617e0b1f81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "f551adcffd69b6e03f10e92af8311a55bc1a6f06303df2882152baff5b3ada3f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "5ef630a0dfdc0b7bfe93b020cd05f134f1246c93b47df292960420d741dfdf62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "7c5a9771b99893d465ed9d6cea5582de7192b0618095a291cbcbbd76721ac41e"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T193415+0200-24a7611c1fcc-30029994877-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T17:35:22.150Z",
      "computedAt": "2026-07-23T19:34:15+02:00",
      "gitSha": "24a7611c1fcc352f0c0f90f6a463548184b4871c",
      "previousFrameHash": "7c5a9771b99893d465ed9d6cea5582de7192b0618095a291cbcbbd76721ac41e",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30029994877",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "b113537c871464dd54259353adce3770d3e61b78d91ff8b4b5fad26597f20d33",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "1dcca0af8a481f5d5b3d2c0d793f7b0ac0316a3583f78d01c369fccf43645559",
          "bytes": 1181274,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "7062ab6dd3142f42d2017c5f58c0a8987d24442f49e7029c2ae39720b27af38d",
          "bytes": 3455105,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "6965c6f390e140a750bfd4085797769b5a89290ca135144dbc1a55fc6d81f784",
          "bytes": 652023,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "59d176998b05ed45e98a9b522ba162031f16e235aade177897ff5b42efc900b0",
          "bytes": 603079,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "4d1f6fa05bcc154698ad0ff0b70df31ae70276811d076354a826bd3244915abc",
          "bytes": 28538,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "60c4cf35ea23aa179d853e572c9a942a789081b82b63cbc8f5dbe37bae2cd574",
          "bytes": 15953,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "f49c0585a9c4beabbbce6f43b1083fe7b4ad6a1cc024a6351fbfc2d3e7b2377b",
          "bytes": 246597,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "eeab26032592ec82a101383e1e8924a62091a04a041601ae527d08349d9357e5",
          "bytes": 148794,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "f983fa7a5b7dada0bc147627ab95ecb762244e40c48513cc7656426411a59572",
          "bytes": 15561,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "7a8bbd09bd13949462a7302ef546d9fc649189531e8b4120e2a0310d8b5c102e",
          "bytes": 7381,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "ad3648351a33ab42bf983577cada680a3246fd5922c239d158100f3dec2680b9",
          "bytes": 1175478,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T17:34:15.000Z:78bd30d56975",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T17:34:15.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T17:33:00.000Z",
          "retrievedAt": "2026-07-23T17:35:22.150Z",
          "computedAt": "2026-07-23T17:34:15.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.73423041340924,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "78bd30d569754982a85b940a763c1585e985cab0dd35fd320f17ad821012754e",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T17:34:15.000Z:08be70f51b59",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T17:34:15.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T17:19:33.000Z",
          "retrievedAt": "2026-07-23T17:32:37.000Z",
          "computedAt": "2026-07-23T17:34:15.000Z",
          "archivedAt": null,
          "value": 52,
          "rawValue": 52,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "08be70f51b595568fc9075f53845a757a2c9152cd115f643cea9b2eb414e567a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T17:34:15.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T17:34:15.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T17:32:37.000Z",
          "computedAt": "2026-07-23T17:34:15.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T17:34:15.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T17:34:15.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T17:32:37.000Z",
          "computedAt": "2026-07-23T17:34:15.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T17:34:15.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T17:34:15.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
          "retrievedAt": "2026-07-23T17:32:37.000Z",
          "computedAt": "2026-07-23T17:34:15.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T19:34:15+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T17:32:37.000Z",
            "lastAttemptAt": "2026-07-23T17:32:37.000Z",
            "lastSuccessAt": "2026-07-23T17:32:37.000Z",
            "computedAt": "2026-07-23T19:34:15+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T17:32:37.000Z",
            "lastAttemptAt": "2026-07-23T17:32:37.000Z",
            "lastSuccessAt": "2026-07-23T17:32:37.000Z",
            "computedAt": "2026-07-23T19:34:15+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
            "retrievedAt": "2026-07-23T17:32:37.000Z",
            "lastAttemptAt": "2026-07-23T17:32:37.000Z",
            "lastSuccessAt": "2026-07-23T17:32:37.000Z",
            "computedAt": "2026-07-23T19:34:15+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-24T04:19:07.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T17:19:33.000Z",
            "retrievedAt": "2026-07-23T17:32:37.000Z",
            "lastAttemptAt": "2026-07-23T17:32:37.000Z",
            "lastSuccessAt": "2026-07-23T17:32:37.000Z",
            "computedAt": "2026-07-23T19:34:15+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T23:19:33.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T17:33:00.000Z",
            "retrievedAt": "2026-07-23T17:35:22.150Z",
            "lastAttemptAt": "2026-07-23T17:35:22.150Z",
            "lastSuccessAt": "2026-07-23T17:35:22.150Z",
            "computedAt": "2026-07-23T19:34:15+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T23:33:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T19:34:15+02:00",
        "latest": [
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "689b03f72025771cf82342263a81984f80408bdca980ba620a7a76a34fa1a73d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "ba98d18fe2411c027adddf0699a983903e6f1ff6fe5fda59cab239cb0cd5bf30",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "cdf3d48d4e29292533d0b43afcc314bb379e176b997ffa7fae5131f6906ec0b2",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "8bd4f5a6e7ebff32631cd3fab7e8f6475a1b1f91e089af96f02a45edda7e1bb6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "bb64dae21fe665708dc3d38979aa56a558baf31241e21097c262911645fe7c3c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "b8f65b1421c2ba02cb1c4a414cb92d2bbcde3f49b47d9fdb0a4a353820866b7b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "2ccf25f736f83bca0edec7f406f2431b7358c74a4eb2e331af7c8b433475835e",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "14376085f1132d1833c7a5f8cea4d65b08d94bf13760dc276af063597f95e428",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "581fc39f5e7c513bdd6ec5b4223dffabd57bfcce70ed214bec6c981569464260",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "a7a51da4b0490ef33fe56fd5a4a81093410a9b2405f500a291ff5cc0991e4f4d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "bf102776928d628671743f7ac0ed11284d420c3f4173c258f2c6e3657b783886"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T201249+0200-5d81f4e0da1f-30032805255-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T18:14:43.605Z",
      "computedAt": "2026-07-23T20:12:49+02:00",
      "gitSha": "5d81f4e0da1fa9c1e84312dcfcab270d494dfc1f",
      "previousFrameHash": "bf102776928d628671743f7ac0ed11284d420c3f4173c258f2c6e3657b783886",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30032805255",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "b113537c871464dd54259353adce3770d3e61b78d91ff8b4b5fad26597f20d33",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "5d88f0fe9adf1f22f4a102ecc6cc75088c03a00ade53fee9243a9b06ddef0f3e",
          "bytes": 1181254,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "d0a94e6069e563a867c67245365a05e694519c6d146f0af52eb287c069a7ff6e",
          "bytes": 3455100,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "afb74316327b49de26b5a6eddb2d767cff24b052d6d622db0d082f4ccec2efd0",
          "bytes": 652008,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "868190f29dcd70af942f76f7238c7bdefc3ba29e0e10b754c37aa33a0ded2538",
          "bytes": 603074,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "4d1f6fa05bcc154698ad0ff0b70df31ae70276811d076354a826bd3244915abc",
          "bytes": 28538,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "5c3c33aac548db45dfe85d6050dc5680b3c4fb185e492469de3a212730968e56",
          "bytes": 15953,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "1737bf10e6d5484ebc699164cdf095fb520bcfc5144d1091a1756edd2a9cec80",
          "bytes": 246587,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "fefdd8be1fc10a66c52934b39c5c201ddcf628118bb8aa1189351e69b5b3a36f",
          "bytes": 148964,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "bd57b3a92973f4c9c4d3a1113b30d4bc7eac43a421714e02caf0a20e8ebfd2cd",
          "bytes": 15561,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "9bff40e48ce5020bdb294047c5b45170f1321d1588b29bc12dcc823e71f71db1",
          "bytes": 7381,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "8834f0967daeca6b063ed25f11fd3bc5e339887d544b9ddc51212db8d1d4da02",
          "bytes": 1184901,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T18:12:49.000Z:56a915cfff4a",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T18:12:49.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T18:03:20.000Z",
          "retrievedAt": "2026-07-23T18:14:43.605Z",
          "computedAt": "2026-07-23T18:12:49.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.73368756486347,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "56a915cfff4ac318261ad468e2a746e02a1ed123b16e9cf13bbb06c2533ab08c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T18:12:49.000Z:08be70f51b59",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T18:12:49.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T17:50:31.000Z",
          "retrievedAt": "2026-07-23T18:02:57.000Z",
          "computedAt": "2026-07-23T18:12:49.000Z",
          "archivedAt": null,
          "value": 52,
          "rawValue": 52,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "08be70f51b595568fc9075f53845a757a2c9152cd115f643cea9b2eb414e567a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T18:12:49.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T18:12:49.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T18:02:57.000Z",
          "computedAt": "2026-07-23T18:12:49.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T18:12:49.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T18:12:49.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T18:02:57.000Z",
          "computedAt": "2026-07-23T18:12:49.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T18:12:49.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T18:12:49.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
          "retrievedAt": "2026-07-23T18:02:57.000Z",
          "computedAt": "2026-07-23T18:12:49.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T20:12:49+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T18:02:57.000Z",
            "lastAttemptAt": "2026-07-23T18:02:57.000Z",
            "lastSuccessAt": "2026-07-23T18:02:57.000Z",
            "computedAt": "2026-07-23T20:12:49+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T18:02:57.000Z",
            "lastAttemptAt": "2026-07-23T18:02:57.000Z",
            "lastSuccessAt": "2026-07-23T18:02:57.000Z",
            "computedAt": "2026-07-23T20:12:49+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
            "retrievedAt": "2026-07-23T18:02:57.000Z",
            "lastAttemptAt": "2026-07-23T18:02:57.000Z",
            "lastSuccessAt": "2026-07-23T18:02:57.000Z",
            "computedAt": "2026-07-23T20:12:49+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-24T04:19:07.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T17:50:31.000Z",
            "retrievedAt": "2026-07-23T18:02:57.000Z",
            "lastAttemptAt": "2026-07-23T18:02:57.000Z",
            "lastSuccessAt": "2026-07-23T18:02:57.000Z",
            "computedAt": "2026-07-23T20:12:49+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T23:50:31.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T18:03:20.000Z",
            "retrievedAt": "2026-07-23T18:14:43.605Z",
            "lastAttemptAt": "2026-07-23T18:14:43.605Z",
            "lastSuccessAt": "2026-07-23T18:14:43.605Z",
            "computedAt": "2026-07-23T20:12:49+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T00:03:20.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T20:12:49+02:00",
        "latest": [
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "dd4a4ae04413db9480dadb98532464d9803cb6c76fec0d4e07d612354dfed1aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "ba98d18fe2411c027adddf0699a983903e6f1ff6fe5fda59cab239cb0cd5bf30",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "e19d503ae336ce51e590dce4d59ca77b6b3bc6283cd77465f784ebd8743c7867",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "1090803ff5c7b2b728ecc2fe26159033ec9901d40a71e99e107184566b5c53cd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "1796605a170453e9a6352d059adcec2541d627347ec02a20d7afd8fb58bd5446",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "5c4a5f1baa55a037d1e7aae64db8440503a671603d93dcb332c602154e53d8a1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "8715f2108d9a7075f554bab2df50391c3ff7b5aaa5dde980a77d6880db6a1921",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "4826848e601189d26fceeeef1c3f4d83030622e619f354779ef77afaa95df739",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "c1fa06105ac5423a4e7a28b77e974db4ef0356bd32f40e77e4b1c7c7cb26efcb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "1406e5fb69bbd6c2c52b28a4dddf382b7f65d33baba84c43d858b295a2e0af74",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "4c02c94ca3e04f2d26c32d35a89130ae864ed5ce4f57c5b8b681683747540b1d"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T202541+0200-7ff0fff2bd41-30033672885-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T18:26:50.384Z",
      "computedAt": "2026-07-23T20:25:41+02:00",
      "gitSha": "7ff0fff2bd41307e54eac1a644b7f46344beaad0",
      "previousFrameHash": "4c02c94ca3e04f2d26c32d35a89130ae864ed5ce4f57c5b8b681683747540b1d",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30033672885",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "b113537c871464dd54259353adce3770d3e61b78d91ff8b4b5fad26597f20d33",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "d58d11af647b1093261849cd82b882c4e07d94ca69fff04f61e0018ac23a0c6f",
          "bytes": 1181254,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "d0a94e6069e563a867c67245365a05e694519c6d146f0af52eb287c069a7ff6e",
          "bytes": 3455100,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "6c1a74ae4ff431848e00c73c83e666c5b055892acb46d5fedbc53de90e3359dd",
          "bytes": 652008,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "44e507f9d47c1b09a0a027fc5ebd7227a166f9f0f4df1faab5e7a29d1f1654a9",
          "bytes": 603074,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "4d1f6fa05bcc154698ad0ff0b70df31ae70276811d076354a826bd3244915abc",
          "bytes": 28538,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "7276758f3f8d34c253e0b1c761dd6cfeff3f3287778229d3d96c4bc446d3ca34",
          "bytes": 15953,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "d76354432ab4ade0a9b4bb31da5aed8e9aca458e4dff1c6eeacc8c40fca12e9f",
          "bytes": 246587,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "14f8269b851325f56efd5f93e62deb29c80d2b5e282b16b1bf9d6c7702ddb32b",
          "bytes": 148964,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "d0509a36a682c63917010340ced78d2c815269a6b189dde34b03caa82fd44dd4",
          "bytes": 15562,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "f8aa8830469aef838ab628a9e36d11c7ae8e71dbad5e9d2df86ce072a2c0186f",
          "bytes": 7381,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "cac6778ce318a4a9f1f9d944d14c084fc1f62d2d5b59d367cb9049e022f6547a",
          "bytes": 1194324,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T18:25:41.000Z:12ab9d6f4677",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T18:25:41.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T18:18:20.000Z",
          "retrievedAt": "2026-07-23T18:26:50.384Z",
          "computedAt": "2026-07-23T18:25:41.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.73368756486347,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "12ab9d6f467779102828af1629792fb56ea143fbf18a47760d920c09c945c423",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T18:25:41.000Z:08be70f51b59",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T18:25:41.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T17:50:31.000Z",
          "retrievedAt": "2026-07-23T18:17:57.000Z",
          "computedAt": "2026-07-23T18:25:41.000Z",
          "archivedAt": null,
          "value": 52,
          "rawValue": 52,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "08be70f51b595568fc9075f53845a757a2c9152cd115f643cea9b2eb414e567a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T18:25:41.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T18:25:41.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T18:17:57.000Z",
          "computedAt": "2026-07-23T18:25:41.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T18:25:41.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T18:25:41.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T18:17:57.000Z",
          "computedAt": "2026-07-23T18:25:41.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T18:25:41.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T18:25:41.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
          "retrievedAt": "2026-07-23T18:17:57.000Z",
          "computedAt": "2026-07-23T18:25:41.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T20:25:41+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T18:17:57.000Z",
            "lastAttemptAt": "2026-07-23T18:17:57.000Z",
            "lastSuccessAt": "2026-07-23T18:17:57.000Z",
            "computedAt": "2026-07-23T20:25:41+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T18:17:57.000Z",
            "lastAttemptAt": "2026-07-23T18:17:57.000Z",
            "lastSuccessAt": "2026-07-23T18:17:57.000Z",
            "computedAt": "2026-07-23T20:25:41+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
            "retrievedAt": "2026-07-23T18:17:57.000Z",
            "lastAttemptAt": "2026-07-23T18:17:57.000Z",
            "lastSuccessAt": "2026-07-23T18:17:57.000Z",
            "computedAt": "2026-07-23T20:25:41+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-24T04:19:07.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T17:50:31.000Z",
            "retrievedAt": "2026-07-23T18:17:57.000Z",
            "lastAttemptAt": "2026-07-23T18:17:57.000Z",
            "lastSuccessAt": "2026-07-23T18:17:57.000Z",
            "computedAt": "2026-07-23T20:25:41+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-23T23:50:31.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T18:18:20.000Z",
            "retrievedAt": "2026-07-23T18:26:50.384Z",
            "lastAttemptAt": "2026-07-23T18:26:50.384Z",
            "lastSuccessAt": "2026-07-23T18:26:50.384Z",
            "computedAt": "2026-07-23T20:25:41+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T00:18:20.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T20:25:41+02:00",
        "latest": [
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "7fb551d16a91620294bd33c889bb1285d4993da900f905c2338afeaf9d41715a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "ba98d18fe2411c027adddf0699a983903e6f1ff6fe5fda59cab239cb0cd5bf30",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "18211430f81e555f9b9161554ba3f88b1c45b122959ee746d2a7b06dddff29df",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "e6351a4a01a218e731ac3a5923a31aff83a7c535d64c375571181c10f5360c50",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "42c7fa86b4ba4ba8be1e5c89a52eadc193d9e08ece9e1f65681c754188256a26",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "f5ed2b6031a9bcf19a23a65cf523dd684aeb3e77cfb7590d26d97e4f2e54b36e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "98e7cc7984a0be7bf2cbb094fe46fd5fc11be84d32aa8e73ca7fe5dc546a6ef9",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "2e0fbe4c7e73953b1738877c65df4332d40c1aeb37d665b971fe420b5ecb7479",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "15622ce1aba3732df7912fd1146ead1eee0202ce3c43f2a3bf28f7c1b37b6bcd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "e236ac0aaa5ff8ba37dce952fc41a0eb6856986b24cdf4efa926ec5f6486cffb",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "fc867b9b60777875ea936ece29b66a61fe8937dcaa4b287d6e6572fd6085f698"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T203513+0200-34cb76794d8d-30034365211-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T18:36:16.974Z",
      "computedAt": "2026-07-23T20:35:13+02:00",
      "gitSha": "34cb76794d8d24701001c9d662d3e1d1100a319c",
      "previousFrameHash": "fc867b9b60777875ea936ece29b66a61fe8937dcaa4b287d6e6572fd6085f698",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30034365211",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "b113537c871464dd54259353adce3770d3e61b78d91ff8b4b5fad26597f20d33",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "6ac26017e609a8d6f0d629b9f3a40b3216e6fde6ec5ec137dce3c0ea00ed726c",
          "bytes": 1181254,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "d0a94e6069e563a867c67245365a05e694519c6d146f0af52eb287c069a7ff6e",
          "bytes": 3455100,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "8da077636d1a77979b9538ef73193531cf71c7a7df4192e38c5728727662eaef",
          "bytes": 652008,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "36bbd23a09841b5766a24b0e51d5f300f1ff37ab86e278acd26e188ac9379458",
          "bytes": 603074,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "4d1f6fa05bcc154698ad0ff0b70df31ae70276811d076354a826bd3244915abc",
          "bytes": 28538,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "2854ae337273031f2a30874831ed4ba1c14a8731ef0a63f5d3d55ba326b7d55d",
          "bytes": 15953,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "0d46a6175cebf8b2dbcedc77bfd61a91ce5822b0f6e9b2a13e425b14683b4d7c",
          "bytes": 246587,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "f7c9f16f10d5f53ad03b4ab217176750b6f80daefa98afcd28992fcb43c0df2b",
          "bytes": 148964,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "05bbae0e373dbff788751697b05a999d3ea348a37f4b5dd04f03b92739a09fae",
          "bytes": 15561,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "8f6056894a99a835a14f4b86de2903eb8b81dc3f5d327d7b0ba98f1191d4fd5f",
          "bytes": 7381,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "4840586948e398bf58902b165d2d2bc755d9a61ff4ecd8bbdcd89e76fe3ad193",
          "bytes": 1203747,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T18:35:13.000Z:49d1038e1bd2",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T18:35:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T18:33:20.000Z",
          "retrievedAt": "2026-07-23T18:36:16.974Z",
          "computedAt": "2026-07-23T18:35:13.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.73368756486347,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "49d1038e1bd2ce2b19f00ee5e4b08c4718c227f1ac8afad55e8c0ced372f9836",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T18:35:13.000Z:08be70f51b59",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T18:35:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T18:22:38.000Z",
          "retrievedAt": "2026-07-23T18:32:57.000Z",
          "computedAt": "2026-07-23T18:35:13.000Z",
          "archivedAt": null,
          "value": 52,
          "rawValue": 52,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "08be70f51b595568fc9075f53845a757a2c9152cd115f643cea9b2eb414e567a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T18:35:13.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T18:35:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T18:32:57.000Z",
          "computedAt": "2026-07-23T18:35:13.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T18:35:13.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T18:35:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T18:32:57.000Z",
          "computedAt": "2026-07-23T18:35:13.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T18:35:13.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T18:35:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
          "retrievedAt": "2026-07-23T18:32:57.000Z",
          "computedAt": "2026-07-23T18:35:13.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T20:35:13+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T18:32:57.000Z",
            "lastAttemptAt": "2026-07-23T18:32:57.000Z",
            "lastSuccessAt": "2026-07-23T18:32:57.000Z",
            "computedAt": "2026-07-23T20:35:13+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T18:32:57.000Z",
            "lastAttemptAt": "2026-07-23T18:32:57.000Z",
            "lastSuccessAt": "2026-07-23T18:32:57.000Z",
            "computedAt": "2026-07-23T20:35:13+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
            "retrievedAt": "2026-07-23T18:32:57.000Z",
            "lastAttemptAt": "2026-07-23T18:32:57.000Z",
            "lastSuccessAt": "2026-07-23T18:32:57.000Z",
            "computedAt": "2026-07-23T20:35:13+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-24T04:19:07.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T18:22:38.000Z",
            "retrievedAt": "2026-07-23T18:32:57.000Z",
            "lastAttemptAt": "2026-07-23T18:32:57.000Z",
            "lastSuccessAt": "2026-07-23T18:32:57.000Z",
            "computedAt": "2026-07-23T20:35:13+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T00:22:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T18:33:20.000Z",
            "retrievedAt": "2026-07-23T18:36:16.974Z",
            "lastAttemptAt": "2026-07-23T18:36:16.974Z",
            "lastSuccessAt": "2026-07-23T18:36:16.974Z",
            "computedAt": "2026-07-23T20:35:13+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T00:33:20.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T20:35:13+02:00",
        "latest": [
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "d9e66aba8004a08615ca6506daa94a7707aa99a11b17f1057fab270ebcb49ad1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "ba98d18fe2411c027adddf0699a983903e6f1ff6fe5fda59cab239cb0cd5bf30",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6ca9a1c68e2870e5a52486b5d8c434f6af76bf244ddc0235e183b69b57e7fd67",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "6ac4e4cf5627d57aadb162c036629de52fcfe9ce6b614961f9ac367a92b495af",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "e1ee5caea437312e98e59e1b8e714ba757daca424299c2d748daa9a4de5aad02",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "cc0e58a2b01e2e329e7348c6b1908b881c447a4399d805b4641fdb3481295bb7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "6a89bf8e24d3cec2de32ba61ff3d913f7d261ecba56ad1299338ce3f603832a3",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "2d7ed96934c6068198461d3108e2a44d8016d0eb9756e117a57bd2cfec9d754b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "e8452561a0b2c3c4e058d11c35412a029d0f9345a9b3939857e1cb7a91643350",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "bd1308877bb87ab1d8d3f3c78c0e0a7fec1f885ab147522cc75bac098ebea221",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "d56abafcdb4ec2fdf4454b15eb6657d9f153a2a2829372e24a32f27ee5dd54d6"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T205627+0200-2a6187d5ccb1-30035903653-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T18:57:33.838Z",
      "computedAt": "2026-07-23T20:56:27+02:00",
      "gitSha": "2a6187d5ccb16f6ac464cc3f06357da3d99aacbf",
      "previousFrameHash": "d56abafcdb4ec2fdf4454b15eb6657d9f153a2a2829372e24a32f27ee5dd54d6",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30035903653",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "b113537c871464dd54259353adce3770d3e61b78d91ff8b4b5fad26597f20d33",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "126b536688f69649d94790eb9853aac18147bca0308b84f90f18ad8a2c68c232",
          "bytes": 1181254,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "d0a94e6069e563a867c67245365a05e694519c6d146f0af52eb287c069a7ff6e",
          "bytes": 3455100,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "26fb64d9b4f7d09c76145b74c89ddc5f7f97d7982f4e849395db7670e0e2752b",
          "bytes": 652008,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "3ddc8e0efec297be878ff4a0695736316be959bffefa40568d2206eb1af314b2",
          "bytes": 603074,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "4d1f6fa05bcc154698ad0ff0b70df31ae70276811d076354a826bd3244915abc",
          "bytes": 28538,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "707523e5a681200f77affa9ff2a736e48a420f07c5951ade7322e330dc06734c",
          "bytes": 15953,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "a5a932256cdb24d07bdb4f49c9345a9b5beb031e2b7d33990a2aa2582cae09ee",
          "bytes": 246587,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "dfa0e50992896c4c51db61faedd2073e270f32d38c14bc73828836a991405d49",
          "bytes": 148964,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "7335ec1938bc27964ac10c2984aa6304660d5046b4b0453012978caffc8bb8d7",
          "bytes": 15562,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "2bc632a59948b6fd5a5a927dc9b6e6f833351e8fd8dd7d944f4f32019c3e5b0c",
          "bytes": 7381,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "6d5f8805f35d0f8c68622a8ae4cd4971e8cb33c56951e69f0d9ce6dcacfbada5",
          "bytes": 1213171,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T18:56:27.000Z:6bdb51731ca0",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T18:56:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T18:48:47.000Z",
          "retrievedAt": "2026-07-23T18:57:33.838Z",
          "computedAt": "2026-07-23T18:56:27.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.73368756486347,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "6bdb51731ca055320b74220dda8dd3b9bc941d34c5363bbd62283e49f407c4bb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T18:56:27.000Z:08be70f51b59",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T18:56:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T18:22:38.000Z",
          "retrievedAt": "2026-07-23T18:48:27.000Z",
          "computedAt": "2026-07-23T18:56:27.000Z",
          "archivedAt": null,
          "value": 52,
          "rawValue": 52,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "08be70f51b595568fc9075f53845a757a2c9152cd115f643cea9b2eb414e567a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T18:56:27.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T18:56:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T18:48:27.000Z",
          "computedAt": "2026-07-23T18:56:27.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T18:56:27.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T18:56:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T18:48:27.000Z",
          "computedAt": "2026-07-23T18:56:27.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T18:56:27.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T18:56:27.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
          "retrievedAt": "2026-07-23T18:48:27.000Z",
          "computedAt": "2026-07-23T18:56:27.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T20:56:27+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T18:48:27.000Z",
            "lastAttemptAt": "2026-07-23T18:48:27.000Z",
            "lastSuccessAt": "2026-07-23T18:48:27.000Z",
            "computedAt": "2026-07-23T20:56:27+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T18:48:27.000Z",
            "lastAttemptAt": "2026-07-23T18:48:27.000Z",
            "lastSuccessAt": "2026-07-23T18:48:27.000Z",
            "computedAt": "2026-07-23T20:56:27+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
            "retrievedAt": "2026-07-23T18:48:27.000Z",
            "lastAttemptAt": "2026-07-23T18:48:27.000Z",
            "lastSuccessAt": "2026-07-23T18:48:27.000Z",
            "computedAt": "2026-07-23T20:56:27+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-24T04:19:07.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T18:22:38.000Z",
            "retrievedAt": "2026-07-23T18:48:27.000Z",
            "lastAttemptAt": "2026-07-23T18:48:27.000Z",
            "lastSuccessAt": "2026-07-23T18:48:27.000Z",
            "computedAt": "2026-07-23T20:56:27+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T00:22:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T18:48:47.000Z",
            "retrievedAt": "2026-07-23T18:57:33.838Z",
            "lastAttemptAt": "2026-07-23T18:57:33.838Z",
            "lastSuccessAt": "2026-07-23T18:57:33.838Z",
            "computedAt": "2026-07-23T20:56:27+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T00:48:47.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T20:56:27+02:00",
        "latest": [
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "af37df217fc56edbbe99dcda2f83b27d85554a38b437d11877f744b31f5ec4fa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "ba98d18fe2411c027adddf0699a983903e6f1ff6fe5fda59cab239cb0cd5bf30",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6a890acbe8714732deaba4143d90a706238c50dbe04d2ac6caf139112f606842",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "31060f082f7989c6c34fe71258b6fe52d9a5df0bb6baf906f2dff83eb3601d64",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "ff0fed89fd1f31bbaca471eff51779c9dbeec68a2203907ab6cbfc35eeeb62a0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "93e6074d2992e830e61d266b3194af390109ab0b300e959cd52d36d916c6baed",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "857454edd14b0320c0fb9850f246e2c65017b1befb0304373caa429855bc9db0",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "b326a0f2397c0bb030bd6e36f6ceb512d96723512d4608e06e420303d18e5027",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "2b090878a361714b937cfa47d6210b29905fde09a0c1cc78242550bb51c70c57",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "cbc83e46ba50c154ef9cc170e5c9c10d48746f97ca0ef60f1f136a920a7c4aa4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "688c0829ee8e68a12e18a913022be89fc5141d716ee100221e82233ef0e99bb2"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T212205+0200-9562f9235dd4-30037682214-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T19:23:12.586Z",
      "computedAt": "2026-07-23T21:22:05+02:00",
      "gitSha": "9562f9235dd447107234b681cc1c562e5866fb34",
      "previousFrameHash": "688c0829ee8e68a12e18a913022be89fc5141d716ee100221e82233ef0e99bb2",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30037682214",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "b113537c871464dd54259353adce3770d3e61b78d91ff8b4b5fad26597f20d33",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "c445b6c8d4554f37298ba6ec05ed7d9f1a1583ba71e19fd803107bf26f025576",
          "bytes": 1181254,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "d0a94e6069e563a867c67245365a05e694519c6d146f0af52eb287c069a7ff6e",
          "bytes": 3455100,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "67af69e325c03f9fd75ff4277b93da332fca74974e71997c34fc6d5c82cd014c",
          "bytes": 652008,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "efe3414ba8925a525f16cc931bb4047e8be4cb08dbb2903b5c317a22385bf619",
          "bytes": 603074,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "4d1f6fa05bcc154698ad0ff0b70df31ae70276811d076354a826bd3244915abc",
          "bytes": 28538,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "41a8aa4fe050ad78e3ec12da1c005d12f73e83d16460390368c07ea9f5dfb4c4",
          "bytes": 15953,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "5679cffb0f07b1db246ccb27848faa97fea792703d91b6b3a3d1cbb757ce9b96",
          "bytes": 246587,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "2c16153eeee6f497159d2935765d9a59b407de88115c004ce684bb3ffa578c88",
          "bytes": 148736,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "86347abdbf3296ea2c91613373fe3f1609b4a03c2eb84d21e3b3adcce4a778ce",
          "bytes": 15339,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "7f52716f8d83ab42d50939b634028b2d13afb85992977811e896cbd3abfda2e7",
          "bytes": 7381,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "031fddbae0886d986b3e2d0c766a95f1d35ac69e97404feed0ca7865d34b4313",
          "bytes": 1222449,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T19:22:05.000Z:8fd417861c6c",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T19:22:05.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T19:18:54.000Z",
          "retrievedAt": "2026-07-23T19:23:12.586Z",
          "computedAt": "2026-07-23T19:22:05.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.73368756486347,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "8fd417861c6ca253576b2659246ab962a49fc6d565f0909cc94e404b6bfe15e2",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T19:22:05.000Z:deba5b31a3b8",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T19:22:05.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T18:53:27.000Z",
          "retrievedAt": "2026-07-23T19:18:33.000Z",
          "computedAt": "2026-07-23T19:22:05.000Z",
          "archivedAt": null,
          "value": 53,
          "rawValue": 53,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "deba5b31a3b89128e7f66e50efc0b33799461ae8b39d11cee9a6d09e85973239",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "degraded",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T19:22:05.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T19:22:05.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T19:18:33.000Z",
          "computedAt": "2026-07-23T19:22:05.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T19:22:05.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T19:22:05.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T19:18:33.000Z",
          "computedAt": "2026-07-23T19:22:05.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T19:22:05.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T19:22:05.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
          "retrievedAt": "2026-07-23T19:18:33.000Z",
          "computedAt": "2026-07-23T19:22:05.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T21:22:05+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T19:18:33.000Z",
            "lastAttemptAt": "2026-07-23T19:18:33.000Z",
            "lastSuccessAt": "2026-07-23T19:18:33.000Z",
            "computedAt": "2026-07-23T21:22:05+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T19:18:33.000Z",
            "lastAttemptAt": "2026-07-23T19:18:33.000Z",
            "lastSuccessAt": "2026-07-23T19:18:33.000Z",
            "computedAt": "2026-07-23T21:22:05+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
            "retrievedAt": "2026-07-23T19:18:33.000Z",
            "lastAttemptAt": "2026-07-23T19:18:33.000Z",
            "lastSuccessAt": "2026-07-23T19:18:33.000Z",
            "computedAt": "2026-07-23T21:22:05+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-24T04:19:07.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T18:53:27.000Z",
            "retrievedAt": "2026-07-23T19:18:33.000Z",
            "lastAttemptAt": "2026-07-23T19:18:33.000Z",
            "lastSuccessAt": "2026-07-23T19:18:33.000Z",
            "computedAt": "2026-07-23T21:22:05+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T00:53:27.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "degraded",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T19:18:54.000Z",
            "retrievedAt": "2026-07-23T19:23:12.586Z",
            "lastAttemptAt": "2026-07-23T19:23:12.586Z",
            "lastSuccessAt": "2026-07-23T19:23:12.586Z",
            "computedAt": "2026-07-23T21:22:05+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T01:18:54.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T21:22:05+02:00",
        "latest": [
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "931c6992df4a3d395fade91533986795c3988529224b62f8bc8210d6949f4d7c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "ba98d18fe2411c027adddf0699a983903e6f1ff6fe5fda59cab239cb0cd5bf30",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6495f2cde4a49a9d8fa42937b1c5ae38399b9837fd249b8090d719a65ad28a99",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "7ab5cfbd5d97647d61d093fbec053d7dde2dc48f8a7fdce81c7ddae49470876b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "a15efb7fd0b6673526ee3e4d5b58be5b53b66087347c6c22903c9f032635a8cd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "cd34f7d413eb654776b6861dfb1db75e856eefdb7db958547efe51fa6d72eca4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "6f64094c2a284922489d7fd401ca790aff3fbd9c6bb8387b04af5158c371d54f",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "76d326872c9fc8612753ba68032197b6239847b56724ef544f5eca88b2784e75",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "590766e7784dae4403b209a8add0b8a4a55a711afa9c5b19d39dcc7d0ef05708",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "8024e4eceabbd9393d49cdfa949c8788ada4b6778fbaac8c267b019a3ed5d43d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "1335511ee0bbc767ab1de2a1479c9e29116109416ce306c2ed24e04e6cff8340"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T220011+0200-4f6f27019db1-30040294028-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T20:01:11.769Z",
      "computedAt": "2026-07-23T22:00:11+02:00",
      "gitSha": "4f6f27019db1a08c17f8d5435296cc020d47b57c",
      "previousFrameHash": "1335511ee0bbc767ab1de2a1479c9e29116109416ce306c2ed24e04e6cff8340",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30040294028",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "b113537c871464dd54259353adce3770d3e61b78d91ff8b4b5fad26597f20d33",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "524a30315a10c26463645833c2976158c193ae613362b80aeda340ddaee56a83",
          "bytes": 1181254,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "d0a94e6069e563a867c67245365a05e694519c6d146f0af52eb287c069a7ff6e",
          "bytes": 3455100,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "5b170867c2a7f7be89ec6df66c33dc4ea858252030695e81439d838eb6305391",
          "bytes": 652008,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "28222c2678cb498e1f860d3c4a13dc928ca82dc7d20ed290a1c4d974f97710c0",
          "bytes": 603074,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "4d1f6fa05bcc154698ad0ff0b70df31ae70276811d076354a826bd3244915abc",
          "bytes": 28538,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "a1153f7d774c167520691c883518976cc6ccd94df86fd53a937dbbcef49ca084",
          "bytes": 15953,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "f633eee287a56c7e71db952fceb0b3f7e3958f131a09124962589118bf537e2f",
          "bytes": 246587,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "58a54aeeb076e70b1521c67e723d19fa2cca33e92951839611f0de6e00dedd29",
          "bytes": 148964,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "ceb5945107725932de4bd6a8899161e057fdc1d7e0e41fd578a4a59d26497818",
          "bytes": 15563,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "ac5ad4561d804a549d2e0db676841dfda0a0db88a6d032820db17d1b56cbc451",
          "bytes": 7381,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "c53b54adb787cae3f057f4ad3edbd3b8cd975765ed9cf1a98231be8c267e770b",
          "bytes": 1231948,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T20:00:11.000Z:50e91eba5fcb",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T20:00:11.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T19:49:21.000Z",
          "retrievedAt": "2026-07-23T20:01:11.769Z",
          "computedAt": "2026-07-23T20:00:11.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.73368756486347,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "50e91eba5fcbd9b400baf4db3d3de8383a0891a4e87d7db2c964283d215e1d2d",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T20:00:11.000Z:08be70f51b59",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T20:00:11.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T19:24:41.000Z",
          "retrievedAt": "2026-07-23T19:48:57.000Z",
          "computedAt": "2026-07-23T20:00:11.000Z",
          "archivedAt": null,
          "value": 52,
          "rawValue": 52,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "08be70f51b595568fc9075f53845a757a2c9152cd115f643cea9b2eb414e567a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T20:00:11.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T20:00:11.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T19:48:57.000Z",
          "computedAt": "2026-07-23T20:00:11.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T20:00:11.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T20:00:11.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T19:48:57.000Z",
          "computedAt": "2026-07-23T20:00:11.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T20:00:11.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T20:00:11.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
          "retrievedAt": "2026-07-23T19:48:57.000Z",
          "computedAt": "2026-07-23T20:00:11.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T22:00:11+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T19:48:57.000Z",
            "lastAttemptAt": "2026-07-23T19:48:57.000Z",
            "lastSuccessAt": "2026-07-23T19:48:57.000Z",
            "computedAt": "2026-07-23T22:00:11+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T19:48:57.000Z",
            "lastAttemptAt": "2026-07-23T19:48:57.000Z",
            "lastSuccessAt": "2026-07-23T19:48:57.000Z",
            "computedAt": "2026-07-23T22:00:11+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T16:19:07.000Z",
            "retrievedAt": "2026-07-23T19:48:57.000Z",
            "lastAttemptAt": "2026-07-23T19:48:57.000Z",
            "lastSuccessAt": "2026-07-23T19:48:57.000Z",
            "computedAt": "2026-07-23T22:00:11+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-24T04:19:07.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T19:24:41.000Z",
            "retrievedAt": "2026-07-23T19:48:57.000Z",
            "lastAttemptAt": "2026-07-23T19:48:57.000Z",
            "lastSuccessAt": "2026-07-23T19:48:57.000Z",
            "computedAt": "2026-07-23T22:00:11+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T01:24:41.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T19:49:21.000Z",
            "retrievedAt": "2026-07-23T20:01:11.769Z",
            "lastAttemptAt": "2026-07-23T20:01:11.769Z",
            "lastSuccessAt": "2026-07-23T20:01:11.769Z",
            "computedAt": "2026-07-23T22:00:11+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T01:49:21.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T22:00:11+02:00",
        "latest": [
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "8ffe915c631e9e9005fde773ff10d67b25ef443dda69a3858acc91598eda7a42",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "ba98d18fe2411c027adddf0699a983903e6f1ff6fe5fda59cab239cb0cd5bf30",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "8a8bdc91a698e33b107ab22bf5780e435b3c3054418308c03b6dc7568bc0a36a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "87998223a0d0c4877a3641182ff88c2c41a8339479f2b8866aea50ffbac3bcb1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "e0a1f928d12af0d779b995396ae0bfcd6d088736321f0be7efc901d607b51793",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "470a98d383c55dffd7d4502abd5c85522e9ec79d9f4561349f106ee933f8aab8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "98276b39ff62e8a202f728962011e483178e1ffe87bb707d471d7ac0116fb700",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "e612d2c9ecc4117139ba33c3518e08726a69ec8ff30dab107f126b988117c0aa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "6874ee1fdb9ace8b27b606a3a38060516dc1fe791214699298ddc810233e0fd9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "0f00b094fc028180",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "title": "L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI",
            "url": "https://l0g.fr/posts/argentine-la-plus-grande-exposition-de-l-histoire-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : L'Argentine, moitié du guichet : anatomie de la plus grande exposition de l'histoire du FMI.",
            "objectId": "article:argentine-la-plus-grande-exposition-de-l-histoire-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "fce87287a5f4dfdf7f1db09597874bf910a33f3a58cd973f344dd83a8cb9f8a3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8c9639d1b0ac188e",
            "date": "2026-07-20T21:39:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "argentina-the-imf-largest-ever-exposure",
            "title": "Argentina, half the lending window: anatomy of the largest exposure in IMF history",
            "url": "https://l0g.fr/en/analysis/argentina-the-imf-largest-ever-exposure/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Argentina, half the lending window: anatomy of the largest exposure in IMF history.",
            "objectId": "article:en:argentina-the-imf-largest-ever-exposure",
            "previousVersion": null,
            "currentVersion": "2026-07-20T21:39:00.000Z",
            "previousHash": null,
            "currentHash": "3eba5ba37311738e718b79ed89cf3fb8fbae9a6abfc99cb15c33813e0b0de87a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "58febacc6a50829e485f3b3845a402baf948611ec3a981d71e053599012aef49"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260723T233230+0200-753ce17dac63-30046776283-1",
      "date": "2026-07-23",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T21:36:18.988Z",
      "computedAt": "2026-07-23T23:32:30+02:00",
      "gitSha": "753ce17dac63ba8762aa08f8c872165ecce5e41b",
      "previousFrameHash": "58febacc6a50829e485f3b3845a402baf948611ec3a981d71e053599012aef49",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30046776283",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "59ca4b736391a54c77911cc255992d0bf5eaeb68e472cf7a69d1d88f7d165ec2",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "3dff52be5e0747929607bf6140f6cb88422f59f6ddaabed84ae82d9beff7a30f",
          "bytes": 1191592,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "5890f045583dd9d3ec6c25753f5994471b019087080c2e9a2176400beca68a86",
          "bytes": 3473904,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "44ce361fa6681fcb2d574f3ca75e340ba94fead6fbb3c5f8a7d45bf6e43ce66a",
          "bytes": 662748,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "d2786c6201288bdf9ae92d50bb8bb9951d55f39afd494cbd25c75dd6ea82b32a",
          "bytes": 611668,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "51aaa810343a1e23b88ea095cf48abb7ebc11581b813a71e9299c30920484910",
          "bytes": 28711,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "74c59b2e6976a997604bec91bf867551e34133732afb4f1f4e38401c9b367188",
          "bytes": 15946,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "aa0cddfa7f9e846898efee29fed8006b987701fe2589026a7da5467c41f16716",
          "bytes": 248349,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "405dbc3f263bb8b571ff6db740625c597a1c8fe4a0da2aafc3168689816412aa",
          "bytes": 156101,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "f5c943167d3b3c5d377a2a9ebf22e09c71658a9166a908b258fc44cbf3e82fcb",
          "bytes": 15562,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "f829cdfa0fede1c9c397d91127e52ed0ef19a1535997780f2ca6c93249bb4dd9",
          "bytes": 7382,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "c51d3037d15c7875680d14dbc921bcf05a2446807f4c636860bc8d2de933bbca",
          "bytes": 1241729,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T21:35:37.000Z:3b3034bf7482",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T21:35:37.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T21:20:28.000Z",
          "retrievedAt": "2026-07-23T21:35:37.000Z",
          "computedAt": "2026-07-23T21:35:37.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 55,
          "scale": 100,
          "level": null,
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "3b3034bf7482827ed908fb18015149472fec236ba936c69be7ef384a3dd05e3a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-23 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T21:35:37.000Z:4f03f6cc902b",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T21:35:37.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T21:29:31.000Z",
          "retrievedAt": "2026-07-23T21:35:37.000Z",
          "computedAt": "2026-07-23T21:35:37.000Z",
          "archivedAt": null,
          "value": 52,
          "rawValue": 52,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4f03f6cc902b807c4fb5211097cab0d5cfc3c67f7353d3da20a60689411c8572",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-23 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T21:35:37.000Z:ccc314fe8d86",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T21:35:37.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T21:35:37.000Z",
          "computedAt": "2026-07-23T21:35:37.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": null,
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "ccc314fe8d868b439160b9c05050a0ac91e916f1a4a224633cb5d9b61d650944",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-23 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T21:35:37.000Z:53dbf0034608",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T21:35:37.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T21:35:37.000Z",
          "computedAt": "2026-07-23T21:35:37.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "53dbf0034608fa2573c5f60351cfd143ea49181aff686955e52194494e5e1421",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-23 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T21:35:37.000Z:9843debf1c13",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T21:35:37.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T21:18:07.000Z",
          "retrievedAt": "2026-07-23T21:35:37.000Z",
          "computedAt": "2026-07-23T21:35:37.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": null,
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": null,
          "methodologyVersionStatus": "unversioned-legacy",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/history.ndjson",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "9843debf1c13e6671b0c332f2e8c897b29108ea460e19206905b0cb7316cfe34",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "operational-archive",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Échantillon quotidien : dernier snapshot opérationnel disponible le 2026-07-23 UTC.",
            "Aucune interpolation ; le journal brut reste disponible dans /api/v1/history.ndjson.",
            "Point antérieur au registre méthodologique versionné lancé le 17 juillet 2026.",
            "Point issu du journal opérationnel append-only serveur, non attesté individuellement par la CI."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-23T23:32:30+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T21:35:37.000Z",
            "lastAttemptAt": "2026-07-23T21:35:37.000Z",
            "lastSuccessAt": "2026-07-23T21:35:37.000Z",
            "computedAt": "2026-07-23T23:32:30+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T21:35:37.000Z",
            "lastAttemptAt": "2026-07-23T21:35:37.000Z",
            "lastSuccessAt": "2026-07-23T21:35:37.000Z",
            "computedAt": "2026-07-23T23:32:30+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T21:18:07.000Z",
            "retrievedAt": "2026-07-23T21:35:37.000Z",
            "lastAttemptAt": "2026-07-23T21:35:37.000Z",
            "lastSuccessAt": "2026-07-23T21:35:37.000Z",
            "computedAt": "2026-07-23T23:32:30+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-24T09:18:07.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T21:29:31.000Z",
            "retrievedAt": "2026-07-23T21:35:37.000Z",
            "lastAttemptAt": "2026-07-23T21:35:37.000Z",
            "lastSuccessAt": "2026-07-23T21:35:37.000Z",
            "computedAt": "2026-07-23T23:32:30+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T03:29:31.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T21:35:57.000Z",
            "retrievedAt": "2026-07-23T21:36:18.988Z",
            "lastAttemptAt": "2026-07-23T21:36:18.988Z",
            "lastSuccessAt": "2026-07-23T21:36:18.988Z",
            "computedAt": "2026-07-23T23:32:30+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T03:35:57.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-23T23:32:30+02:00",
        "latest": [
          {
            "id": "284afbad6312deb0",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "intelligence-bradee-open-source-chinois-capex-ia",
            "title": "Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA",
            "url": "https://l0g.fr/posts/intelligence-bradee-open-source-chinois-capex-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA.",
            "objectId": "article:intelligence-bradee-open-source-chinois-capex-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "8ce79e410e288d1dac35dc8ead3926a5be78e920e409761577a2d5294109a79d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9e151f2825ae341c",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-open-source-ai-strategy-vs-capex-bubble",
            "title": "Intelligence on the cheap: China's open-source AI strategy against the capex bubble",
            "url": "https://l0g.fr/en/analysis/china-open-source-ai-strategy-vs-capex-bubble/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence on the cheap: China's open-source AI strategy against the capex bubble.",
            "objectId": "article:en:china-open-source-ai-strategy-vs-capex-bubble",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "c26eb437db1ddd592b1fdeaa67ffd6153d4d49fdf7a22243dfaacfcc43d81d11",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "cf84d60dd52b7dd9aedb474d1fc10cdd2c540777d01f63a5fbbf90d29c5bbd82",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "ba98d18fe2411c027adddf0699a983903e6f1ff6fe5fda59cab239cb0cd5bf30",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "70d661453d1e6bb6da430cd088c4f1edba20fd2204176f72fb1d447017cd38b3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "1327ca611062f7ef956609474bb20b74dad9e1bac541855c65edf0605f631ba0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "3bc3ab46c62120868925768b12c5de37448ead1329b9bb828561a48db05fabdf",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "73450313b9810b45ad54f4664d82693fb0a24b36948be38d9096b0183429852d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "23cfbe5782f4f68bfa9e8959f4f8af343f0137112878cff8d70d376acbca89a9",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "1e81ffdb0e0e51b5ae9087504fe1a33165e882072bdb9bb83f54e14357604d56",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "acf7b432ba74799f1a474fc9c521e54736f6d5d34163bf358f66dc576e104528",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "ea1b2344407be7118c59d99722320d43b4bf5f2c1ee81e5b469f036637f19e95"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260724T005356+0200-4848f4716998-30051467221-1",
      "date": "2026-07-24",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-23T22:54:59.239Z",
      "computedAt": "2026-07-24T00:53:56+02:00",
      "gitSha": "4848f4716998451e0ef8c20a55b513ea78bbafa0",
      "previousFrameHash": "ea1b2344407be7118c59d99722320d43b4bf5f2c1ee81e5b469f036637f19e95",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30051467221",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "59ca4b736391a54c77911cc255992d0bf5eaeb68e472cf7a69d1d88f7d165ec2",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "536bed06fd27c1387102be0d57c51f9d21e323bc91ddc91ade8e0e78e752fdfb",
          "bytes": 1191592,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "5890f045583dd9d3ec6c25753f5994471b019087080c2e9a2176400beca68a86",
          "bytes": 3473904,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "bafbfb2405ef7d3ab1b2ea6724b973dac3d04e4aff38249825ff295ef5beabbd",
          "bytes": 662748,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "12528a5e054cfdbdc1149f62bec1a7b2b2bb11daf4096379837a5a4652a985fe",
          "bytes": 611668,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "51aaa810343a1e23b88ea095cf48abb7ebc11581b813a71e9299c30920484910",
          "bytes": 28711,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "229c998d919fb610c4638ca85704c68a29f6583225d305751376ba2654d8d22e",
          "bytes": 15946,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "29798814d09c95600da39376b48b80eca31b71cbb510d209ddf47b6bfd29bf23",
          "bytes": 248349,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "9769cdc1b513c69aecb255da947a6d85a723c822069d63b92620a51d6b6cca67",
          "bytes": 156179,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "f1e2b129fb94b44bb95399f709ad0d7f5e43bb0cc557f78a022e3031a880ff96",
          "bytes": 15563,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "94405b48c3e739dc532ddf3e3027121e603538f82a43fff12d40930ef5fd8595",
          "bytes": 7382,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "ca70f1394f4446c1a40bcde6769efba0a684342c8a394ef327723d05c7c009fa",
          "bytes": 1251135,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-23T22:53:56.000Z:c916b40468c7",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-23T22:53:56.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T22:51:46.000Z",
          "retrievedAt": "2026-07-23T22:54:59.239Z",
          "computedAt": "2026-07-23T22:53:56.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.9026805604492,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "c916b40468c75bd612c55ea2c564ebec3e729e695614a2c704aac5c94c87c00c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-23T22:53:56.000Z:08be70f51b59",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-23T22:53:56.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T22:31:45.000Z",
          "retrievedAt": "2026-07-23T22:51:27.000Z",
          "computedAt": "2026-07-23T22:53:56.000Z",
          "archivedAt": null,
          "value": 52,
          "rawValue": 52,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "08be70f51b595568fc9075f53845a757a2c9152cd115f643cea9b2eb414e567a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-23T22:53:56.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-23T22:53:56.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
          "retrievedAt": "2026-07-23T22:51:27.000Z",
          "computedAt": "2026-07-23T22:53:56.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-23T22:53:56.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-23T22:53:56.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
          "retrievedAt": "2026-07-23T22:51:27.000Z",
          "computedAt": "2026-07-23T22:53:56.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-23T22:53:56.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-23T22:53:56.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-23T21:18:07.000Z",
          "retrievedAt": "2026-07-23T22:51:27.000Z",
          "computedAt": "2026-07-23T22:53:56.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-24T00:53:56+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T04:02:00.000Z",
            "retrievedAt": "2026-07-23T22:51:27.000Z",
            "lastAttemptAt": "2026-07-23T22:51:27.000Z",
            "lastSuccessAt": "2026-07-23T22:51:27.000Z",
            "computedAt": "2026-07-24T00:53:56+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T16:02:00.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T05:36:37.000Z",
            "retrievedAt": "2026-07-23T22:51:27.000Z",
            "lastAttemptAt": "2026-07-23T22:51:27.000Z",
            "lastSuccessAt": "2026-07-23T22:51:27.000Z",
            "computedAt": "2026-07-24T00:53:56+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-24T17:36:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T21:18:07.000Z",
            "retrievedAt": "2026-07-23T22:51:27.000Z",
            "lastAttemptAt": "2026-07-23T22:51:27.000Z",
            "lastSuccessAt": "2026-07-23T22:51:27.000Z",
            "computedAt": "2026-07-24T00:53:56+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-24T09:18:07.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T22:31:45.000Z",
            "retrievedAt": "2026-07-23T22:51:27.000Z",
            "lastAttemptAt": "2026-07-23T22:51:27.000Z",
            "lastSuccessAt": "2026-07-23T22:51:27.000Z",
            "computedAt": "2026-07-24T00:53:56+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T04:31:45.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (3 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-23T22:51:46.000Z",
            "retrievedAt": "2026-07-23T22:54:59.239Z",
            "lastAttemptAt": "2026-07-23T22:54:59.239Z",
            "lastSuccessAt": "2026-07-23T22:54:59.239Z",
            "computedAt": "2026-07-24T00:53:56+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T04:51:46.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-24T00:53:56+02:00",
        "latest": [
          {
            "id": "284afbad6312deb0",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "intelligence-bradee-open-source-chinois-capex-ia",
            "title": "Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA",
            "url": "https://l0g.fr/posts/intelligence-bradee-open-source-chinois-capex-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA.",
            "objectId": "article:intelligence-bradee-open-source-chinois-capex-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "2a7a6b57cdd9717242d2138bdacb484e330270f2c205c14c1f719ae978e1e54e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9e151f2825ae341c",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-open-source-ai-strategy-vs-capex-bubble",
            "title": "Intelligence on the cheap: China's open-source AI strategy against the capex bubble",
            "url": "https://l0g.fr/en/analysis/china-open-source-ai-strategy-vs-capex-bubble/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence on the cheap: China's open-source AI strategy against the capex bubble.",
            "objectId": "article:en:china-open-source-ai-strategy-vs-capex-bubble",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "c26eb437db1ddd592b1fdeaa67ffd6153d4d49fdf7a22243dfaacfcc43d81d11",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "98bb410f70188b131d3a3ca4371245f50dbaecb867099f7d86176094d5951aaf",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "ba98d18fe2411c027adddf0699a983903e6f1ff6fe5fda59cab239cb0cd5bf30",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "cd469def6b5d11da011b323757280baccc9d92aaf4833f142321c8f8e76c609d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "f9759dbd2980c16c229d39d4af40a26b778a19fe5c0cac9e2278fb834ce252f7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "cd907db226e48917a049c6bf1e4e8b0ac622c66351d4db4aabcc42933013c211",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "a40cc06065ba3d689722a6f44cda1cace5c8401fbbdad8ed5274405b675e13f0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "14f5ca3248b5f8bbc2d1afb415495b4789ecf5997b5aff27f6ccd9d4740f586f",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "7915144f7b5b49264e1250ca403dc4d9503da8017b0a09a52f4c7d74feba6dbc",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "188ad8b004d76b43c4457727e6a383c961c75a89859203342e97f08aa05147d4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "4154898ee2351228f20ce2b1ee15b360e606a39795da0dd83ab83038926a75a9"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260724T095113+0200-820d2e12c98e-30076877976-1",
      "date": "2026-07-24",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-24T07:52:26.827Z",
      "computedAt": "2026-07-24T09:51:13+02:00",
      "gitSha": "820d2e12c98e68e0c3791d154fa2298f99c764e4",
      "previousFrameHash": "4154898ee2351228f20ce2b1ee15b360e606a39795da0dd83ab83038926a75a9",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30076877976",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "59ca4b736391a54c77911cc255992d0bf5eaeb68e472cf7a69d1d88f7d165ec2",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "088e5388c321a97ab9ee8c847e58970e7c2b8b46fc53a6e5cbfd7ef71020d7bb",
          "bytes": 1191592,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "5890f045583dd9d3ec6c25753f5994471b019087080c2e9a2176400beca68a86",
          "bytes": 3473904,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "60cd9c94f6793778961948305c24bbe46e66232cc6901ccd25c3d95565f3b987",
          "bytes": 662748,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "c1058d575a7713339f26aea726cf7eb2ac862406a3a22983a800ec5ce07bcf99",
          "bytes": 611668,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "51aaa810343a1e23b88ea095cf48abb7ebc11581b813a71e9299c30920484910",
          "bytes": 28711,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "181153b85062a4499c27951d71bbbc8532410c9ffc23cbdedeb910a60f1aee10",
          "bytes": 15946,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "e4564e0ce7112881b935f4d1490b910f23a4725eb300dab72af2bde036cd9301",
          "bytes": 248349,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "3f108c46df8d6fc445c7e1088749febcdee0400fbe3ef23908467a0f3d4215ac",
          "bytes": 136167,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "67dd1b56d9321f767e9a516b79d17d31182ed7c0221c2491cb816a8991f48953",
          "bytes": 15557,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "a347636e14d875ee3b804f5d73c00a893aeb744dad1f808f73fd1fa0fba4b956",
          "bytes": 7376,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "3dc494aa10fa95d5d91deb044d9a6d2bcd76e31e5011e672ac7c10ed5ca25254",
          "bytes": 1269482,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-24T07:51:13.000Z:f2b9af32b8e8",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-24T07:51:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T07:51:36.000Z",
          "retrievedAt": "2026-07-24T07:52:26.827Z",
          "computedAt": "2026-07-24T07:51:13.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.98590869670658,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "f2b9af32b8e861cd9c4fd0219c1a7bd1b67490bfac1d8fa63e1bc9439ff0bd47",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-24T07:51:13.000Z:08be70f51b59",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-24T07:51:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T07:22:09.000Z",
          "retrievedAt": "2026-07-24T07:42:28.000Z",
          "computedAt": "2026-07-24T07:51:13.000Z",
          "archivedAt": null,
          "value": 52,
          "rawValue": 52,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "08be70f51b595568fc9075f53845a757a2c9152cd115f643cea9b2eb414e567a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-24T07:51:13.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-24T07:51:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T05:45:23.000Z",
          "retrievedAt": "2026-07-24T07:42:28.000Z",
          "computedAt": "2026-07-24T07:51:13.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-24T07:51:13.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-24T07:51:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T04:01:57.000Z",
          "retrievedAt": "2026-07-24T07:42:28.000Z",
          "computedAt": "2026-07-24T07:51:13.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-24T07:51:13.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-24T07:51:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T04:15:58.000Z",
          "retrievedAt": "2026-07-24T07:42:28.000Z",
          "computedAt": "2026-07-24T07:51:13.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-24T09:51:13+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T04:01:57.000Z",
            "retrievedAt": "2026-07-24T07:42:28.000Z",
            "lastAttemptAt": "2026-07-24T07:42:28.000Z",
            "lastSuccessAt": "2026-07-24T07:42:28.000Z",
            "computedAt": "2026-07-24T09:51:13+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-25T16:01:57.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T05:45:23.000Z",
            "retrievedAt": "2026-07-24T07:42:28.000Z",
            "lastAttemptAt": "2026-07-24T07:42:28.000Z",
            "lastSuccessAt": "2026-07-24T07:42:28.000Z",
            "computedAt": "2026-07-24T09:51:13+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-25T17:45:23.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T04:15:58.000Z",
            "retrievedAt": "2026-07-24T07:42:28.000Z",
            "lastAttemptAt": "2026-07-24T07:42:28.000Z",
            "lastSuccessAt": "2026-07-24T07:42:28.000Z",
            "computedAt": "2026-07-24T09:51:13+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-24T16:15:58.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T07:22:09.000Z",
            "retrievedAt": "2026-07-24T07:42:28.000Z",
            "lastAttemptAt": "2026-07-24T07:42:28.000Z",
            "lastSuccessAt": "2026-07-24T07:42:28.000Z",
            "computedAt": "2026-07-24T09:51:13+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T13:22:09.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (4 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (4 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T07:51:36.000Z",
            "retrievedAt": "2026-07-24T07:52:26.827Z",
            "lastAttemptAt": "2026-07-24T07:52:26.827Z",
            "lastSuccessAt": "2026-07-24T07:52:26.827Z",
            "computedAt": "2026-07-24T09:51:13+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T13:51:36.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-24T09:51:13+02:00",
        "latest": [
          {
            "id": "284afbad6312deb0",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "intelligence-bradee-open-source-chinois-capex-ia",
            "title": "Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA",
            "url": "https://l0g.fr/posts/intelligence-bradee-open-source-chinois-capex-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA.",
            "objectId": "article:intelligence-bradee-open-source-chinois-capex-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "2759440a7abb52670f99c181f6978b178775d405047666c7f9f96990930d6780",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9e151f2825ae341c",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-open-source-ai-strategy-vs-capex-bubble",
            "title": "Intelligence on the cheap: China's open-source AI strategy against the capex bubble",
            "url": "https://l0g.fr/en/analysis/china-open-source-ai-strategy-vs-capex-bubble/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence on the cheap: China's open-source AI strategy against the capex bubble.",
            "objectId": "article:en:china-open-source-ai-strategy-vs-capex-bubble",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "c26eb437db1ddd592b1fdeaa67ffd6153d4d49fdf7a22243dfaacfcc43d81d11",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "0eaf52a7ccee73dd1da6f576c802039b5c2013f0f32c777487488abc95a125a4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "ba98d18fe2411c027adddf0699a983903e6f1ff6fe5fda59cab239cb0cd5bf30",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "b72e0a3bbb28dfeef74d80482ea60fceca088590f79ee0a6190bc0672c4d8e6d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "afb734bb42f6c4287462b12921bd4773e077fbf46a6b702b4d351e4733f455bf",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "6b1325c972b1b039a3ade7a3339ae4c6a03ffe62752d412ce836f9b4b07cf7d7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "13fd5420812a2f951a2afa71dd87deae7612fd73ffc6395ef0a00472fa09e3ca",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "5cfc1b2ea90babb57f07bb05e7d4b2d0f380155ea1bde809bb6ac898e27eca09",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "19d9d49e1b62a432aafa35e696d7e295976226b0f0f89c692e2c32cdadb4048a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "5500fee92cdd3c68f08b6909464eb9eba1a25dc8229ca0ce9175590637b1307d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "d4f41c6fea9dcf4b7875029aedd6aa589df5d51e94b7e438a41ace5dcb3e484f"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260724T111923+0200-e2bb847fd3d8-30082158852-1",
      "date": "2026-07-24",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-24T09:20:31.263Z",
      "computedAt": "2026-07-24T11:19:23+02:00",
      "gitSha": "e2bb847fd3d88ffd17cec084d9f8ae57765aac13",
      "previousFrameHash": "d4f41c6fea9dcf4b7875029aedd6aa589df5d51e94b7e438a41ace5dcb3e484f",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30082158852",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "59ca4b736391a54c77911cc255992d0bf5eaeb68e472cf7a69d1d88f7d165ec2",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "8605a39adbd4ee6a1bd9c2f516dc8fd5594de1186b80bd99734828ee45a93553",
          "bytes": 1191592,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "5890f045583dd9d3ec6c25753f5994471b019087080c2e9a2176400beca68a86",
          "bytes": 3473904,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "c74df29e23070012111ae84257a993afde62b9dafe1bc45140bfb2d0531a34d9",
          "bytes": 662748,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "a8aa42b0dc7d82ef56912333ff0b0aef5fd2976609e49f60bcee3b2818fa3852",
          "bytes": 611668,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "51aaa810343a1e23b88ea095cf48abb7ebc11581b813a71e9299c30920484910",
          "bytes": 28711,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "ab209098e392668a04b705f63fab61742d3b4ed9faba28477601f6cba1dc1502",
          "bytes": 15946,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "6b9c6189dfa3d1ed3e4b76fdbdd940d3f6b7ab6b187f1994b112d2b09ee44d8f",
          "bytes": 248349,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "5c00202e34f818681a0968cf73a8def5e408b409b2d0d17346e9d533861b938a",
          "bytes": 135275,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "f3651d74e68c488bf11896a3672e62a1d51db358397faa39f253306cc4d07293",
          "bytes": 15559,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "b1f588dea6675af1a010765668abaaaa23dfe26d375c165273b13fa0f56e12da",
          "bytes": 7377,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "c4a11dee544042fb8a11240a5ee37eaba1b3d18fd30f2cb2e1693fc7577f5ad3",
          "bytes": 1278916,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-24T09:19:23.000Z:6473cc588374",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-24T09:19:23.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T09:13:56.000Z",
          "retrievedAt": "2026-07-24T09:20:31.263Z",
          "computedAt": "2026-07-24T09:19:23.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.98590869670658,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "6473cc5883741e8c7f28dff2b33defe1ddf89eeefb8b3fd9cab0e14c4076fb6f",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-24T09:19:23.000Z:08be70f51b59",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-24T09:19:23.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T08:56:05.000Z",
          "retrievedAt": "2026-07-24T09:13:37.000Z",
          "computedAt": "2026-07-24T09:19:23.000Z",
          "archivedAt": null,
          "value": 52,
          "rawValue": 52,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "08be70f51b595568fc9075f53845a757a2c9152cd115f643cea9b2eb414e567a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-24T09:19:23.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-24T09:19:23.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T05:45:23.000Z",
          "retrievedAt": "2026-07-24T09:13:37.000Z",
          "computedAt": "2026-07-24T09:19:23.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-24T09:19:23.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-24T09:19:23.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T04:01:57.000Z",
          "retrievedAt": "2026-07-24T09:13:37.000Z",
          "computedAt": "2026-07-24T09:19:23.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-24T09:19:23.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-24T09:19:23.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T04:15:58.000Z",
          "retrievedAt": "2026-07-24T09:13:37.000Z",
          "computedAt": "2026-07-24T09:19:23.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-24T11:19:23+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T04:01:57.000Z",
            "retrievedAt": "2026-07-24T09:13:37.000Z",
            "lastAttemptAt": "2026-07-24T09:13:37.000Z",
            "lastSuccessAt": "2026-07-24T09:13:37.000Z",
            "computedAt": "2026-07-24T11:19:23+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-25T16:01:57.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T05:45:23.000Z",
            "retrievedAt": "2026-07-24T09:13:37.000Z",
            "lastAttemptAt": "2026-07-24T09:13:37.000Z",
            "lastSuccessAt": "2026-07-24T09:13:37.000Z",
            "computedAt": "2026-07-24T11:19:23+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-25T17:45:23.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T04:15:58.000Z",
            "retrievedAt": "2026-07-24T09:13:37.000Z",
            "lastAttemptAt": "2026-07-24T09:13:37.000Z",
            "lastSuccessAt": "2026-07-24T09:13:37.000Z",
            "computedAt": "2026-07-24T11:19:23+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-24T16:15:58.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T08:56:05.000Z",
            "retrievedAt": "2026-07-24T09:13:37.000Z",
            "lastAttemptAt": "2026-07-24T09:13:37.000Z",
            "lastSuccessAt": "2026-07-24T09:13:37.000Z",
            "computedAt": "2026-07-24T11:19:23+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T14:56:05.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (4 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (4 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T09:13:56.000Z",
            "retrievedAt": "2026-07-24T09:20:31.263Z",
            "lastAttemptAt": "2026-07-24T09:20:31.263Z",
            "lastSuccessAt": "2026-07-24T09:20:31.263Z",
            "computedAt": "2026-07-24T11:19:23+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T15:13:56.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-24T11:19:23+02:00",
        "latest": [
          {
            "id": "284afbad6312deb0",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "intelligence-bradee-open-source-chinois-capex-ia",
            "title": "Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA",
            "url": "https://l0g.fr/posts/intelligence-bradee-open-source-chinois-capex-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA.",
            "objectId": "article:intelligence-bradee-open-source-chinois-capex-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "f90724d3abbe13155ab4396deb5d56d522c58f8ac869d0e2f686407cb74bdd35",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9e151f2825ae341c",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-open-source-ai-strategy-vs-capex-bubble",
            "title": "Intelligence on the cheap: China's open-source AI strategy against the capex bubble",
            "url": "https://l0g.fr/en/analysis/china-open-source-ai-strategy-vs-capex-bubble/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence on the cheap: China's open-source AI strategy against the capex bubble.",
            "objectId": "article:en:china-open-source-ai-strategy-vs-capex-bubble",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "c26eb437db1ddd592b1fdeaa67ffd6153d4d49fdf7a22243dfaacfcc43d81d11",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "d950df81dc5c9c6162991d01091b7626af4e66cb6e39f286ba29f1fe0e373dc0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "ba98d18fe2411c027adddf0699a983903e6f1ff6fe5fda59cab239cb0cd5bf30",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "aeaef4a0806660c71dc81084c6c4cd147b1330ab4c7228024da3b8c9bcf1c77c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "1d99faa43c2db33759fe874fe9467c3f3e909d4033c2f9b4b163e0edf7411a32",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "91746d2c6137ad5b1be69a4d22708bd0b754aa42c7c8ef1331e0f48ff7ebea9f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "07f58a3fe7d5bd07791e55ef5bc757ececdd9a720ddb9142a8a985214eb874ea",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "d91d8531d222c20db9a34de9ace264ba802d005cb77704a6118141bbabb96f58",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "5d4bf5121fe4e8d1c4a2936ac59aab176252217b8e1ef8cf4f9d4d34ef3405a8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "014d6d0b5ab899ca5c27abec16bd8490d568e0f146d94f3da9421ff6b1f99991",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "31029ded8955b595a1436e58beaa77491c9b3da072154deec0cd7a6e210700da"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260724T113607+0200-acece0977bea-30083183065-1",
      "date": "2026-07-24",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-24T09:37:32.087Z",
      "computedAt": "2026-07-24T11:36:07+02:00",
      "gitSha": "acece0977beabb77f64698ff54636fe29a42c63f",
      "previousFrameHash": "31029ded8955b595a1436e58beaa77491c9b3da072154deec0cd7a6e210700da",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30083183065",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "59ca4b736391a54c77911cc255992d0bf5eaeb68e472cf7a69d1d88f7d165ec2",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "85794c0540642e053b7a5f5eb92c63b06a7bc533e85b046024ea41a1bc76746d",
          "bytes": 1191592,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "5890f045583dd9d3ec6c25753f5994471b019087080c2e9a2176400beca68a86",
          "bytes": 3473904,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "76a487ee04d610083c547b0bd1261fe64280291450561509bc5a6557c9bc1258",
          "bytes": 662748,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "13f48af261f50d15cd0afad34bfcffbae3dfd467407f782c6d20f4759c39c75d",
          "bytes": 611668,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "51aaa810343a1e23b88ea095cf48abb7ebc11581b813a71e9299c30920484910",
          "bytes": 28711,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "47b760a49eacc22c23127ec53d7a6e51c802d273355861fb7315740237ebae84",
          "bytes": 15946,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "bea6022b830dcf906f1ae5073065be6d236154f938495880f9dbc68d65f5cd25",
          "bytes": 248349,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "520bb42628f2e0de93fb5af066ffb5f5aac7f44eebed5f71295b86b5d8932baf",
          "bytes": 135278,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "defc0edb70e964fcf83a89c9a60dc75c0cdf9b5fbaafc1535bfecf80fb5516fc",
          "bytes": 15558,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "07aaf541bf29e0965e8f3e9be49ab259c0ba9781778ef691a802494e1c899cd5",
          "bytes": 7377,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "e2822ee9cc206b0708498946d4ef254ee97b00769886156e0f2e4719e423e06c",
          "bytes": 1288339,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-24T09:36:07.000Z:92d5a783f099",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-24T09:36:07.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T09:29:19.000Z",
          "retrievedAt": "2026-07-24T09:37:32.087Z",
          "computedAt": "2026-07-24T09:36:07.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.98590869670658,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "92d5a783f0998f8ca16a365f91f3b357fb41c4c4904ca29779a118b01270c209",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-24T09:36:07.000Z:5dc02543d20a",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-24T09:36:07.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T09:26:26.000Z",
          "retrievedAt": "2026-07-24T09:28:57.000Z",
          "computedAt": "2026-07-24T09:36:07.000Z",
          "archivedAt": null,
          "value": 49,
          "rawValue": 49,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5dc02543d20ad586226b82d82459bde6637243d64dc4159a671e5093dbcdec54",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-24T09:36:07.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-24T09:36:07.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T05:45:23.000Z",
          "retrievedAt": "2026-07-24T09:28:57.000Z",
          "computedAt": "2026-07-24T09:36:07.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-24T09:36:07.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-24T09:36:07.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T04:01:57.000Z",
          "retrievedAt": "2026-07-24T09:28:57.000Z",
          "computedAt": "2026-07-24T09:36:07.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-24T09:36:07.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-24T09:36:07.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T04:15:58.000Z",
          "retrievedAt": "2026-07-24T09:28:57.000Z",
          "computedAt": "2026-07-24T09:36:07.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-24T11:36:07+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T04:01:57.000Z",
            "retrievedAt": "2026-07-24T09:28:57.000Z",
            "lastAttemptAt": "2026-07-24T09:28:57.000Z",
            "lastSuccessAt": "2026-07-24T09:28:57.000Z",
            "computedAt": "2026-07-24T11:36:07+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-25T16:01:57.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T05:45:23.000Z",
            "retrievedAt": "2026-07-24T09:28:57.000Z",
            "lastAttemptAt": "2026-07-24T09:28:57.000Z",
            "lastSuccessAt": "2026-07-24T09:28:57.000Z",
            "computedAt": "2026-07-24T11:36:07+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-25T17:45:23.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T04:15:58.000Z",
            "retrievedAt": "2026-07-24T09:28:57.000Z",
            "lastAttemptAt": "2026-07-24T09:28:57.000Z",
            "lastSuccessAt": "2026-07-24T09:28:57.000Z",
            "computedAt": "2026-07-24T11:36:07+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-24T16:15:58.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T09:26:26.000Z",
            "retrievedAt": "2026-07-24T09:28:57.000Z",
            "lastAttemptAt": "2026-07-24T09:28:57.000Z",
            "lastSuccessAt": "2026-07-24T09:28:57.000Z",
            "computedAt": "2026-07-24T11:36:07+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T15:26:26.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (4 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (4 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T09:29:19.000Z",
            "retrievedAt": "2026-07-24T09:37:32.087Z",
            "lastAttemptAt": "2026-07-24T09:37:32.087Z",
            "lastSuccessAt": "2026-07-24T09:37:32.087Z",
            "computedAt": "2026-07-24T11:36:07+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T15:29:19.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-24T11:36:07+02:00",
        "latest": [
          {
            "id": "284afbad6312deb0",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "intelligence-bradee-open-source-chinois-capex-ia",
            "title": "Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA",
            "url": "https://l0g.fr/posts/intelligence-bradee-open-source-chinois-capex-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA.",
            "objectId": "article:intelligence-bradee-open-source-chinois-capex-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "b94faeff9b4e4659c66c343868935f79274a56a75392fb273f58c51cb6164557",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9e151f2825ae341c",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-open-source-ai-strategy-vs-capex-bubble",
            "title": "Intelligence on the cheap: China's open-source AI strategy against the capex bubble",
            "url": "https://l0g.fr/en/analysis/china-open-source-ai-strategy-vs-capex-bubble/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence on the cheap: China's open-source AI strategy against the capex bubble.",
            "objectId": "article:en:china-open-source-ai-strategy-vs-capex-bubble",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "c26eb437db1ddd592b1fdeaa67ffd6153d4d49fdf7a22243dfaacfcc43d81d11",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "3ca6c6b250f3ce236b63101d606699b1cd8e52cd9982d2d0d449000deb2888cf",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "ba98d18fe2411c027adddf0699a983903e6f1ff6fe5fda59cab239cb0cd5bf30",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "f103a4601a7f8ef3e4040fb680560a57093d83ee5d817696dd8f60c1d5fe69c6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "ac85db86654efba86a02db843e6921c1c87f064698e067dba4787a03884e0193",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "04826a51a5068ebfb1520a3f39df4ea89915e03af288612c7a7a3ffd6753082c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "69514357bd46e01cd3a58164c285bfb661cebd8b984657729e5279245cbf9fbe",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "efcccdc75aad11fd45ae04f8442452c7db11ab71b54069b3aa748a3ee743f987",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "723fe85efa52ae158347f0004a0d505d07d7b10b4230f1ec484405e7b40247fa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "ae8bb694ae66900d3c8f950bd0615d6a6bf8a97bfd6c5c94d2f51abd76e01b62",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "b3fdfa3d127bdfc31a8796e6c44aa045e947274f27a874ccc3c65d0a34007b81",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "b5dd52347a006a1117468648233c894aa575c681473ca0077a5e1913a560adcf",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "398382285cd7d889d5cabe11f9bb683411a1465754b81e4c22979b5912e2f59b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "e0e03523022ceefeaad1e6cb4f5e6c76bf78ece5560b21e27e93d727dca602be",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "b4a3939f0ec03c18c00591f4ea1b1f988f5b2b1c7969c02bb7f295ae8b5e666a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "ec40c7a53304de1c52a6d21f965b70a3a9cadfe00c6680d316308d39a355872c"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260724T122643+0200-2e6b79698f81-30086189688-1",
      "date": "2026-07-24",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-24T10:27:47.508Z",
      "computedAt": "2026-07-24T12:26:43+02:00",
      "gitSha": "2e6b79698f81caeef6884a3406b42d85862e8ee8",
      "previousFrameHash": "ec40c7a53304de1c52a6d21f965b70a3a9cadfe00c6680d316308d39a355872c",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30086189688",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "59ca4b736391a54c77911cc255992d0bf5eaeb68e472cf7a69d1d88f7d165ec2",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "6a45a6bac7cd025fa2609a6cea205f05f0659be69f7185515b6a9a95a49dab16",
          "bytes": 1191592,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "5890f045583dd9d3ec6c25753f5994471b019087080c2e9a2176400beca68a86",
          "bytes": 3473904,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "c20cf3195825327cae5b2ba53b211e8709d414528e85124116b07c16d5ea993b",
          "bytes": 662748,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "c3e86b5cf9f478c880748cb97e13fa7229084392e9e81d8d2a0f8e4cc8ae785b",
          "bytes": 611668,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "51aaa810343a1e23b88ea095cf48abb7ebc11581b813a71e9299c30920484910",
          "bytes": 28711,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "46ef68319c9271d005f0a57a3c84e8bfa292bfbd62489a1ac29123197d76146e",
          "bytes": 15946,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "5879957542a23ecaba51260f1560e6dc75a25d08fb758843ce9024e273428d66",
          "bytes": 248349,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "5dca0d4b81e2e958941f7a8776de0aa56cb53dc674d1a18fa3cda8d6f20118ff",
          "bytes": 135273,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "1ceb46aaacd9fdb9d8d35cd13943de4cf5ea8ad059df9761fdf28674eaa11488",
          "bytes": 15557,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "fa347784c7e39f85c6e8f0a348f1d095904932234f5d55c74ed3f8d11bc1e66c",
          "bytes": 7376,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "576e5332c09690e1e4fe814a8a8c91c2d357cf62e659b2e67a72dd05a7144059",
          "bytes": 1297762,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-24T10:26:43.000Z:bd0465326aed",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-24T10:26:43.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T10:26:29.000Z",
          "retrievedAt": "2026-07-24T10:27:47.508Z",
          "computedAt": "2026-07-24T10:26:43.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.98590869670658,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "bd0465326aedca3d538434706b34fed4e77b82feeb61d238a4f76bf183d46acc",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-24T10:26:43.000Z:5dc02543d20a",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-24T10:26:43.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T09:57:44.000Z",
          "retrievedAt": "2026-07-24T10:14:07.000Z",
          "computedAt": "2026-07-24T10:26:43.000Z",
          "archivedAt": null,
          "value": 49,
          "rawValue": 49,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5dc02543d20ad586226b82d82459bde6637243d64dc4159a671e5093dbcdec54",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-24T10:26:43.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-24T10:26:43.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T05:45:23.000Z",
          "retrievedAt": "2026-07-24T10:14:07.000Z",
          "computedAt": "2026-07-24T10:26:43.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-24T10:26:43.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-24T10:26:43.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T04:01:57.000Z",
          "retrievedAt": "2026-07-24T10:14:07.000Z",
          "computedAt": "2026-07-24T10:26:43.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-24T10:26:43.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-24T10:26:43.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T04:15:58.000Z",
          "retrievedAt": "2026-07-24T10:14:07.000Z",
          "computedAt": "2026-07-24T10:26:43.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-24T12:26:43+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T04:01:57.000Z",
            "retrievedAt": "2026-07-24T10:14:07.000Z",
            "lastAttemptAt": "2026-07-24T10:14:07.000Z",
            "lastSuccessAt": "2026-07-24T10:14:07.000Z",
            "computedAt": "2026-07-24T12:26:43+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-25T16:01:57.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T05:45:23.000Z",
            "retrievedAt": "2026-07-24T10:14:07.000Z",
            "lastAttemptAt": "2026-07-24T10:14:07.000Z",
            "lastSuccessAt": "2026-07-24T10:14:07.000Z",
            "computedAt": "2026-07-24T12:26:43+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-25T17:45:23.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T04:15:58.000Z",
            "retrievedAt": "2026-07-24T10:14:07.000Z",
            "lastAttemptAt": "2026-07-24T10:14:07.000Z",
            "lastSuccessAt": "2026-07-24T10:14:07.000Z",
            "computedAt": "2026-07-24T12:26:43+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-24T16:15:58.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T09:57:44.000Z",
            "retrievedAt": "2026-07-24T10:14:07.000Z",
            "lastAttemptAt": "2026-07-24T10:14:07.000Z",
            "lastSuccessAt": "2026-07-24T10:14:07.000Z",
            "computedAt": "2026-07-24T12:26:43+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T15:57:44.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (4 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (4 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T10:26:29.000Z",
            "retrievedAt": "2026-07-24T10:27:47.508Z",
            "lastAttemptAt": "2026-07-24T10:27:47.508Z",
            "lastSuccessAt": "2026-07-24T10:27:47.508Z",
            "computedAt": "2026-07-24T12:26:43+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T16:26:29.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-24T12:26:43+02:00",
        "latest": [
          {
            "id": "284afbad6312deb0",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "intelligence-bradee-open-source-chinois-capex-ia",
            "title": "Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA",
            "url": "https://l0g.fr/posts/intelligence-bradee-open-source-chinois-capex-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA.",
            "objectId": "article:intelligence-bradee-open-source-chinois-capex-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "cc69bef28e961aeeecd98130b9283bd40ceaf1693e6ea72a7e82d1ceb32a7208",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9e151f2825ae341c",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-open-source-ai-strategy-vs-capex-bubble",
            "title": "Intelligence on the cheap: China's open-source AI strategy against the capex bubble",
            "url": "https://l0g.fr/en/analysis/china-open-source-ai-strategy-vs-capex-bubble/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence on the cheap: China's open-source AI strategy against the capex bubble.",
            "objectId": "article:en:china-open-source-ai-strategy-vs-capex-bubble",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "e14db54e2660b81a2633b9c93b07236c53fc609de98a79fb754625f4a1d77d70",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "4d234e64957606c39cf29586cc3f4f3eed0ee347db8e2a982277b61898a6dc53",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "b21c72f85401f695ec107f1920cd322d354583d7460305cdd0d7f2f17acde932",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "4ba65082d264db6eca403af8e8ac2ed346812b2300773ba13fad2eb34efd4dbd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "2440f94246daa83be902ac4d06ede2f8327506795759e267794fa7f0a29a81f9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "d5814db5f4d06f730f0a7c4ea916ef2ef985d5d27b5a4600bcbdd48685790422",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "1ec3411c7b331bb2b20838f7ea580d57d4bc7739cbef21b44fd044ab954de515",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "49869ddb8373168c6c808faf3e14388a0319efa733f9666ff1f7c0b7f465e866",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "3a9bdbb314c2f1950485e1e216a4253e28abd59fa4a166d1350e6022e41b14e4",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "c64b84bfa62982a81b7e982ddcdcb84e5285f206d86a60935f56c4cf9e3c5989",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "db7b93dbe2a74f45ec6597d356fd918d36712666edd97f60c73b15bf361be9df",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "dd52197df3be5a04889eee868fd7a6f26f215124e3845b157123356fc7bedf59",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "ccf714a5590755d9",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-concedes-ethics-august-countdown",
            "title": "CLARITY Act: Trump concedes on ethics, the August countdown begins",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-concedes-ethics-august-countdown/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act: Trump concedes on ethics, the August countdown begins.",
            "objectId": "article:en:clarity-act-trump-concedes-ethics-august-countdown",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "9e6bee01b8a76ca8111392d173b44195fd9dce527972debef61c74b25fba9c72",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "ffefe4a8797acd25",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "title": "CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence",
            "url": "https://l0g.fr/posts/clarity-act-trump-cede-ethique-compte-a-rebours-aout/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act : Trump cède sur l'éthique, le compte à rebours d'août commence.",
            "objectId": "article:clarity-act-trump-cede-ethique-compte-a-rebours-aout",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "34593b4f38a462a831a668dcdcee06c3931f364f209d4418e32ec3bbb47ff65a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "8b6411ca47bdf13d",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "title": "Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget",
            "url": "https://l0g.fr/posts/japon-dominance-fiscale-choc-honebuto-boj-cernee/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dominance fiscale grandeur nature : quand le Japon subordonne sa banque centrale à son budget.",
            "objectId": "article:japon-dominance-fiscale-choc-honebuto-boj-cernee",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "7f8d6ddd95afd0770870c317444b345671c8b924725eb9691786bb8f7a26c726",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "add277d18d8a47fd",
            "date": "2026-07-21T13:05:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "title": "Fiscal dominance made real: Japan subordinates its central bank to its budget",
            "url": "https://l0g.fr/en/analysis/japan-fiscal-dominance-honebuto-shock-boj-cornered/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Fiscal dominance made real: Japan subordinates its central bank to its budget.",
            "objectId": "article:en:japan-fiscal-dominance-honebuto-shock-boj-cornered",
            "previousVersion": null,
            "currentVersion": "2026-07-21T13:05:00.000Z",
            "previousHash": null,
            "currentHash": "43aed08689d7f7872c01f73c9acb67d08c19d4d1cd0c861b9428bcd658c27ca5",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "92ae8227a1baa819fa4185ab5254c7420ec29a5c9370591a19409023d236e3ed"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260724T171237+0200-2a74d37a9b91-30104318312-1",
      "date": "2026-07-24",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-24T15:13:57.428Z",
      "computedAt": "2026-07-24T17:12:37+02:00",
      "gitSha": "2a74d37a9b91cd1ee6f4e4b7b1ceb89a0c0c2de3",
      "previousFrameHash": "92ae8227a1baa819fa4185ab5254c7420ec29a5c9370591a19409023d236e3ed",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30104318312",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "0faef8d192dbc820f6268d4f05a06bb9c34fd938861dc0036e681dc99d1cd7df",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "6f27da3bd9b5f4577e4a6eafb92c93509b2cfdc5dfa7b96a4415b45d84fc6cbc",
          "bytes": 1218989,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "7635b9bbf33a7f3c01f5ab24fd14d170dbb765b64899ff75c09e0cda7da9b020",
          "bytes": 3505290,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "ca62c22a52f741fa93a6c4cf509c26bf0072884ce5e0474d322abb7495e891e9",
          "bytes": 670829,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "e80ed47a8b52323a8ac7860131221f8c06ec990b59421f3bf314e2adf184be1f",
          "bytes": 619565,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "35acbd1a596735cdebd098276efa258a80e105edcfab11ea19308a0c78e882d8",
          "bytes": 28788,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "83b5757458c5f477d65c67bfcfcb6c762d8ff4734c2c0ac0e766a76ca3767a08",
          "bytes": 15899,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "85213f535c77cc04b27e37ea0629ea3d24a38e1e9931f0c6cfae30e686a26df5",
          "bytes": 252086,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "76a82224861261be92343be703ff43305122c1c40f3069d72b3e31440b774c3e",
          "bytes": 140888,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "412a91de4ad8dfe0a34f2b6531b8dcc5670fa89e08cc4edd18431746f0943328",
          "bytes": 15562,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "39689612df025b9d4296705c9fd30fbb9bb2307568c1a104ba33530b830680b0",
          "bytes": 7380,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "2b99b0a5adad41612ae22c00e7ce455f042032460949faa38a46d2a48cc89bf3",
          "bytes": 1307185,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-24T15:12:37.000Z:707c0f452b45",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-24T15:12:37.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T15:02:35.000Z",
          "retrievedAt": "2026-07-24T15:13:57.428Z",
          "computedAt": "2026-07-24T15:12:37.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 55.12762197827367,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "707c0f452b45dd1c9d8eb2c3aec366c896d877ad29c5d19593f14b392005de77",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-24T15:12:37.000Z:75bae066d8e3",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-24T15:12:37.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T14:39:33.000Z",
          "retrievedAt": "2026-07-24T15:01:37.000Z",
          "computedAt": "2026-07-24T15:12:37.000Z",
          "archivedAt": null,
          "value": 48,
          "rawValue": 48,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "75bae066d8e3ad7005821cf7caae132fdf4739a0923ec76040ee077297df16cb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-24T15:12:37.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-24T15:12:37.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T05:45:23.000Z",
          "retrievedAt": "2026-07-24T15:01:37.000Z",
          "computedAt": "2026-07-24T15:12:37.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-24T15:12:37.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-24T15:12:37.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T04:01:57.000Z",
          "retrievedAt": "2026-07-24T15:01:37.000Z",
          "computedAt": "2026-07-24T15:12:37.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-24T15:12:37.000Z:7bef2bfb6395",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-24T15:12:37.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-24T10:15:29.000Z",
          "retrievedAt": "2026-07-24T15:01:37.000Z",
          "computedAt": "2026-07-24T15:12:37.000Z",
          "archivedAt": null,
          "value": 39,
          "rawValue": 39,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "7bef2bfb63951a18fc33de26f4253718351d27fe907f5a52561756d1a168efeb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-24T17:12:37+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T04:01:57.000Z",
            "retrievedAt": "2026-07-24T15:01:37.000Z",
            "lastAttemptAt": "2026-07-24T15:01:37.000Z",
            "lastSuccessAt": "2026-07-24T15:01:37.000Z",
            "computedAt": "2026-07-24T17:12:37+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-25T16:01:57.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T05:45:23.000Z",
            "retrievedAt": "2026-07-24T15:01:37.000Z",
            "lastAttemptAt": "2026-07-24T15:01:37.000Z",
            "lastSuccessAt": "2026-07-24T15:01:37.000Z",
            "computedAt": "2026-07-24T17:12:37+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-25T17:45:23.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T10:15:29.000Z",
            "retrievedAt": "2026-07-24T15:01:37.000Z",
            "lastAttemptAt": "2026-07-24T15:01:37.000Z",
            "lastSuccessAt": "2026-07-24T15:01:37.000Z",
            "computedAt": "2026-07-24T17:12:37+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-24T22:15:29.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T14:39:33.000Z",
            "retrievedAt": "2026-07-24T15:01:37.000Z",
            "lastAttemptAt": "2026-07-24T15:01:37.000Z",
            "lastSuccessAt": "2026-07-24T15:01:37.000Z",
            "computedAt": "2026-07-24T17:12:37+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T20:39:33.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (4 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (4 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-24T15:02:35.000Z",
            "retrievedAt": "2026-07-24T15:13:57.428Z",
            "lastAttemptAt": "2026-07-24T15:13:57.428Z",
            "lastSuccessAt": "2026-07-24T15:13:57.428Z",
            "computedAt": "2026-07-24T17:12:37+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-24T21:02:35.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-24T17:12:37+02:00",
        "latest": [
          {
            "id": "38a2b10cbe5bd291",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "914bf236bb0ad9e6",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "754bd0dcbdf12224",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "f22e8bf72ddb600b5c0707e3e687e244b0a55b9c1e3c66e71c425eff613cc25c",
            "replaces": {
              "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "fbc13676581dbdc3",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "2e05fff9c3b541c1f9428f595a85b2e7552abc983bd153499f75b2bd19537563",
            "replaces": {
              "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "284afbad6312deb0",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "intelligence-bradee-open-source-chinois-capex-ia",
            "title": "Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA",
            "url": "https://l0g.fr/posts/intelligence-bradee-open-source-chinois-capex-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA.",
            "objectId": "article:intelligence-bradee-open-source-chinois-capex-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "2b99843d29f9b098f8b387b7b2e97716ee1a2ffef9d11304418e23465a260f7d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9e151f2825ae341c",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-open-source-ai-strategy-vs-capex-bubble",
            "title": "Intelligence on the cheap: China's open-source AI strategy against the capex bubble",
            "url": "https://l0g.fr/en/analysis/china-open-source-ai-strategy-vs-capex-bubble/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence on the cheap: China's open-source AI strategy against the capex bubble.",
            "objectId": "article:en:china-open-source-ai-strategy-vs-capex-bubble",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "e14db54e2660b81a2633b9c93b07236c53fc609de98a79fb754625f4a1d77d70",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "28471fbd78f75dfbd84d35a37d1407dc331db17a7616b2bb23e910b8c76011d7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "b21c72f85401f695ec107f1920cd322d354583d7460305cdd0d7f2f17acde932",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "e314943975ff8ed72e606ecfe20604c2323e7bc0e8d91cb3382e05cc6bf551e0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "2440f94246daa83be902ac4d06ede2f8327506795759e267794fa7f0a29a81f9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "7d0720fdfed296c14c403f19704a4ab80070c367a131373e6f4266d054960f2b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "5f1f061c72811e08dfd988a3ed08bda8fb54487a8fa941f9108339c6c36a3575",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "49869ddb8373168c6c808faf3e14388a0319efa733f9666ff1f7c0b7f465e866",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "c925849d5cf264c177f82375a00a172a979dc6f1ac84e9cec853d8a4c7c60d3b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "c64b84bfa62982a81b7e982ddcdcb84e5285f206d86a60935f56c4cf9e3c5989",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "db7b93dbe2a74f45ec6597d356fd918d36712666edd97f60c73b15bf361be9df",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3317a81d9a7a10ba",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-trump-conflict-of-interest",
            "title": "CLARITY Act: Trump, the first obstacle to his own crypto law",
            "url": "https://l0g.fr/en/analysis/clarity-act-trump-conflict-of-interest/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act: Trump, the first obstacle to his own crypto law.",
            "objectId": "article:en:clarity-act-trump-conflict-of-interest",
            "previousVersion": "2026-07-14T07:50:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "53f86d7a79c2f1b34e49abd2779b33933940466207ec46237931378af4b72d66",
            "replaces": {
              "objectId": "article:en:clarity-act-trump-conflict-of-interest",
              "version": "2026-07-14T07:50:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "8583c9405c864ca0",
            "date": "2026-07-21T13:51:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-trump-obstacle-conflit-interets",
            "title": "CLARITY Act : Trump, premier obstacle à sa propre loi crypto",
            "url": "https://l0g.fr/posts/clarity-act-trump-obstacle-conflit-interets/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : CLARITY Act : Trump, premier obstacle à sa propre loi crypto.",
            "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
            "previousVersion": "2026-06-22T09:00:00.000Z",
            "currentVersion": "2026-07-21T13:51:00.000Z",
            "previousHash": null,
            "currentHash": "011f664499cc755ebe4b07be47829be2ca568f3f6b89e26498eaff7f8cf9c272",
            "replaces": {
              "objectId": "article:clarity-act-trump-obstacle-conflit-interets",
              "version": "2026-06-22T09:00:00.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "36e2aa3512d1dc1dff9084e2c78e64533ce6da8e6cecd0362f65b7ba9e2c9534"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260725T105232+0200-4c6a29265ba3-30151876278-1",
      "date": "2026-07-25",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-25T08:53:50.369Z",
      "computedAt": "2026-07-25T10:52:32+02:00",
      "gitSha": "4c6a29265ba37c5f57cafab0f93762a34139dd06",
      "previousFrameHash": "36e2aa3512d1dc1dff9084e2c78e64533ce6da8e6cecd0362f65b7ba9e2c9534",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30151876278",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "35f9572bd3eea1d5cb154776d3eca64a8aa5b410e62f40198f844a564d195889",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "ce8369e8ebf93acb62793b9d8605146b13ad4a5cf0ab27835b89023e8d534dce",
          "bytes": 1235751,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "a58a3172a080ec2d3c9f4ea432cc20168c30ad2fc7f278c98343d817f5c71c45",
          "bytes": 3534205,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "2b5b56a4d6a74ffbfc7e52a5c62469632ee6d94c75787add69947275124543d4",
          "bytes": 678609,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "725f37212589571de679dacba19e713c063adceb84f0a230293a89041ef6b8fb",
          "bytes": 626869,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "e9abd2a25461947fd1c45f7b49834306a4e8210a077abc3be6ed5a6a0aa25e40",
          "bytes": 29035,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "4ffb9818b4cfaa802af27c72b3c51f8106800273d4982fa31c8d670caaae07e1",
          "bytes": 15765,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "a3c3c308cc4bbda7c2c94b73105912eb1355db9507e966bf52aa6e8156988f39",
          "bytes": 253698,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "c637982d867b23d6feb3ce290573f176c56ff307eb51a3d6280867a962632115",
          "bytes": 138465,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "d7f2bf148f319c95fff807da4cfb462fb567f018afbdb6b0156ed4b3c6e6e0b4",
          "bytes": 15565,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "acba46a9e9a5ed7e1ded79249cd638cb0f410f8c880d3ea7de27005fd52f7d3e",
          "bytes": 7383,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "22f57b8fd23e7ffad053a54a3e6638b01b5d5ea04a12ea8240595c8ffaaa04a7",
          "bytes": 1325529,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-25T08:52:32.000Z:3cb791041fc9",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-25T08:52:32.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T08:44:21.000Z",
          "retrievedAt": "2026-07-25T08:53:50.369Z",
          "computedAt": "2026-07-25T08:52:32.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 55.1445928238884,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "3cb791041fc9b90130f3277be29434f310ec3bf108c66b27bd8f140e02f00a69",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-25T08:52:32.000Z:75bae066d8e3",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-25T08:52:32.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T08:12:58.000Z",
          "retrievedAt": "2026-07-25T08:44:02.000Z",
          "computedAt": "2026-07-25T08:52:32.000Z",
          "archivedAt": null,
          "value": 48,
          "rawValue": 48,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "75bae066d8e3ad7005821cf7caae132fdf4739a0923ec76040ee077297df16cb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-25T08:52:32.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-25T08:52:32.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
          "retrievedAt": "2026-07-25T08:44:02.000Z",
          "computedAt": "2026-07-25T08:52:32.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-25T08:52:32.000Z:b34aa02bd2c3",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-25T08:52:32.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T04:01:52.000Z",
          "retrievedAt": "2026-07-25T08:44:02.000Z",
          "computedAt": "2026-07-25T08:52:32.000Z",
          "archivedAt": null,
          "value": 40,
          "rawValue": 40,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "b34aa02bd2c335172c476d08f0afd5cffa3154c914d268315dee89aa906c039f",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-25T08:52:32.000Z:4c0670695a84",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-25T08:52:32.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T04:18:37.000Z",
          "retrievedAt": "2026-07-25T08:44:02.000Z",
          "computedAt": "2026-07-25T08:52:32.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4c0670695a8419a1d355ed761de1b3dbd1ee85bd5f5710cf9fa54e8cd182c625",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-25T10:52:32+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T04:01:52.000Z",
            "retrievedAt": "2026-07-25T08:44:02.000Z",
            "lastAttemptAt": "2026-07-25T08:44:02.000Z",
            "lastSuccessAt": "2026-07-25T08:44:02.000Z",
            "computedAt": "2026-07-25T10:52:32+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-26T16:01:52.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
            "retrievedAt": "2026-07-25T08:44:02.000Z",
            "lastAttemptAt": "2026-07-25T08:44:02.000Z",
            "lastSuccessAt": "2026-07-25T08:44:02.000Z",
            "computedAt": "2026-07-25T10:52:32+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-26T17:38:19.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T04:18:37.000Z",
            "retrievedAt": "2026-07-25T08:44:02.000Z",
            "lastAttemptAt": "2026-07-25T08:44:02.000Z",
            "lastSuccessAt": "2026-07-25T08:44:02.000Z",
            "computedAt": "2026-07-25T10:52:32+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-25T16:18:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T08:12:58.000Z",
            "retrievedAt": "2026-07-25T08:44:02.000Z",
            "lastAttemptAt": "2026-07-25T08:44:02.000Z",
            "lastSuccessAt": "2026-07-25T08:44:02.000Z",
            "computedAt": "2026-07-25T10:52:32+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-25T14:12:58.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (5 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (5 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T08:44:21.000Z",
            "retrievedAt": "2026-07-25T08:53:50.369Z",
            "lastAttemptAt": "2026-07-25T08:53:50.369Z",
            "lastSuccessAt": "2026-07-25T08:53:50.369Z",
            "computedAt": "2026-07-25T10:52:32+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-25T14:44:21.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-25T10:52:32+02:00",
        "latest": [
          {
            "id": "1b37ee6136ba6531",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "kilowatt-fantome-reseau-data-center",
            "title": "Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?",
            "url": "https://l0g.fr/posts/kilowatt-fantome-reseau-data-center/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?.",
            "objectId": "article:kilowatt-fantome-reseau-data-center",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "9c62cc0fafcf04c927769028c5d79b694402c1f2496f38600dc20e3a171edd5f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3a3272492216e91a",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-ghost-kilowatt",
            "title": "The ghost kilowatt: who pays for the grid if the data center never arrives?",
            "url": "https://l0g.fr/en/analysis/the-ghost-kilowatt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ghost kilowatt: who pays for the grid if the data center never arrives?.",
            "objectId": "article:en:the-ghost-kilowatt",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "f45ac80e13d0552df4c3a0bf10e02deef6a69c646d2b36741995704791ce4dfa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "38a2b10cbe5bd291",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "914bf236bb0ad9e6",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "754bd0dcbdf12224",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "f22e8bf72ddb600b5c0707e3e687e244b0a55b9c1e3c66e71c425eff613cc25c",
            "replaces": {
              "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "fbc13676581dbdc3",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "a525db572b0ceefe96afb88a5cbdb5780c7d9d59227024e0fcae93c42d6ecdf8",
            "replaces": {
              "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "284afbad6312deb0",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "intelligence-bradee-open-source-chinois-capex-ia",
            "title": "Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA",
            "url": "https://l0g.fr/posts/intelligence-bradee-open-source-chinois-capex-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA.",
            "objectId": "article:intelligence-bradee-open-source-chinois-capex-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "1c57dd7e12f2006c5d827de8eed3e4d584dd7876c435a1e44db53e9de95cf869",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9e151f2825ae341c",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-open-source-ai-strategy-vs-capex-bubble",
            "title": "Intelligence on the cheap: China's open-source AI strategy against the capex bubble",
            "url": "https://l0g.fr/en/analysis/china-open-source-ai-strategy-vs-capex-bubble/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence on the cheap: China's open-source AI strategy against the capex bubble.",
            "objectId": "article:en:china-open-source-ai-strategy-vs-capex-bubble",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "e14db54e2660b81a2633b9c93b07236c53fc609de98a79fb754625f4a1d77d70",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "f2f2085ccaa98a50f00a56128f0d4b127ca674d74afe74f6de01f72c6cbcb762",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "b21c72f85401f695ec107f1920cd322d354583d7460305cdd0d7f2f17acde932",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "b6396bec95206b2049e6d45bf48b028a6592292e1f52ed459f15c63af2f9e610",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "2440f94246daa83be902ac4d06ede2f8327506795759e267794fa7f0a29a81f9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "637643c990897a577a201ac49f745129136c5940cb130c96cf19605250dd4c1c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "4d9480831038956a3e2eeba330864bee30ff4cd0254b10dc124809decf624c35",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "49869ddb8373168c6c808faf3e14388a0319efa733f9666ff1f7c0b7f465e866",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "4fd3ae2cf1dad6140b765227efe66accc688bdc1110bf9c4095b8fb22cb83301",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "c64b84bfa62982a81b7e982ddcdcb84e5285f206d86a60935f56c4cf9e3c5989",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "db7b93dbe2a74f45ec6597d356fd918d36712666edd97f60c73b15bf361be9df",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "2922d3a0d1b6833e39d4cdf80f2b54b99eaa8d9d47f4c45518f0eda2174ddc62"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260725T121013+0200-95061ef43833-30154010699-1",
      "date": "2026-07-25",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-25T10:11:29.504Z",
      "computedAt": "2026-07-25T12:10:13+02:00",
      "gitSha": "95061ef43833d7a0fb3109bfa0e93bbb5f2521e1",
      "previousFrameHash": "2922d3a0d1b6833e39d4cdf80f2b54b99eaa8d9d47f4c45518f0eda2174ddc62",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30154010699",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "35f9572bd3eea1d5cb154776d3eca64a8aa5b410e62f40198f844a564d195889",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "5825e32d1ea5c3ef62dbd5db6ca2029d4969b6dd341b77a8ab89a0a500f811b9",
          "bytes": 1235751,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "a58a3172a080ec2d3c9f4ea432cc20168c30ad2fc7f278c98343d817f5c71c45",
          "bytes": 3534205,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "ef36c29bf432c9af00bf78ed90750888b1dea995fb7d8d06d7c9d95d062aef05",
          "bytes": 678609,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "0c7b7cd1275b2b1d60de4a2683698b50f7f356da8948e6baa32f7e2434b37909",
          "bytes": 626869,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "e9abd2a25461947fd1c45f7b49834306a4e8210a077abc3be6ed5a6a0aa25e40",
          "bytes": 29035,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "04c087f47c60cb0015d3479d6224a9d1ce27e0007c47392e9870649c03d8f693",
          "bytes": 15765,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "d269ec589f118f2cc65dc6dc18511cb015292d86b54b5c296146b20d833fd1ff",
          "bytes": 253698,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "3d14993911af90a620ec348cd6b37d92a4e1839bc52d68ad3bd0eafadeb75fac",
          "bytes": 138465,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "1dbdbf63a59442452f7d8960344d2b2d20d7caa8283d22e02eba1a4e90dadc44",
          "bytes": 15564,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "8f7b11d8d371c55466167119622e16db8a19ac8816da9344eaa805c4fdc82f1f",
          "bytes": 7383,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "01cb4452067612616a11725f5ed6fd7143016f43ba8bbde0f06e3b7415e3684c",
          "bytes": 1334951,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-25T10:10:13.000Z:d0a711080c8d",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-25T10:10:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T09:59:38.000Z",
          "retrievedAt": "2026-07-25T10:11:29.504Z",
          "computedAt": "2026-07-25T10:10:13.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 55.1445928238884,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "d0a711080c8daf400bdabc9eebb104dd60c8cc8fed4264ccc19f9b1724146472",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-25T10:10:13.000Z:75bae066d8e3",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-25T10:10:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T09:47:37.000Z",
          "retrievedAt": "2026-07-25T09:59:17.000Z",
          "computedAt": "2026-07-25T10:10:13.000Z",
          "archivedAt": null,
          "value": 48,
          "rawValue": 48,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "75bae066d8e3ad7005821cf7caae132fdf4739a0923ec76040ee077297df16cb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-25T10:10:13.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-25T10:10:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
          "retrievedAt": "2026-07-25T09:59:17.000Z",
          "computedAt": "2026-07-25T10:10:13.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-25T10:10:13.000Z:b34aa02bd2c3",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-25T10:10:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T04:01:52.000Z",
          "retrievedAt": "2026-07-25T09:59:17.000Z",
          "computedAt": "2026-07-25T10:10:13.000Z",
          "archivedAt": null,
          "value": 40,
          "rawValue": 40,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "b34aa02bd2c335172c476d08f0afd5cffa3154c914d268315dee89aa906c039f",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-25T10:10:13.000Z:4c0670695a84",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-25T10:10:13.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T04:18:37.000Z",
          "retrievedAt": "2026-07-25T09:59:17.000Z",
          "computedAt": "2026-07-25T10:10:13.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4c0670695a8419a1d355ed761de1b3dbd1ee85bd5f5710cf9fa54e8cd182c625",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-25T12:10:13+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T04:01:52.000Z",
            "retrievedAt": "2026-07-25T09:59:17.000Z",
            "lastAttemptAt": "2026-07-25T09:59:17.000Z",
            "lastSuccessAt": "2026-07-25T09:59:17.000Z",
            "computedAt": "2026-07-25T12:10:13+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-26T16:01:52.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
            "retrievedAt": "2026-07-25T09:59:17.000Z",
            "lastAttemptAt": "2026-07-25T09:59:17.000Z",
            "lastSuccessAt": "2026-07-25T09:59:17.000Z",
            "computedAt": "2026-07-25T12:10:13+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-26T17:38:19.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T04:18:37.000Z",
            "retrievedAt": "2026-07-25T09:59:17.000Z",
            "lastAttemptAt": "2026-07-25T09:59:17.000Z",
            "lastSuccessAt": "2026-07-25T09:59:17.000Z",
            "computedAt": "2026-07-25T12:10:13+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-25T16:18:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T09:47:37.000Z",
            "retrievedAt": "2026-07-25T09:59:17.000Z",
            "lastAttemptAt": "2026-07-25T09:59:17.000Z",
            "lastSuccessAt": "2026-07-25T09:59:17.000Z",
            "computedAt": "2026-07-25T12:10:13+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-25T15:47:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (5 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (5 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T09:59:38.000Z",
            "retrievedAt": "2026-07-25T10:11:29.504Z",
            "lastAttemptAt": "2026-07-25T10:11:29.504Z",
            "lastSuccessAt": "2026-07-25T10:11:29.504Z",
            "computedAt": "2026-07-25T12:10:13+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-25T15:59:38.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-25T12:10:13+02:00",
        "latest": [
          {
            "id": "1b37ee6136ba6531",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "kilowatt-fantome-reseau-data-center",
            "title": "Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?",
            "url": "https://l0g.fr/posts/kilowatt-fantome-reseau-data-center/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?.",
            "objectId": "article:kilowatt-fantome-reseau-data-center",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "891287af4a59b5a2567ed20784b860bd2641949feb39decd9f7cb493c07fed0f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3a3272492216e91a",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-ghost-kilowatt",
            "title": "The ghost kilowatt: who pays for the grid if the data center never arrives?",
            "url": "https://l0g.fr/en/analysis/the-ghost-kilowatt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ghost kilowatt: who pays for the grid if the data center never arrives?.",
            "objectId": "article:en:the-ghost-kilowatt",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "f45ac80e13d0552df4c3a0bf10e02deef6a69c646d2b36741995704791ce4dfa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "38a2b10cbe5bd291",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "914bf236bb0ad9e6",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "754bd0dcbdf12224",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "f22e8bf72ddb600b5c0707e3e687e244b0a55b9c1e3c66e71c425eff613cc25c",
            "replaces": {
              "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "fbc13676581dbdc3",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "11e97bf5850f45216a4cd76837bd94e44e264434fd3d01c0efb0895d1a56beb1",
            "replaces": {
              "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "284afbad6312deb0",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "intelligence-bradee-open-source-chinois-capex-ia",
            "title": "Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA",
            "url": "https://l0g.fr/posts/intelligence-bradee-open-source-chinois-capex-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA.",
            "objectId": "article:intelligence-bradee-open-source-chinois-capex-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "c7eaae81ab33a247f166be37474a5ca275a9b92336ff9c52a831805b3d6726cf",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9e151f2825ae341c",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-open-source-ai-strategy-vs-capex-bubble",
            "title": "Intelligence on the cheap: China's open-source AI strategy against the capex bubble",
            "url": "https://l0g.fr/en/analysis/china-open-source-ai-strategy-vs-capex-bubble/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence on the cheap: China's open-source AI strategy against the capex bubble.",
            "objectId": "article:en:china-open-source-ai-strategy-vs-capex-bubble",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "e14db54e2660b81a2633b9c93b07236c53fc609de98a79fb754625f4a1d77d70",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "6be576f26da90f39bc162dcfad35c951466f718df06a178ad199ab1754c2c09c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "b21c72f85401f695ec107f1920cd322d354583d7460305cdd0d7f2f17acde932",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "3ee8c0ace42458a39a26b24cdabdbb13c85f5c3b9c7f60b1f85c73a027055993",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "2440f94246daa83be902ac4d06ede2f8327506795759e267794fa7f0a29a81f9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "c5e9a3d962feebd3ea7591baa3fb935d9b8458ecae99445bdf871a60c46688a1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "51a6322b8c91cc872fb288b744e8580fc9400b6fedd93bec22b418c192811365",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "49869ddb8373168c6c808faf3e14388a0319efa733f9666ff1f7c0b7f465e866",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "5914bb303842f1cbd68104aa4b4c5673d55a358dd4e5b4c5e10181acea557e6b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "c64b84bfa62982a81b7e982ddcdcb84e5285f206d86a60935f56c4cf9e3c5989",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "db7b93dbe2a74f45ec6597d356fd918d36712666edd97f60c73b15bf361be9df",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "507e0a929afaaa3680998a45c64704d4378c28b00847b661288cc9fc71c44215"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260725T123943+0200-91c1d7437626-30154864720-1",
      "date": "2026-07-25",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-25T10:40:57.921Z",
      "computedAt": "2026-07-25T12:39:43+02:00",
      "gitSha": "91c1d74376260ce2c13fc735253157b16764efd4",
      "previousFrameHash": "507e0a929afaaa3680998a45c64704d4378c28b00847b661288cc9fc71c44215",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30154864720",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "35f9572bd3eea1d5cb154776d3eca64a8aa5b410e62f40198f844a564d195889",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "ea441236bd1aa09bd0be3dc0c7bfdea3854c3b687bbe2f5dd8e4e53444591fe5",
          "bytes": 1235751,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "a58a3172a080ec2d3c9f4ea432cc20168c30ad2fc7f278c98343d817f5c71c45",
          "bytes": 3534205,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "256fbc8ef495ca38523e79d4d14521d7aac2d4db72a2b42a7692c60b9f3d52d0",
          "bytes": 678609,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "abd898115b6f24e3dd8c12fa1f06adfc1f2b968a8976b06badbdd3d9334c6bf5",
          "bytes": 626869,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "e9abd2a25461947fd1c45f7b49834306a4e8210a077abc3be6ed5a6a0aa25e40",
          "bytes": 29035,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "27328856310d38fc15615272cf1dd1346b9be7c5937d6c37f517f9071737be43",
          "bytes": 15765,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "a4243bc4846bcecf41bb28ef4bd21a31b88e690c959ef8475f78090e15c457c4",
          "bytes": 253698,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "c3dacb78397e8606c3f86195ef1603246c8bd1c7ee0e7eb84e009492272f6694",
          "bytes": 138465,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "0b7b2851ecb32bf37094cb3831f99bd8b5449cff18aad1d8e9601f2107552186",
          "bytes": 15562,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "913e4580cbe1832eec6ebff40d116a6a43776d182e1964ea7e75be0a350a4dce",
          "bytes": 7383,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "8c65924d60fbd4162bc01717c689ed1e9d8d5cb2266c5b7ffb459ca4a7351f58",
          "bytes": 1344373,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-25T10:39:43.000Z:2eaa51d23707",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-25T10:39:43.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T10:39:14.000Z",
          "retrievedAt": "2026-07-25T10:40:57.921Z",
          "computedAt": "2026-07-25T10:39:43.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 55.1445928238884,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "2eaa51d237076dbe6f69a407aeb4cd5b02027b46806e2e72d56cc99c28482379",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-25T10:39:43.000Z:75bae066d8e3",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-25T10:39:43.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T10:18:27.000Z",
          "retrievedAt": "2026-07-25T10:29:37.000Z",
          "computedAt": "2026-07-25T10:39:43.000Z",
          "archivedAt": null,
          "value": 48,
          "rawValue": 48,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "75bae066d8e3ad7005821cf7caae132fdf4739a0923ec76040ee077297df16cb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-25T10:39:43.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-25T10:39:43.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
          "retrievedAt": "2026-07-25T10:29:37.000Z",
          "computedAt": "2026-07-25T10:39:43.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-25T10:39:43.000Z:b34aa02bd2c3",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-25T10:39:43.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T04:01:52.000Z",
          "retrievedAt": "2026-07-25T10:29:37.000Z",
          "computedAt": "2026-07-25T10:39:43.000Z",
          "archivedAt": null,
          "value": 40,
          "rawValue": 40,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "b34aa02bd2c335172c476d08f0afd5cffa3154c914d268315dee89aa906c039f",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-25T10:39:43.000Z:4c0670695a84",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-25T10:39:43.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T10:18:46.000Z",
          "retrievedAt": "2026-07-25T10:29:37.000Z",
          "computedAt": "2026-07-25T10:39:43.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4c0670695a8419a1d355ed761de1b3dbd1ee85bd5f5710cf9fa54e8cd182c625",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-25T12:39:43+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T04:01:52.000Z",
            "retrievedAt": "2026-07-25T10:29:37.000Z",
            "lastAttemptAt": "2026-07-25T10:29:37.000Z",
            "lastSuccessAt": "2026-07-25T10:29:37.000Z",
            "computedAt": "2026-07-25T12:39:43+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-26T16:01:52.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
            "retrievedAt": "2026-07-25T10:29:37.000Z",
            "lastAttemptAt": "2026-07-25T10:29:37.000Z",
            "lastSuccessAt": "2026-07-25T10:29:37.000Z",
            "computedAt": "2026-07-25T12:39:43+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-26T17:38:19.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T10:18:46.000Z",
            "retrievedAt": "2026-07-25T10:29:37.000Z",
            "lastAttemptAt": "2026-07-25T10:29:37.000Z",
            "lastSuccessAt": "2026-07-25T10:29:37.000Z",
            "computedAt": "2026-07-25T12:39:43+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-25T22:18:46.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T10:18:27.000Z",
            "retrievedAt": "2026-07-25T10:29:37.000Z",
            "lastAttemptAt": "2026-07-25T10:29:37.000Z",
            "lastSuccessAt": "2026-07-25T10:29:37.000Z",
            "computedAt": "2026-07-25T12:39:43+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-25T16:18:27.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (5 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (5 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T10:39:14.000Z",
            "retrievedAt": "2026-07-25T10:40:57.921Z",
            "lastAttemptAt": "2026-07-25T10:40:57.921Z",
            "lastSuccessAt": "2026-07-25T10:40:57.921Z",
            "computedAt": "2026-07-25T12:39:43+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-25T16:39:14.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-25T12:39:43+02:00",
        "latest": [
          {
            "id": "1b37ee6136ba6531",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "kilowatt-fantome-reseau-data-center",
            "title": "Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?",
            "url": "https://l0g.fr/posts/kilowatt-fantome-reseau-data-center/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?.",
            "objectId": "article:kilowatt-fantome-reseau-data-center",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "411f25c510344bcea6f21028f09e9e0956478adb69e0291bbe8aa8dc9eeb7bf3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3a3272492216e91a",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-ghost-kilowatt",
            "title": "The ghost kilowatt: who pays for the grid if the data center never arrives?",
            "url": "https://l0g.fr/en/analysis/the-ghost-kilowatt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ghost kilowatt: who pays for the grid if the data center never arrives?.",
            "objectId": "article:en:the-ghost-kilowatt",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "f45ac80e13d0552df4c3a0bf10e02deef6a69c646d2b36741995704791ce4dfa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "38a2b10cbe5bd291",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "914bf236bb0ad9e6",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "754bd0dcbdf12224",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "f22e8bf72ddb600b5c0707e3e687e244b0a55b9c1e3c66e71c425eff613cc25c",
            "replaces": {
              "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "fbc13676581dbdc3",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "b9fd8daa731bea6cb07468c3d614e9ae23915176454888ccb70e1b1e4ea0784a",
            "replaces": {
              "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "284afbad6312deb0",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "intelligence-bradee-open-source-chinois-capex-ia",
            "title": "Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA",
            "url": "https://l0g.fr/posts/intelligence-bradee-open-source-chinois-capex-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA.",
            "objectId": "article:intelligence-bradee-open-source-chinois-capex-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "b6214f0677004847703da577f4aa0cf70b2092bd0b3f95dec22515b0a91c5b61",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9e151f2825ae341c",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-open-source-ai-strategy-vs-capex-bubble",
            "title": "Intelligence on the cheap: China's open-source AI strategy against the capex bubble",
            "url": "https://l0g.fr/en/analysis/china-open-source-ai-strategy-vs-capex-bubble/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence on the cheap: China's open-source AI strategy against the capex bubble.",
            "objectId": "article:en:china-open-source-ai-strategy-vs-capex-bubble",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "e14db54e2660b81a2633b9c93b07236c53fc609de98a79fb754625f4a1d77d70",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "7ed6222f1dce108e83693da58901e847b793780595f583d9a7febbf98fef543d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "b21c72f85401f695ec107f1920cd322d354583d7460305cdd0d7f2f17acde932",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "b16d19087862c4ea62eb2247de552c3111a9e1b7cd3817a357a022121118ec86",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "2440f94246daa83be902ac4d06ede2f8327506795759e267794fa7f0a29a81f9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "4694dde8742e9ad5de8e1ff231700ee50e0e9145ecd6393b122c7889cfeafd36",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "88c1c840d57f8c961adfbb7a9e952deae9fa5fc7070667c1e4aac773256f5f17",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "49869ddb8373168c6c808faf3e14388a0319efa733f9666ff1f7c0b7f465e866",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "611974744bbded09624163a3fc39f43c95d3f2324ef7f7c7e000e83f4ab3f5e3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "c64b84bfa62982a81b7e982ddcdcb84e5285f206d86a60935f56c4cf9e3c5989",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "db7b93dbe2a74f45ec6597d356fd918d36712666edd97f60c73b15bf361be9df",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "77f54cf9de51eb5b83d30ec6fbd6d0068bd8519f067de1ddf1d79f1d6ca39bdd"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260725T135550+0200-ccdbd77fa9ee-30157091291-1",
      "date": "2026-07-25",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-25T11:57:03.396Z",
      "computedAt": "2026-07-25T13:55:50+02:00",
      "gitSha": "ccdbd77fa9ee960ed054a8034da690c372359804",
      "previousFrameHash": "77f54cf9de51eb5b83d30ec6fbd6d0068bd8519f067de1ddf1d79f1d6ca39bdd",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30157091291",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "35f9572bd3eea1d5cb154776d3eca64a8aa5b410e62f40198f844a564d195889",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "e43e9e4564b5c12f2bfdb63a7a1fc077d8423db4902a185377f1cd12ac101776",
          "bytes": 1235751,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "a58a3172a080ec2d3c9f4ea432cc20168c30ad2fc7f278c98343d817f5c71c45",
          "bytes": 3534205,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "639e6501966f7433883b1ba47b69c67f196534376dc44ca818ce49a6b7f191ad",
          "bytes": 678609,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "c4bf2ae08124cb0dd0d5dd56c40c26f997388b8b15ac9a44b58b3e8b7f036a4c",
          "bytes": 626869,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "e9abd2a25461947fd1c45f7b49834306a4e8210a077abc3be6ed5a6a0aa25e40",
          "bytes": 29035,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "4883cb1a34f6700ab552f0d2ab98e5424d979623057252d6f91c06d1847e99c0",
          "bytes": 15765,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "8b6885d2f8a62c9a832a613b3623183f2290704ae60b48909afee761f90e224d",
          "bytes": 253698,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "193552d1c0b1887978988c292d68fccd026546ed64bbdd0e9a83d5aea2a1e852",
          "bytes": 138443,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "2cbfd24e4c695e895e67725029a06000b0a2b734ad127fdb8528f1b2a79f97f8",
          "bytes": 15564,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "c2919bcfd0052c3a377a368c8ff6d8934d8f34681b1bac11e12697fb800dd97b",
          "bytes": 7383,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "5744bde774d5ef89a9b664e8eb859801eadd6fecc2833439e7b834ecf59ae80d",
          "bytes": 1353795,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-25T11:55:50.000Z:8bec8d320af8",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-25T11:55:50.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T11:45:37.000Z",
          "retrievedAt": "2026-07-25T11:57:03.396Z",
          "computedAt": "2026-07-25T11:55:50.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 55.1445928238884,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "8bec8d320af8d42157cd9a7c030e032357c6b5073446f97d7b7af50f4c0dffb5",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-25T11:55:50.000Z:75bae066d8e3",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-25T11:55:50.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T11:21:27.000Z",
          "retrievedAt": "2026-07-25T11:45:17.000Z",
          "computedAt": "2026-07-25T11:55:50.000Z",
          "archivedAt": null,
          "value": 48,
          "rawValue": 48,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "75bae066d8e3ad7005821cf7caae132fdf4739a0923ec76040ee077297df16cb",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-25T11:55:50.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-25T11:55:50.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
          "retrievedAt": "2026-07-25T11:45:17.000Z",
          "computedAt": "2026-07-25T11:55:50.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-25T11:55:50.000Z:b34aa02bd2c3",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-25T11:55:50.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T04:01:52.000Z",
          "retrievedAt": "2026-07-25T11:45:17.000Z",
          "computedAt": "2026-07-25T11:55:50.000Z",
          "archivedAt": null,
          "value": 40,
          "rawValue": 40,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "b34aa02bd2c335172c476d08f0afd5cffa3154c914d268315dee89aa906c039f",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-25T11:55:50.000Z:4c0670695a84",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-25T11:55:50.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T10:18:46.000Z",
          "retrievedAt": "2026-07-25T11:45:17.000Z",
          "computedAt": "2026-07-25T11:55:50.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4c0670695a8419a1d355ed761de1b3dbd1ee85bd5f5710cf9fa54e8cd182c625",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-25T13:55:50+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T04:01:52.000Z",
            "retrievedAt": "2026-07-25T11:45:17.000Z",
            "lastAttemptAt": "2026-07-25T11:45:17.000Z",
            "lastSuccessAt": "2026-07-25T11:45:17.000Z",
            "computedAt": "2026-07-25T13:55:50+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-26T16:01:52.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
            "retrievedAt": "2026-07-25T11:45:17.000Z",
            "lastAttemptAt": "2026-07-25T11:45:17.000Z",
            "lastSuccessAt": "2026-07-25T11:45:17.000Z",
            "computedAt": "2026-07-25T13:55:50+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-26T17:38:19.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T10:18:46.000Z",
            "retrievedAt": "2026-07-25T11:45:17.000Z",
            "lastAttemptAt": "2026-07-25T11:45:17.000Z",
            "lastSuccessAt": "2026-07-25T11:45:17.000Z",
            "computedAt": "2026-07-25T13:55:50+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-25T22:18:46.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T11:21:27.000Z",
            "retrievedAt": "2026-07-25T11:45:17.000Z",
            "lastAttemptAt": "2026-07-25T11:45:17.000Z",
            "lastSuccessAt": "2026-07-25T11:45:17.000Z",
            "computedAt": "2026-07-25T13:55:50+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-25T17:21:27.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (5 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (5 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T11:45:37.000Z",
            "retrievedAt": "2026-07-25T11:57:03.396Z",
            "lastAttemptAt": "2026-07-25T11:57:03.396Z",
            "lastSuccessAt": "2026-07-25T11:57:03.396Z",
            "computedAt": "2026-07-25T13:55:50+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-25T17:45:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-25T13:55:50+02:00",
        "latest": [
          {
            "id": "1b37ee6136ba6531",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "kilowatt-fantome-reseau-data-center",
            "title": "Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?",
            "url": "https://l0g.fr/posts/kilowatt-fantome-reseau-data-center/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?.",
            "objectId": "article:kilowatt-fantome-reseau-data-center",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "8a5d370fb0e1e0fa70647b74f524f829feddb26bd69476fb5b7b3b46a602457e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3a3272492216e91a",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-ghost-kilowatt",
            "title": "The ghost kilowatt: who pays for the grid if the data center never arrives?",
            "url": "https://l0g.fr/en/analysis/the-ghost-kilowatt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ghost kilowatt: who pays for the grid if the data center never arrives?.",
            "objectId": "article:en:the-ghost-kilowatt",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "f45ac80e13d0552df4c3a0bf10e02deef6a69c646d2b36741995704791ce4dfa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "38a2b10cbe5bd291",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "914bf236bb0ad9e6",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "754bd0dcbdf12224",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "f22e8bf72ddb600b5c0707e3e687e244b0a55b9c1e3c66e71c425eff613cc25c",
            "replaces": {
              "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "fbc13676581dbdc3",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "a2039fbeabc8ce40f40d2535d224f854b6d5f568ea2962d8c620a2d88cce50e5",
            "replaces": {
              "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "284afbad6312deb0",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "intelligence-bradee-open-source-chinois-capex-ia",
            "title": "Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA",
            "url": "https://l0g.fr/posts/intelligence-bradee-open-source-chinois-capex-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA.",
            "objectId": "article:intelligence-bradee-open-source-chinois-capex-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "0d05605c4b0773252166f2690714ec5450f7cc8e037b2b6b45a7e407b305f452",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9e151f2825ae341c",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-open-source-ai-strategy-vs-capex-bubble",
            "title": "Intelligence on the cheap: China's open-source AI strategy against the capex bubble",
            "url": "https://l0g.fr/en/analysis/china-open-source-ai-strategy-vs-capex-bubble/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence on the cheap: China's open-source AI strategy against the capex bubble.",
            "objectId": "article:en:china-open-source-ai-strategy-vs-capex-bubble",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "e14db54e2660b81a2633b9c93b07236c53fc609de98a79fb754625f4a1d77d70",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "c54a8746c277366fdcd53d2563270afea1f137489ece6fa73f46e9ce53e5571c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "b21c72f85401f695ec107f1920cd322d354583d7460305cdd0d7f2f17acde932",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "ddc0445812bde87c41de652af4d719817dd8adf62c6e6324edcc76c968fd2e4a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "2440f94246daa83be902ac4d06ede2f8327506795759e267794fa7f0a29a81f9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "d84b5e2531191df696038f24551eb02b7433a180e25cbc2ce8e42e1f217ef273",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "7401b3aa826f26b2387d253e22c158e46ce6d674d81979dc71bca0faa73e744e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "49869ddb8373168c6c808faf3e14388a0319efa733f9666ff1f7c0b7f465e866",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "5a0e661c12266b066f4dd118c86e2c7bc604814c0772a9724a632468d9f6c869",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "4a4b6e58f71fcbc0",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "fr",
            "slug": "lire-un-programme-du-fmi",
            "title": "Lire un programme du FMI : quote-part, DTS, guichets et échéanciers",
            "url": "https://l0g.fr/guides/lire-un-programme-du-fmi/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : Lire un programme du FMI : quote-part, DTS, guichets et échéanciers.",
            "objectId": "guide:lire-un-programme-du-fmi",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "c64b84bfa62982a81b7e982ddcdcb84e5285f206d86a60935f56c4cf9e3c5989",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f9ef2bb43f3fdd9b",
            "date": "2026-07-21T23:54:00.000Z",
            "type": "guide-published",
            "contentType": "guide",
            "language": "en",
            "slug": "read-an-imf-program",
            "title": "How to read an IMF program: quota, SDRs, facilities and repayment schedules",
            "url": "https://l0g.fr/en/guides/read-an-imf-program/",
            "changedFields": [
              "title",
              "description",
              "body"
            ],
            "summary": "Publication du guide : How to read an IMF program: quota, SDRs, facilities and repayment schedules.",
            "objectId": "guide:en:read-an-imf-program",
            "previousVersion": null,
            "currentVersion": "2026-07-21T23:54:00.000Z",
            "previousHash": null,
            "currentHash": "db7b93dbe2a74f45ec6597d356fd918d36712666edd97f60c73b15bf361be9df",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "cb573442d6c053afe86daccc65c84b2a7c4311a5a13ae560db0fc6342c835e80"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260725T171850+0200-309b7d427f1e-30163370839-1",
      "date": "2026-07-25",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-25T15:20:05.068Z",
      "computedAt": "2026-07-25T17:18:50+02:00",
      "gitSha": "309b7d427f1e93646bb15de2c780f3de02e3da8f",
      "previousFrameHash": "cb573442d6c053afe86daccc65c84b2a7c4311a5a13ae560db0fc6342c835e80",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30163370839",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "6bdf6ec49fd4f49d89a910e7e8d432fc8a6be6e583490384cb862516643b79ba",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "3ac4e22a49f9dcf1d744f7bad7001201e3d900be73c41046f663d0f8fff63f59",
          "bytes": 1244566,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "002c88a881833803f011cc0bdcc50e4db0743555d52d27bf894b3df0dc5e1abf",
          "bytes": 3562299,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "e52ad201ad893ba8acf9bd9c37d7658c0bd22949d94f60be60fbae4fd02feb35",
          "bytes": 686371,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "8b42601320367da4f6a35b3ca230d74b089b09975355739f033d2f5892845636",
          "bytes": 634667,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "bebf4efc7199c48f688adce8a32546fb73808c42ae0c2b69ae15f8aa471dda95",
          "bytes": 29035,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "4be68b315c35c7f1a5330dc9a5d44917521245b980d73e4c4a5889e060a60295",
          "bytes": 15767,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "0ecadcc984ebdbe59f097ae17f2c62c09741900c6b667666f1b6db3308e4df38",
          "bytes": 255492,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "51a64e8574c0b7cad6641c93dbe97180af1b9bd834eadc538cc355fd9a70bab0",
          "bytes": 142663,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "38b87c2cdb9d4ce88fda04ecc8ff5e537ef49674888b7cdd1d4b48558f468a86",
          "bytes": 15565,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "e75aafa30acbdff0290331faa5bb79d61820d4d1a5af9d9dec43e3239d73ad98",
          "bytes": 7383,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "4b1c2893477ef745fe59bbdcdd7cb2816f5b8db7d6f4ecc8856f48c2a0cd7d04",
          "bytes": 1363217,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-25T15:18:50.000Z:83a5e20cac97",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-25T15:18:50.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T15:16:23.000Z",
          "retrievedAt": "2026-07-25T15:20:05.068Z",
          "computedAt": "2026-07-25T15:18:50.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 55.1445928238884,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "83a5e20cac97fa7adf4fdbb91e3af7e91ea06b3b5f707dc703f2154726297fbc",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-25T15:18:50.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-25T15:18:50.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T14:58:43.000Z",
          "retrievedAt": "2026-07-25T15:16:04.000Z",
          "computedAt": "2026-07-25T15:18:50.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-25T15:18:50.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-25T15:18:50.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
          "retrievedAt": "2026-07-25T15:16:04.000Z",
          "computedAt": "2026-07-25T15:18:50.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-25T15:18:50.000Z:b34aa02bd2c3",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-25T15:18:50.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T04:01:52.000Z",
          "retrievedAt": "2026-07-25T15:16:04.000Z",
          "computedAt": "2026-07-25T15:18:50.000Z",
          "archivedAt": null,
          "value": 40,
          "rawValue": 40,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "b34aa02bd2c335172c476d08f0afd5cffa3154c914d268315dee89aa906c039f",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-25T15:18:50.000Z:4c0670695a84",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-25T15:18:50.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T10:18:46.000Z",
          "retrievedAt": "2026-07-25T15:16:04.000Z",
          "computedAt": "2026-07-25T15:18:50.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4c0670695a8419a1d355ed761de1b3dbd1ee85bd5f5710cf9fa54e8cd182c625",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-25T17:18:50+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T04:01:52.000Z",
            "retrievedAt": "2026-07-25T15:16:04.000Z",
            "lastAttemptAt": "2026-07-25T15:16:04.000Z",
            "lastSuccessAt": "2026-07-25T15:16:04.000Z",
            "computedAt": "2026-07-25T17:18:50+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-26T16:01:52.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
            "retrievedAt": "2026-07-25T15:16:04.000Z",
            "lastAttemptAt": "2026-07-25T15:16:04.000Z",
            "lastSuccessAt": "2026-07-25T15:16:04.000Z",
            "computedAt": "2026-07-25T17:18:50+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-26T17:38:19.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T10:18:46.000Z",
            "retrievedAt": "2026-07-25T15:16:04.000Z",
            "lastAttemptAt": "2026-07-25T15:16:04.000Z",
            "lastSuccessAt": "2026-07-25T15:16:04.000Z",
            "computedAt": "2026-07-25T17:18:50+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-25T22:18:46.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T14:58:43.000Z",
            "retrievedAt": "2026-07-25T15:16:04.000Z",
            "lastAttemptAt": "2026-07-25T15:16:04.000Z",
            "lastSuccessAt": "2026-07-25T15:16:04.000Z",
            "computedAt": "2026-07-25T17:18:50+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-25T20:58:43.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (5 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (5 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T15:16:23.000Z",
            "retrievedAt": "2026-07-25T15:20:05.068Z",
            "lastAttemptAt": "2026-07-25T15:20:05.068Z",
            "lastSuccessAt": "2026-07-25T15:20:05.068Z",
            "computedAt": "2026-07-25T17:18:50+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-25T21:16:23.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-25T17:18:50+02:00",
        "latest": [
          {
            "id": "782c1361f3f82e48",
            "date": "2026-07-25T15:06:13.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "high-yield-holds-up-while-investment-grade-flees",
            "title": "High yield holds up while investment grade flees: what the bond market is really measuring",
            "url": "https://l0g.fr/en/analysis/high-yield-holds-up-while-investment-grade-flees/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : High yield holds up while investment grade flees: what the bond market is really measuring.",
            "objectId": "article:en:high-yield-holds-up-while-investment-grade-flees",
            "previousVersion": null,
            "currentVersion": "2026-07-25T15:06:13.000Z",
            "previousHash": null,
            "currentHash": "d3835902c75f9e2a2d8384be867ec46de9cb872622063028e8e99b2229bf3f9e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d2f9dd1647f74721",
            "date": "2026-07-25T15:06:13.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "le-high-yield-resiste-investment-grade-fuit",
            "title": "Le high yield résiste, l’investment grade fuit : ce que le marché obligataire mesure vraiment",
            "url": "https://l0g.fr/posts/le-high-yield-resiste-investment-grade-fuit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le high yield résiste, l’investment grade fuit : ce que le marché obligataire mesure vraiment.",
            "objectId": "article:le-high-yield-resiste-investment-grade-fuit",
            "previousVersion": null,
            "currentVersion": "2026-07-25T15:06:13.000Z",
            "previousHash": null,
            "currentHash": "41cb77f2f9449d098471909360d9295b9d98d90763cf46832937919a3c72328b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1b37ee6136ba6531",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "kilowatt-fantome-reseau-data-center",
            "title": "Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?",
            "url": "https://l0g.fr/posts/kilowatt-fantome-reseau-data-center/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?.",
            "objectId": "article:kilowatt-fantome-reseau-data-center",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "831269ca0319efcfb0a55e0482aebd0f8b4e22ae3c52baeed7185fc4488a5ed8",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3a3272492216e91a",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-ghost-kilowatt",
            "title": "The ghost kilowatt: who pays for the grid if the data center never arrives?",
            "url": "https://l0g.fr/en/analysis/the-ghost-kilowatt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ghost kilowatt: who pays for the grid if the data center never arrives?.",
            "objectId": "article:en:the-ghost-kilowatt",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "f45ac80e13d0552df4c3a0bf10e02deef6a69c646d2b36741995704791ce4dfa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "38a2b10cbe5bd291",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "914bf236bb0ad9e6",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "754bd0dcbdf12224",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "f22e8bf72ddb600b5c0707e3e687e244b0a55b9c1e3c66e71c425eff613cc25c",
            "replaces": {
              "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "fbc13676581dbdc3",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "5fb8d602525a9fc259e7b2e89dcd76c272efa7f7357ce9d5af2fc4865b5f1585",
            "replaces": {
              "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "284afbad6312deb0",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "intelligence-bradee-open-source-chinois-capex-ia",
            "title": "Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA",
            "url": "https://l0g.fr/posts/intelligence-bradee-open-source-chinois-capex-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA.",
            "objectId": "article:intelligence-bradee-open-source-chinois-capex-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "78d631d7705aaef963dcb8847a5579e18ec48721b8e516666b477e0eaf561379",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9e151f2825ae341c",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-open-source-ai-strategy-vs-capex-bubble",
            "title": "Intelligence on the cheap: China's open-source AI strategy against the capex bubble",
            "url": "https://l0g.fr/en/analysis/china-open-source-ai-strategy-vs-capex-bubble/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence on the cheap: China's open-source AI strategy against the capex bubble.",
            "objectId": "article:en:china-open-source-ai-strategy-vs-capex-bubble",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "e14db54e2660b81a2633b9c93b07236c53fc609de98a79fb754625f4a1d77d70",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "4d924c720ae8d53779e4f3d04ce19ac40513f6ba28ba44e8b108718194fb440c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "b21c72f85401f695ec107f1920cd322d354583d7460305cdd0d7f2f17acde932",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "5f3a5bb87e3d9f2f82631cdd6bd5bd7d79307706ecda731eb70e6d05851e06a3",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "2440f94246daa83be902ac4d06ede2f8327506795759e267794fa7f0a29a81f9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "1343ac889f1b6163c8ca34a89081912d30914812bb3f44544c8eca2755e7517e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "a9c9ecaa6481bc453d44de2812a8ae6c804c81cbe7119036477606b70a134ffc",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "49869ddb8373168c6c808faf3e14388a0319efa733f9666ff1f7c0b7f465e866",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "02ec51cbd8723a71ff61d089c117e3b4040e242caea8288e3c66a4bddfc5e97f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "42a1b4e5afaf111ccd453e56ab9bd92671e55363fe0ff3be19692296cdce1759"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260725T172614+0200-2e6c2d4a191a-30163615057-1",
      "date": "2026-07-25",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-25T15:27:22.803Z",
      "computedAt": "2026-07-25T17:26:14+02:00",
      "gitSha": "2e6c2d4a191abbef873cf92682d843720509a0d8",
      "previousFrameHash": "42a1b4e5afaf111ccd453e56ab9bd92671e55363fe0ff3be19692296cdce1759",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30163615057",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "6bdf6ec49fd4f49d89a910e7e8d432fc8a6be6e583490384cb862516643b79ba",
          "bytes": 7199,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "0824fd10f53dd36dc510e83a3b80a09fedc28172566bb3dc6bc86c053e560804",
          "bytes": 1244566,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "8f038bca95fc77ae524b7938770d416e9208f33fc7948671ca87f98dc0ca2c05",
          "bytes": 3562295,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "14a419f54afbf31dfc6649fd25f97037143e24ab3b7a01ae52bb02c367fa0f7d",
          "bytes": 686371,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "be1856f74faa4282329989afdf59823eac4b99b82786148405b41d4fae825a28",
          "bytes": 634667,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "bebf4efc7199c48f688adce8a32546fb73808c42ae0c2b69ae15f8aa471dda95",
          "bytes": 29035,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "80f1f44968971abc1e8c219dabaa88c562e0aaac1abd6e3cc8438bc559efb7ff",
          "bytes": 15767,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "554b8d393a20ed55f9238754bacb8a214bc9c45a0f0ba252fc904a0d3d14a26d",
          "bytes": 255492,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "246c4a5c44d344bb2d654dd062ffd7340f53062b69432f89e182fcdba91a2b86",
          "bytes": 142663,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "01fc66aaaadf96e3a329e4df3d42b05b63a4652618c91eef42323cfb26a4c741",
          "bytes": 15565,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "1a1fa224843390c0f592f082e7a2415d93b17fbb4ac0903ffe4ae7a5585c1dc8",
          "bytes": 7383,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "fc31950ddd511cb20e394166b24f0c1ecb8e43b1e851c9b8ae3623668974fb6f",
          "bytes": 1372639,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-25T15:26:14.000Z:068b1a3e43a6",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-25T15:26:14.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T15:16:23.000Z",
          "retrievedAt": "2026-07-25T15:27:22.803Z",
          "computedAt": "2026-07-25T15:26:14.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 55.1445928238884,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "068b1a3e43a6973253b7c6ba227eddef3fa0de3c66d8b1f7af3f7fd59c9b0a6a",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-25T15:26:14.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-25T15:26:14.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T14:58:43.000Z",
          "retrievedAt": "2026-07-25T15:16:04.000Z",
          "computedAt": "2026-07-25T15:26:14.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-25T15:26:14.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-25T15:26:14.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
          "retrievedAt": "2026-07-25T15:16:04.000Z",
          "computedAt": "2026-07-25T15:26:14.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-25T15:26:14.000Z:b34aa02bd2c3",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-25T15:26:14.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T04:01:52.000Z",
          "retrievedAt": "2026-07-25T15:16:04.000Z",
          "computedAt": "2026-07-25T15:26:14.000Z",
          "archivedAt": null,
          "value": 40,
          "rawValue": 40,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "b34aa02bd2c335172c476d08f0afd5cffa3154c914d268315dee89aa906c039f",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-25T15:26:14.000Z:4c0670695a84",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-25T15:26:14.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T10:18:46.000Z",
          "retrievedAt": "2026-07-25T15:16:04.000Z",
          "computedAt": "2026-07-25T15:26:14.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4c0670695a8419a1d355ed761de1b3dbd1ee85bd5f5710cf9fa54e8cd182c625",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-25T17:26:14+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T04:01:52.000Z",
            "retrievedAt": "2026-07-25T15:16:04.000Z",
            "lastAttemptAt": "2026-07-25T15:16:04.000Z",
            "lastSuccessAt": "2026-07-25T15:16:04.000Z",
            "computedAt": "2026-07-25T17:26:14+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-26T16:01:52.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
            "retrievedAt": "2026-07-25T15:16:04.000Z",
            "lastAttemptAt": "2026-07-25T15:16:04.000Z",
            "lastSuccessAt": "2026-07-25T15:16:04.000Z",
            "computedAt": "2026-07-25T17:26:14+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-26T17:38:19.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T10:18:46.000Z",
            "retrievedAt": "2026-07-25T15:16:04.000Z",
            "lastAttemptAt": "2026-07-25T15:16:04.000Z",
            "lastSuccessAt": "2026-07-25T15:16:04.000Z",
            "computedAt": "2026-07-25T17:26:14+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-25T22:18:46.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T14:58:43.000Z",
            "retrievedAt": "2026-07-25T15:16:04.000Z",
            "lastAttemptAt": "2026-07-25T15:16:04.000Z",
            "lastSuccessAt": "2026-07-25T15:16:04.000Z",
            "computedAt": "2026-07-25T17:26:14+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-25T20:58:43.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (5 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (5 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T15:16:23.000Z",
            "retrievedAt": "2026-07-25T15:27:22.803Z",
            "lastAttemptAt": "2026-07-25T15:27:22.803Z",
            "lastSuccessAt": "2026-07-25T15:27:22.803Z",
            "computedAt": "2026-07-25T17:26:14+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-25T21:16:23.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-25T17:26:14+02:00",
        "latest": [
          {
            "id": "782c1361f3f82e48",
            "date": "2026-07-25T15:06:13.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "high-yield-holds-up-while-investment-grade-flees",
            "title": "High yield holds up while investment grade flees: what the bond market is really measuring",
            "url": "https://l0g.fr/en/analysis/high-yield-holds-up-while-investment-grade-flees/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : High yield holds up while investment grade flees: what the bond market is really measuring.",
            "objectId": "article:en:high-yield-holds-up-while-investment-grade-flees",
            "previousVersion": null,
            "currentVersion": "2026-07-25T15:06:13.000Z",
            "previousHash": null,
            "currentHash": "9a860fd4b14195fe7e835be399abd5f96615f7f4a06ad94f37873f0454fc2a0f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d2f9dd1647f74721",
            "date": "2026-07-25T15:06:13.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "le-high-yield-resiste-investment-grade-fuit",
            "title": "Le high yield résiste, l’investment grade fuit : ce que le marché obligataire mesure vraiment",
            "url": "https://l0g.fr/posts/le-high-yield-resiste-investment-grade-fuit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le high yield résiste, l’investment grade fuit : ce que le marché obligataire mesure vraiment.",
            "objectId": "article:le-high-yield-resiste-investment-grade-fuit",
            "previousVersion": null,
            "currentVersion": "2026-07-25T15:06:13.000Z",
            "previousHash": null,
            "currentHash": "f5902cef940ef6eacb2af269f9018e4c540d5f89036d0b85c1b252915a8508dd",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1b37ee6136ba6531",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "kilowatt-fantome-reseau-data-center",
            "title": "Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?",
            "url": "https://l0g.fr/posts/kilowatt-fantome-reseau-data-center/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?.",
            "objectId": "article:kilowatt-fantome-reseau-data-center",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "2e5b8fe94dce4006a828cd2a007c5481dc5eea933a4efe4ab1e2c77e3766bddf",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3a3272492216e91a",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-ghost-kilowatt",
            "title": "The ghost kilowatt: who pays for the grid if the data center never arrives?",
            "url": "https://l0g.fr/en/analysis/the-ghost-kilowatt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ghost kilowatt: who pays for the grid if the data center never arrives?.",
            "objectId": "article:en:the-ghost-kilowatt",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "f45ac80e13d0552df4c3a0bf10e02deef6a69c646d2b36741995704791ce4dfa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "38a2b10cbe5bd291",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "914bf236bb0ad9e6",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "754bd0dcbdf12224",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "f22e8bf72ddb600b5c0707e3e687e244b0a55b9c1e3c66e71c425eff613cc25c",
            "replaces": {
              "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "fbc13676581dbdc3",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "ad8224f4f89801a624c3208dbdb3e0552c576c5e578a6c11a8de60af135ba22b",
            "replaces": {
              "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "284afbad6312deb0",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "intelligence-bradee-open-source-chinois-capex-ia",
            "title": "Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA",
            "url": "https://l0g.fr/posts/intelligence-bradee-open-source-chinois-capex-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA.",
            "objectId": "article:intelligence-bradee-open-source-chinois-capex-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "e07b82acad565373c56c7d2c7d603a36d6578cc25232892683afa55677613ff9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9e151f2825ae341c",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-open-source-ai-strategy-vs-capex-bubble",
            "title": "Intelligence on the cheap: China's open-source AI strategy against the capex bubble",
            "url": "https://l0g.fr/en/analysis/china-open-source-ai-strategy-vs-capex-bubble/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence on the cheap: China's open-source AI strategy against the capex bubble.",
            "objectId": "article:en:china-open-source-ai-strategy-vs-capex-bubble",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "e14db54e2660b81a2633b9c93b07236c53fc609de98a79fb754625f4a1d77d70",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "7b74ae5829b9b5894b714cd85ac58f6d63675a2fe00bb5b4aa959d54b55107bc",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "b21c72f85401f695ec107f1920cd322d354583d7460305cdd0d7f2f17acde932",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "fbf9fb38f15ca3846974ceec6f4233a017fdac0539ede26b1d7b8c3b5a9fded9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "2440f94246daa83be902ac4d06ede2f8327506795759e267794fa7f0a29a81f9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "11d1d76b3e80d8fdabc52bd09ceaeb9b3f8dcf6dbb7c28b9d146154ece2bb1a6",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "5d4c902fb25255643da34db3082a1e46873877c806e3ae18069a5eb0caddb096",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "705c058bab417222",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "title": "The tightening that didn't happen: the ECB's credit survey, and the private-credit crack",
            "url": "https://l0g.fr/en/analysis/eurozone-credit-tightening-ecb-survey-private-credit-crack/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The tightening that didn't happen: the ECB's credit survey, and the private-credit crack.",
            "objectId": "article:en:eurozone-credit-tightening-ecb-survey-private-credit-crack",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "49869ddb8373168c6c808faf3e14388a0319efa733f9666ff1f7c0b7f465e866",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "778e3525503b1a65",
            "date": "2026-07-22T08:29:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "resserrement-credit-bce-enquete-fissure-credit-prive",
            "title": "Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé",
            "url": "https://l0g.fr/posts/resserrement-credit-bce-enquete-fissure-credit-prive/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le resserrement qui n'a pas eu lieu : l'enquête crédit de la BCE, et la fissure du crédit privé.",
            "objectId": "article:resserrement-credit-bce-enquete-fissure-credit-prive",
            "previousVersion": null,
            "currentVersion": "2026-07-22T08:29:00.000Z",
            "previousHash": null,
            "currentHash": "6f75a46b3b6a0db251ffed5dac75c6328f317144126e33f16ed7ca8a3d6a5d66",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "b90c8454cfe9ed134f924aa24e01f0e7c813d0f255d08cce38153deaa8bf2154"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260725T193339+0200-abd78c975ed0-30167877916-1",
      "date": "2026-07-25",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-25T17:34:52.603Z",
      "computedAt": "2026-07-25T19:33:39+02:00",
      "gitSha": "abd78c975ed0dd7e579f76790ff11992397ba358",
      "previousFrameHash": "b90c8454cfe9ed134f924aa24e01f0e7c813d0f255d08cce38153deaa8bf2154",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30167877916",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "d59ad405ec651a34614d17fcc4d8f6d9c8b15945ff9c109f54e5f5f54f0ffd11",
          "bytes": 7201,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "1b7910f543891ccb0029e527227dc8dfb91024218cb05ace076b7492da30a374",
          "bytes": 1254378,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "6364941c312b4fed5fb50d88d46d4d9b5c25afe6e03c31d6c5b9771a27268700",
          "bytes": 3602340,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "811d5c122e5c12ddd464bc85d46d043e55b5ec900de2520d7e23a303a4627fca",
          "bytes": 694213,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "674cb5b61d4825295a49dc86e88f4638cedd002b9f48fa025f1fe50d031d2e15",
          "bytes": 642581,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "8d3fbc67795155fcd52105e7017d4b48c154b63aca13cfedcc32287954842c91",
          "bytes": 29035,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "3a0f6de7ad091615e7555a74987f0bbc24b33cb0d63940a30a18519390b390a7",
          "bytes": 15952,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "5ce9b1d9c18eb61022b998af8f013c1096ca545a18a033318e18f7d0d4b1b517",
          "bytes": 257247,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "2fa71e2aef546f74b118134423fbc6e346f6ce7ed2dac2bdc5efdbcb9db85c9a",
          "bytes": 144828,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "f21c4ed672e76e84d875fff5149ef917ace39399d377453ef3435fe7a66beaaa",
          "bytes": 15564,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "7f834dbfa33e4c6b15ab0e5770c9a2a595b8113ed298dd61b6d3eebaf5bb2602",
          "bytes": 7383,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "92f881632ebfd5b578a25a70841e4105019422c0818d8c196662b347501cdd06",
          "bytes": 1382061,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-25T17:33:39.000Z:f15bf31009e0",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-25T17:33:39.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T17:32:57.000Z",
          "retrievedAt": "2026-07-25T17:34:52.603Z",
          "computedAt": "2026-07-25T17:33:39.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 55.1445928238884,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "f15bf31009e02bb56d2ffd165d9a905d1efc45df13ac473a98a84185efd64033",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-25T17:33:39.000Z:8c60a31ea583",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-25T17:33:39.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T17:03:41.000Z",
          "retrievedAt": "2026-07-25T17:32:37.000Z",
          "computedAt": "2026-07-25T17:33:39.000Z",
          "archivedAt": null,
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-25T17:33:39.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-25T17:33:39.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
          "retrievedAt": "2026-07-25T17:32:37.000Z",
          "computedAt": "2026-07-25T17:33:39.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-25T17:33:39.000Z:b34aa02bd2c3",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-25T17:33:39.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T04:01:52.000Z",
          "retrievedAt": "2026-07-25T17:32:37.000Z",
          "computedAt": "2026-07-25T17:33:39.000Z",
          "archivedAt": null,
          "value": 40,
          "rawValue": 40,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "b34aa02bd2c335172c476d08f0afd5cffa3154c914d268315dee89aa906c039f",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-25T17:33:39.000Z:4c0670695a84",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-25T17:33:39.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T16:18:22.000Z",
          "retrievedAt": "2026-07-25T17:32:37.000Z",
          "computedAt": "2026-07-25T17:33:39.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4c0670695a8419a1d355ed761de1b3dbd1ee85bd5f5710cf9fa54e8cd182c625",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-25T19:33:39+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T04:01:52.000Z",
            "retrievedAt": "2026-07-25T17:32:37.000Z",
            "lastAttemptAt": "2026-07-25T17:32:37.000Z",
            "lastSuccessAt": "2026-07-25T17:32:37.000Z",
            "computedAt": "2026-07-25T19:33:39+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-26T16:01:52.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
            "retrievedAt": "2026-07-25T17:32:37.000Z",
            "lastAttemptAt": "2026-07-25T17:32:37.000Z",
            "lastSuccessAt": "2026-07-25T17:32:37.000Z",
            "computedAt": "2026-07-25T19:33:39+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-26T17:38:19.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T16:18:22.000Z",
            "retrievedAt": "2026-07-25T17:32:37.000Z",
            "lastAttemptAt": "2026-07-25T17:32:37.000Z",
            "lastSuccessAt": "2026-07-25T17:32:37.000Z",
            "computedAt": "2026-07-25T19:33:39+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-26T04:18:22.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T17:03:41.000Z",
            "retrievedAt": "2026-07-25T17:32:37.000Z",
            "lastAttemptAt": "2026-07-25T17:32:37.000Z",
            "lastSuccessAt": "2026-07-25T17:32:37.000Z",
            "computedAt": "2026-07-25T19:33:39+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-25T23:03:41.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (5 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (5 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T17:32:57.000Z",
            "retrievedAt": "2026-07-25T17:34:52.603Z",
            "lastAttemptAt": "2026-07-25T17:34:52.603Z",
            "lastSuccessAt": "2026-07-25T17:34:52.603Z",
            "computedAt": "2026-07-25T19:33:39+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-25T23:32:57.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-25T19:33:39+02:00",
        "latest": [
          {
            "id": "c3de93461aa6ec93",
            "date": "2026-07-25T17:00:10.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "cash-pas-cash-coussin-liquidite-fonds-obligataires",
            "title": "Le cash qui n’est pas du cash : le coussin de liquidité caché des fonds obligataires",
            "url": "https://l0g.fr/posts/cash-pas-cash-coussin-liquidite-fonds-obligataires/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le cash qui n’est pas du cash : le coussin de liquidité caché des fonds obligataires.",
            "objectId": "article:cash-pas-cash-coussin-liquidite-fonds-obligataires",
            "previousVersion": null,
            "currentVersion": "2026-07-25T17:00:10.000Z",
            "previousHash": null,
            "currentHash": "7884a3d543a0dbde3783d07978ee01734cc08983612329cbab8f2b09cd429786",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "dd7d9f643dc0e4f6",
            "date": "2026-07-25T17:00:10.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "cash-that-is-not-cash-bond-fund-liquidity-buffer",
            "title": "The cash that is not cash: the hidden liquidity buffer in bond funds",
            "url": "https://l0g.fr/en/analysis/cash-that-is-not-cash-bond-fund-liquidity-buffer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cash that is not cash: the hidden liquidity buffer in bond funds.",
            "objectId": "article:en:cash-that-is-not-cash-bond-fund-liquidity-buffer",
            "previousVersion": null,
            "currentVersion": "2026-07-25T17:00:10.000Z",
            "previousHash": null,
            "currentHash": "45aff139b7afa54f17d1395e96d956ed31c3a1fb7dbb879522f5f4ea37c1c3d0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "782c1361f3f82e48",
            "date": "2026-07-25T15:06:13.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "high-yield-holds-up-while-investment-grade-flees",
            "title": "High yield holds up while investment grade flees: what the bond market is really measuring",
            "url": "https://l0g.fr/en/analysis/high-yield-holds-up-while-investment-grade-flees/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : High yield holds up while investment grade flees: what the bond market is really measuring.",
            "objectId": "article:en:high-yield-holds-up-while-investment-grade-flees",
            "previousVersion": null,
            "currentVersion": "2026-07-25T15:06:13.000Z",
            "previousHash": null,
            "currentHash": "9a860fd4b14195fe7e835be399abd5f96615f7f4a06ad94f37873f0454fc2a0f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d2f9dd1647f74721",
            "date": "2026-07-25T15:06:13.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "le-high-yield-resiste-investment-grade-fuit",
            "title": "Le high yield résiste, l’investment grade fuit : ce que le marché obligataire mesure vraiment",
            "url": "https://l0g.fr/posts/le-high-yield-resiste-investment-grade-fuit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le high yield résiste, l’investment grade fuit : ce que le marché obligataire mesure vraiment.",
            "objectId": "article:le-high-yield-resiste-investment-grade-fuit",
            "previousVersion": null,
            "currentVersion": "2026-07-25T15:06:13.000Z",
            "previousHash": null,
            "currentHash": "166154e2aa5f736d62346dfdfc4ce9a6409e66311a98cf8f2e48196780c9213a",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1b37ee6136ba6531",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "kilowatt-fantome-reseau-data-center",
            "title": "Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?",
            "url": "https://l0g.fr/posts/kilowatt-fantome-reseau-data-center/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?.",
            "objectId": "article:kilowatt-fantome-reseau-data-center",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "d80a78eb60ad86c06e449fd0036fab4bb8690f14680f19db23bfa01a7d9f4c83",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3a3272492216e91a",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-ghost-kilowatt",
            "title": "The ghost kilowatt: who pays for the grid if the data center never arrives?",
            "url": "https://l0g.fr/en/analysis/the-ghost-kilowatt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ghost kilowatt: who pays for the grid if the data center never arrives?.",
            "objectId": "article:en:the-ghost-kilowatt",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "f45ac80e13d0552df4c3a0bf10e02deef6a69c646d2b36741995704791ce4dfa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "38a2b10cbe5bd291",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "914bf236bb0ad9e6",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "754bd0dcbdf12224",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "f22e8bf72ddb600b5c0707e3e687e244b0a55b9c1e3c66e71c425eff613cc25c",
            "replaces": {
              "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "fbc13676581dbdc3",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "bd116a32834c6f4cd231f3c79b49400f8c37eca7e17dcf894e7f9ea473e0cd9c",
            "replaces": {
              "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "284afbad6312deb0",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "intelligence-bradee-open-source-chinois-capex-ia",
            "title": "Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA",
            "url": "https://l0g.fr/posts/intelligence-bradee-open-source-chinois-capex-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA.",
            "objectId": "article:intelligence-bradee-open-source-chinois-capex-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "7a9cbd80ad1c0494a1bbda52e7bd97bcacea09f308389d6fe7beaeafd7cc2e66",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9e151f2825ae341c",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-open-source-ai-strategy-vs-capex-bubble",
            "title": "Intelligence on the cheap: China's open-source AI strategy against the capex bubble",
            "url": "https://l0g.fr/en/analysis/china-open-source-ai-strategy-vs-capex-bubble/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence on the cheap: China's open-source AI strategy against the capex bubble.",
            "objectId": "article:en:china-open-source-ai-strategy-vs-capex-bubble",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "e14db54e2660b81a2633b9c93b07236c53fc609de98a79fb754625f4a1d77d70",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "81b3e91ce5e95e40a2b36c30f9b25a95091392d64594c15c91000d0a6105434d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "b21c72f85401f695ec107f1920cd322d354583d7460305cdd0d7f2f17acde932",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "39b0e9cd3754858e5aa110e7d68e8a7ebfa548f34d8c5b34dd20a5e255e3b7ff",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "2440f94246daa83be902ac4d06ede2f8327506795759e267794fa7f0a29a81f9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "14417d0625343fc85aa46d56b3a5fa1ae303abfbb90a3788a2b950ac7ca9e9fa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "b3322b2f9896edf5",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "tga-rrp-vide-reserves-siphon-liquidite-2026",
            "title": "Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne",
            "url": "https://l0g.fr/posts/tga-rrp-vide-reserves-siphon-liquidite-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le matelas vidé : le RRP à sec, le Trésor recharge, les réserves en première ligne.",
            "objectId": "article:tga-rrp-vide-reserves-siphon-liquidite-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "fd647e5ea2ec10bdf227b3f8ef55e87b49c62b529d1f55fc2aad8098df7e99d7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "f00d86e5bfe0a0a3",
            "date": "2026-07-22T13:10:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "title": "The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line",
            "url": "https://l0g.fr/en/analysis/fed-rrp-drained-tga-rebuild-reserves-liquidity-2026/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cushion is gone: RRP drained, the Treasury reloads, reserves in the front line.",
            "objectId": "article:en:fed-rrp-drained-tga-rebuild-reserves-liquidity-2026",
            "previousVersion": null,
            "currentVersion": "2026-07-22T13:10:00.000Z",
            "previousHash": null,
            "currentHash": "97f80a80a18b96007a18e5cb0f5c9bd8fdd9089893316fd376377be339646b6c",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "6055306b4a5314b68154072613189539456f7f33798d9bcc14e2b67a6ddba71a"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260726T071249+0200-8852d1550c65-30189018295-1",
      "date": "2026-07-26",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-26T05:13:49.563Z",
      "computedAt": "2026-07-26T07:12:49+02:00",
      "gitSha": "8852d1550c65b240ec360c4a21e4ff44dba831c3",
      "previousFrameHash": "6055306b4a5314b68154072613189539456f7f33798d9bcc14e2b67a6ddba71a",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30189018295",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "5672e61a7411b45be06a481a05503909fe9778901ce096f8f5bdf5eee80cad32",
          "bytes": 7201,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "2dc381f9e4c35e0a711ebb67524212323d47667830bf1849b1798c03955e112c",
          "bytes": 1264636,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "f458e034dd4ed38d29e7bbbbf5bb78861d5a3a8b68316286670b1ad9af8fa3ff",
          "bytes": 3636142,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "a60714262f40c71621f86ce36d67737d3d4ff161910fc132d5954af68c10e23d",
          "bytes": 702279,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "fd33df2c0589c41f7843d6960f79bfe2367bd528ce7c1b7b2a229cde2b0a93f7",
          "bytes": 649450,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "94b1ddc52f32e24664015054b6168e036386518bd8ffe6afdc4fc9d66f66cff5",
          "bytes": 29211,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "241a201e5cc39150af9d67d65e7faab7b6c01bee8b4a37606f8a1b940efea226",
          "bytes": 15669,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "15c2f6257d04f18f82b964a74ff2cfeeb09cf383d8eec3ab45cbb5d917cc3e32",
          "bytes": 258656,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "91e4e5a2bb8a0dee4900c0fb2b67e2253f0d0442cee472f0c7cb5e4d74713c5e",
          "bytes": 135404,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "93bdc04237f4321a2505749cd23caa9376ef7d289f4c85abf0d2bab37ed0ccaa",
          "bytes": 15563,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "fd2bb2dd29613b4939a511cd84b2b2f805bc1e530af20550e6515e4253c1c70f",
          "bytes": 7384,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "9cf7c341cae6d1686e8fbdd1bdb762ab1dfdd0455b6e05e48efbe37306885d41",
          "bytes": 1400408,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-26T05:12:49.000Z:3e5bee41835c",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-26T05:12:49.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-26T05:11:39.000Z",
          "retrievedAt": "2026-07-26T05:13:49.563Z",
          "computedAt": "2026-07-26T05:12:49.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 55.14544544857677,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "3e5bee41835ccb04eb0f81c58b6b4b2b0b130a6e97ec58a951b2535b8a6e7086",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-26T05:12:49.000Z:6acdbf1efca2",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-26T05:12:49.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-26T05:02:19.000Z",
          "retrievedAt": "2026-07-26T05:08:27.000Z",
          "computedAt": "2026-07-26T05:12:49.000Z",
          "archivedAt": null,
          "value": 47,
          "rawValue": 47,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6acdbf1efca2842ad6c46d04466f708d6516c03a565155e7782def583a4af123",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-26T05:12:49.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-26T05:12:49.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
          "retrievedAt": "2026-07-26T05:08:27.000Z",
          "computedAt": "2026-07-26T05:12:49.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-26T05:12:49.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-26T05:12:49.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-26T04:01:56.000Z",
          "retrievedAt": "2026-07-26T05:08:27.000Z",
          "computedAt": "2026-07-26T05:12:49.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-26T05:12:49.000Z:4c0670695a84",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-26T05:12:49.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-26T04:16:37.000Z",
          "retrievedAt": "2026-07-26T05:08:27.000Z",
          "computedAt": "2026-07-26T05:12:49.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4c0670695a8419a1d355ed761de1b3dbd1ee85bd5f5710cf9fa54e8cd182c625",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-26T07:12:49+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-26T04:01:56.000Z",
            "retrievedAt": "2026-07-26T05:08:27.000Z",
            "lastAttemptAt": "2026-07-26T05:08:27.000Z",
            "lastSuccessAt": "2026-07-26T05:08:27.000Z",
            "computedAt": "2026-07-26T07:12:49+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-27T16:01:56.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-25T05:38:19.000Z",
            "retrievedAt": "2026-07-26T05:08:27.000Z",
            "lastAttemptAt": "2026-07-26T05:08:27.000Z",
            "lastSuccessAt": "2026-07-26T05:08:27.000Z",
            "computedAt": "2026-07-26T07:12:49+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-26T17:38:19.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-26T04:16:37.000Z",
            "retrievedAt": "2026-07-26T05:08:27.000Z",
            "lastAttemptAt": "2026-07-26T05:08:27.000Z",
            "lastSuccessAt": "2026-07-26T05:08:27.000Z",
            "computedAt": "2026-07-26T07:12:49+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-26T16:16:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-26T05:02:19.000Z",
            "retrievedAt": "2026-07-26T05:08:27.000Z",
            "lastAttemptAt": "2026-07-26T05:08:27.000Z",
            "lastSuccessAt": "2026-07-26T05:08:27.000Z",
            "computedAt": "2026-07-26T07:12:49+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-26T11:02:19.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (6 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (6 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-26T05:11:39.000Z",
            "retrievedAt": "2026-07-26T05:13:49.563Z",
            "lastAttemptAt": "2026-07-26T05:13:49.563Z",
            "lastSuccessAt": "2026-07-26T05:13:49.563Z",
            "computedAt": "2026-07-26T07:12:49+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-26T11:11:39.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-26T07:12:49+02:00",
        "latest": [
          {
            "id": "95fe8d445109dea2",
            "date": "2026-07-26T04:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "dix-mille-milliards-en-dormance-siu",
            "title": "Dix mille milliards en dormance",
            "url": "https://l0g.fr/posts/dix-mille-milliards-en-dormance-siu/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dix mille milliards en dormance.",
            "objectId": "article:dix-mille-milliards-en-dormance-siu",
            "previousVersion": null,
            "currentVersion": "2026-07-26T04:55:00.000Z",
            "previousHash": null,
            "currentHash": "a3f25f7bbd6548eb98f00b65cb8e0dbb7077ac2c862bf3cb7a74d54bda1bbe66",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c3b8385b4f75a592",
            "date": "2026-07-26T04:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ten-trillion-asleep",
            "title": "Ten trillion asleep",
            "url": "https://l0g.fr/en/analysis/ten-trillion-asleep/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ten trillion asleep.",
            "objectId": "article:en:ten-trillion-asleep",
            "previousVersion": null,
            "currentVersion": "2026-07-26T04:55:00.000Z",
            "previousHash": null,
            "currentHash": "07de38524d5b59e322c9f1a7909bd4a9aef1dbe5bac6a5a60dd25525f3473b79",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c3de93461aa6ec93",
            "date": "2026-07-25T17:00:10.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "cash-pas-cash-coussin-liquidite-fonds-obligataires",
            "title": "Le cash qui n’est pas du cash : le coussin de liquidité caché des fonds obligataires",
            "url": "https://l0g.fr/posts/cash-pas-cash-coussin-liquidite-fonds-obligataires/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le cash qui n’est pas du cash : le coussin de liquidité caché des fonds obligataires.",
            "objectId": "article:cash-pas-cash-coussin-liquidite-fonds-obligataires",
            "previousVersion": null,
            "currentVersion": "2026-07-25T17:00:10.000Z",
            "previousHash": null,
            "currentHash": "a705ca4df25ce770a2acb47f7c74b1838a5ea0d0bfeb9f6f6e31d36816d6e47e",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "dd7d9f643dc0e4f6",
            "date": "2026-07-25T17:00:10.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "cash-that-is-not-cash-bond-fund-liquidity-buffer",
            "title": "The cash that is not cash: the hidden liquidity buffer in bond funds",
            "url": "https://l0g.fr/en/analysis/cash-that-is-not-cash-bond-fund-liquidity-buffer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cash that is not cash: the hidden liquidity buffer in bond funds.",
            "objectId": "article:en:cash-that-is-not-cash-bond-fund-liquidity-buffer",
            "previousVersion": null,
            "currentVersion": "2026-07-25T17:00:10.000Z",
            "previousHash": null,
            "currentHash": "45aff139b7afa54f17d1395e96d956ed31c3a1fb7dbb879522f5f4ea37c1c3d0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "782c1361f3f82e48",
            "date": "2026-07-25T15:06:13.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "high-yield-holds-up-while-investment-grade-flees",
            "title": "High yield holds up while investment grade flees: what the bond market is really measuring",
            "url": "https://l0g.fr/en/analysis/high-yield-holds-up-while-investment-grade-flees/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : High yield holds up while investment grade flees: what the bond market is really measuring.",
            "objectId": "article:en:high-yield-holds-up-while-investment-grade-flees",
            "previousVersion": null,
            "currentVersion": "2026-07-25T15:06:13.000Z",
            "previousHash": null,
            "currentHash": "9a860fd4b14195fe7e835be399abd5f96615f7f4a06ad94f37873f0454fc2a0f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d2f9dd1647f74721",
            "date": "2026-07-25T15:06:13.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "le-high-yield-resiste-investment-grade-fuit",
            "title": "Le high yield résiste, l’investment grade fuit : ce que le marché obligataire mesure vraiment",
            "url": "https://l0g.fr/posts/le-high-yield-resiste-investment-grade-fuit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le high yield résiste, l’investment grade fuit : ce que le marché obligataire mesure vraiment.",
            "objectId": "article:le-high-yield-resiste-investment-grade-fuit",
            "previousVersion": null,
            "currentVersion": "2026-07-25T15:06:13.000Z",
            "previousHash": null,
            "currentHash": "a7632adfba15490b7695e0242aeed56e2feffd57fb3a2b9c79dcc5fd9dd2a186",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1b37ee6136ba6531",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "kilowatt-fantome-reseau-data-center",
            "title": "Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?",
            "url": "https://l0g.fr/posts/kilowatt-fantome-reseau-data-center/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?.",
            "objectId": "article:kilowatt-fantome-reseau-data-center",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "b3e084a98f357db4cb4f7b9e5b661033c37d372c2330ef762e45353688fd86b1",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3a3272492216e91a",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-ghost-kilowatt",
            "title": "The ghost kilowatt: who pays for the grid if the data center never arrives?",
            "url": "https://l0g.fr/en/analysis/the-ghost-kilowatt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ghost kilowatt: who pays for the grid if the data center never arrives?.",
            "objectId": "article:en:the-ghost-kilowatt",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "f45ac80e13d0552df4c3a0bf10e02deef6a69c646d2b36741995704791ce4dfa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "38a2b10cbe5bd291",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "914bf236bb0ad9e6",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "754bd0dcbdf12224",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "f22e8bf72ddb600b5c0707e3e687e244b0a55b9c1e3c66e71c425eff613cc25c",
            "replaces": {
              "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "fbc13676581dbdc3",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "8cba72645a2ee718f4e723cc753c8b33cea0f033c2ad0583331a18d6c1f183ca",
            "replaces": {
              "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "284afbad6312deb0",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "intelligence-bradee-open-source-chinois-capex-ia",
            "title": "Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA",
            "url": "https://l0g.fr/posts/intelligence-bradee-open-source-chinois-capex-ia/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence bradée : la stratégie open source chinoise contre la bulle du capex IA.",
            "objectId": "article:intelligence-bradee-open-source-chinois-capex-ia",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "044610f9f46ee7a7e5b194523f430d2a0eb280d58898d06b6a5bd53fd7fbfde0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "9e151f2825ae341c",
            "date": "2026-07-23T21:31:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "china-open-source-ai-strategy-vs-capex-bubble",
            "title": "Intelligence on the cheap: China's open-source AI strategy against the capex bubble",
            "url": "https://l0g.fr/en/analysis/china-open-source-ai-strategy-vs-capex-bubble/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Intelligence on the cheap: China's open-source AI strategy against the capex bubble.",
            "objectId": "article:en:china-open-source-ai-strategy-vs-capex-bubble",
            "previousVersion": null,
            "currentVersion": "2026-07-23T21:31:00.000Z",
            "previousHash": null,
            "currentHash": "e14db54e2660b81a2633b9c93b07236c53fc609de98a79fb754625f4a1d77d70",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "12f465408a456c96",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "fed-piege-du-baril-donnees-avant-fomc-juillet",
            "title": "La Fed prise au piège du baril : les données avant le FOMC du 29 juillet",
            "url": "https://l0g.fr/posts/fed-piege-du-baril-donnees-avant-fomc-juillet/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : La Fed prise au piège du baril : les données avant le FOMC du 29 juillet.",
            "objectId": "article:fed-piege-du-baril-donnees-avant-fomc-juillet",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "77f5b69fbc0d5e7dc022e66a517bc1f6cd9bb9cae5bf80d1743467aed72b620d",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "82b2ade7858a9fcb",
            "date": "2026-07-23T16:18:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "fed-trapped-by-the-barrel-data-before-july-fomc",
            "title": "The Fed trapped by the barrel: the data before the 29 July FOMC",
            "url": "https://l0g.fr/en/analysis/fed-trapped-by-the-barrel-data-before-july-fomc/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The Fed trapped by the barrel: the data before the 29 July FOMC.",
            "objectId": "article:en:fed-trapped-by-the-barrel-data-before-july-fomc",
            "previousVersion": null,
            "currentVersion": "2026-07-23T16:18:00.000Z",
            "previousHash": null,
            "currentHash": "b21c72f85401f695ec107f1920cd322d354583d7460305cdd0d7f2f17acde932",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1a06224b1384bdb7",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "clarity-act-texte-analyse-impact-sectoriel",
            "title": "CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine",
            "url": "https://l0g.fr/posts/clarity-act-texte-analyse-impact-sectoriel/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : CLARITY Act, le texte au scalpel : la nouvelle architecture de la crypto américaine.",
            "objectId": "article:clarity-act-texte-analyse-impact-sectoriel",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "d7316d347d305a5a6f62617bfbe5055d378f9163dc6319f6e4af5afa5982ccc7",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "cc2af148cde277f3",
            "date": "2026-07-23T08:56:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "clarity-act-bill-text-sectoral-impact-analysis",
            "title": "The CLARITY Act under the scalpel: the new architecture of US crypto",
            "url": "https://l0g.fr/en/analysis/clarity-act-bill-text-sectoral-impact-analysis/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The CLARITY Act under the scalpel: the new architecture of US crypto.",
            "objectId": "article:en:clarity-act-bill-text-sectoral-impact-analysis",
            "previousVersion": null,
            "currentVersion": "2026-07-23T08:56:00.000Z",
            "previousHash": null,
            "currentHash": "6c6fdae17db3f250719ef3d1c2313ba66f786dda0fdeaac74caea62199b0a155",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "a8a6a56b34ba3dc0",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "title": "Who buys the bill deluge? The US Treasury's new marginal buyer",
            "url": "https://l0g.fr/en/analysis/who-buys-the-bill-deluge-us-treasury-marginal-buyer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Who buys the bill deluge? The US Treasury's new marginal buyer.",
            "objectId": "article:en:who-buys-the-bill-deluge-us-treasury-marginal-buyer",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "2440f94246daa83be902ac4d06ede2f8327506795759e267794fa7f0a29a81f9",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "fa14803116352137",
            "date": "2026-07-23T07:48:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "title": "Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain",
            "url": "https://l0g.fr/posts/qui-achete-le-deluge-de-bons-tresor-acheteur-marginal/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Qui achète le déluge de bons ? Le nouvel acheteur marginal du Trésor américain.",
            "objectId": "article:qui-achete-le-deluge-de-bons-tresor-acheteur-marginal",
            "previousVersion": null,
            "currentVersion": "2026-07-23T07:48:00.000Z",
            "previousHash": null,
            "currentHash": "cae8e66106aabc6eae6c1769af34052e91b05aa8ee6c71af150f5c82c3683951",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          }
        ]
      },
      "limitations": [
        "La frame prouve les octets et métadonnées archivés, pas la vérité économique des modèles.",
        "Les claims restent canoniques en français ; les traductions pointent vers ces preuves sans duplication."
      ],
      "frameHash": "35e753d6b3d19f92beb86e32ccdec965db4fb47202fcab63f40eeff70bd0e98d"
    },
    {
      "schemaVersion": "2",
      "frameId": "20260726T110231+0200-032d2a2ccf23-30195734712-1",
      "date": "2026-07-26",
      "observedAt": "2026-07-18T08:07:01.000Z",
      "retrievedAt": "2026-07-26T09:03:44.392Z",
      "computedAt": "2026-07-26T11:02:31+02:00",
      "gitSha": "032d2a2ccf235f693def489684edef959af84263",
      "previousFrameHash": "35e753d6b3d19f92beb86e32ccdec965db4fb47202fcab63f40eeff70bd0e98d",
      "attestation": {
        "provider": "github-sigstore",
        "reference": "https://github.com/bluetouff/l0g/actions/runs/30195734712",
        "subjects": [
          "/agents.json",
          "/openapi.json",
          "/api/v1/integrity.json"
        ]
      },
      "contemporaryHashes": [
        {
          "path": "/agents.json",
          "sha256": "5672e61a7411b45be06a481a05503909fe9778901ce096f8f5bdf5eee80cad32",
          "bytes": 7201,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/openapi.json",
          "sha256": "69352800572cad44f8ae726948d29d01f996695e31c4ff4caea8f4618b827ba6",
          "bytes": 94104,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/catalog.json",
          "sha256": "e52a26c8a8f6a637f5de18d7ed5835dfd1126cc131c77fa3aaf3ce35d838e288",
          "bytes": 1264636,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/search-index.json",
          "sha256": "f458e034dd4ed38d29e7bbbbf5bb78861d5a3a8b68316286670b1ad9af8fa3ff",
          "bytes": 3636142,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/claims.json",
          "sha256": "d34dd5a96d2da8f58d30729eea90c79e515f04625471246c4b9bd05a3ea5fdc6",
          "bytes": 702279,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/evidence-graph.json",
          "sha256": "8816f9c075adec95e5cfabdf5825d6d5e8c79de90804df7818e20b99eec9915a",
          "bytes": 649450,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/sources.json",
          "sha256": "94b1ddc52f32e24664015054b6168e036386518bd8ffe6afdc4fc9d66f66cff5",
          "bytes": 29211,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/freshness.json",
          "sha256": "67e17d4225271d5546765550e8a663a7c393e15c59fb2fb203ee154ea560e7b9",
          "bytes": 15669,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/changes.json",
          "sha256": "c97b61c79891bd66c6f074c7fe84fd8237a248b100011cd9bb6e5a823b456ea4",
          "bytes": 258656,
          "canonicalization": "integrity-manifest-v1"
        },
        {
          "path": "/api/v1/risk-diff.json",
          "sha256": "3f1b0af8f1ae6c86c6dc99e62be28b74eab2f1356ac30b003b076f3fb0517894",
          "bytes": 135480,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/risk.json",
          "sha256": "b47c4cf3ac004f4f90386292ff1afa12ec995ce4f3dc195ee024873536b1694a",
          "bytes": 17660,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/debt-risk.json",
          "sha256": "3d0b9800e9c690a1bc0d6188f8d1304d940e02680ed95980f44830330e833d2e",
          "bytes": 9479,
          "canonicalization": "canonical-json-v1"
        },
        {
          "path": "/api/v1/signals/history.json",
          "sha256": "65259ca2554bf813f6a0c16be224fb4f193abf796d7a2336cfbdf4e34dfe4d40",
          "bytes": 1409833,
          "canonicalization": "integrity-manifest-v1"
        }
      ],
      "signals": [
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:debt:2026-07-26T09:02:31.000Z:9d174075bc55",
          "sourceRecordId": null,
          "instrument": "debt",
          "seriesId": "l0g.signal.debt-stress",
          "seriesSlug": "thermometre-stress-dette",
          "name": "Thermomètre de stress de la dette l0g",
          "shortName": "Stress de la dette l0g",
          "citationName": "Thermomètre de stress de la dette l0g",
          "label": "Debt Risk Radar",
          "seriesDate": "2026-07-26T09:02:31.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-26T08:55:49.000Z",
          "retrievedAt": "2026-07-26T09:03:44.392Z",
          "computedAt": "2026-07-26T09:02:31.000Z",
          "archivedAt": null,
          "value": 55,
          "rawValue": 54.90303485391867,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null,
          "snapshotHash": "9d174075bc559da7dc724e33be280b0f9b359215a49f512f644f637efc5b2d20",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "degraded",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:energie:2026-07-26T09:02:31.000Z:6acdbf1efca2",
          "sourceRecordId": null,
          "instrument": "energie",
          "seriesId": "l0g.signal.energy-market-stress",
          "seriesSlug": "indice-tension-energie",
          "name": "Indice de tension des marchés de l’énergie l0g",
          "shortName": "Tension énergie l0g",
          "citationName": "Indice de tension des marchés de l’énergie l0g",
          "label": "Energie Monitor",
          "seriesDate": "2026-07-26T09:02:31.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-26T08:40:06.000Z",
          "retrievedAt": "2026-07-26T08:55:31.000Z",
          "computedAt": "2026-07-26T09:02:31.000Z",
          "archivedAt": null,
          "value": 47,
          "rawValue": 47,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://energie.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "6acdbf1efca2842ad6c46d04466f708d6516c03a565155e7782def583a4af123",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "official-delayed",
          "fallbackUsed": true,
          "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:eu:2026-07-26T09:02:31.000Z:5b37f213a051",
          "sourceRecordId": null,
          "instrument": "eu",
          "seriesId": "l0g.signal.euro-macro-stress",
          "seriesSlug": "barometre-stress-macro-euro",
          "name": "Baromètre de stress macro zone euro l0g",
          "shortName": "Stress macro euro l0g",
          "citationName": "Baromètre de stress macro zone euro l0g",
          "label": "EU Macro Dashboard",
          "seriesDate": "2026-07-26T09:02:31.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-26T05:43:14.000Z",
          "retrievedAt": "2026-07-26T08:55:31.000Z",
          "computedAt": "2026-07-26T09:02:31.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://euro.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:us:2026-07-26T09:02:31.000Z:48fc090f902c",
          "sourceRecordId": null,
          "instrument": "us",
          "seriesId": "l0g.signal.us-macro-stress",
          "seriesSlug": "barometre-stress-macro-us",
          "name": "Baromètre de stress macro américain l0g",
          "shortName": "Stress macro US l0g",
          "citationName": "Baromètre de stress macro américain l0g",
          "label": "US Macro Dashboard",
          "seriesDate": "2026-07-26T09:02:31.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-26T04:01:56.000Z",
          "retrievedAt": "2026-07-26T08:55:31.000Z",
          "computedAt": "2026-07-26T09:02:31.000Z",
          "archivedAt": null,
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://us.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "48fc090f902c25dc074b8cd51ab907a9d329f1f070b268d7e28fe1240b27b18c",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        },
        {
          "recordType": "observation",
          "schemaVersion": "2",
          "recordId": "obs:yen:2026-07-26T09:02:31.000Z:4c0670695a84",
          "sourceRecordId": null,
          "instrument": "yen",
          "seriesId": "l0g.signal.yen-carry-fragility",
          "seriesSlug": "thermometre-fragilite-carry-yen",
          "name": "Thermomètre de fragilité du carry yen l0g",
          "shortName": "Fragilité carry yen l0g",
          "citationName": "Thermomètre de fragilité du carry yen l0g",
          "label": "Yen Carry Monitor",
          "seriesDate": "2026-07-26T09:02:31.000Z",
          "observedAt": null,
          "sourcePublishedAt": "2026-07-26T04:16:37.000Z",
          "retrievedAt": "2026-07-26T08:55:31.000Z",
          "computedAt": "2026-07-26T09:02:31.000Z",
          "archivedAt": null,
          "value": 46,
          "rawValue": 46,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "identityVersion": "1.0.0",
          "methodologyVersion": "1.0.0",
          "methodologyVersionStatus": "versioned",
          "methodologyEffectiveFrom": "2026-07-17",
          "sourceUrl": "https://yct.l0g.fr",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "methodologyChangelogUrl": "https://l0g.fr/changelog-editorial/",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "calculatorRepo": null,
          "calculatorRevision": null,
          "snapshotHash": "4c0670695a8419a1d355ed761de1b3dbd1ee85bd5f5710cf9fa54e8cd182c625",
          "archiveFrameId": null,
          "archiveFrameHash": null,
          "appendOnlyVerified": false,
          "evidenceTier": "current-snapshot",
          "sourceStatus": "ok",
          "qualityStatus": "nominal",
          "fallbackUsed": false,
          "fallbackReason": null,
          "pointInTime": true,
          "backtestUsable": true,
          "limitations": [
            "Score normalisé par instrument, pas une probabilité.",
            "seriesDate date la publication l0g ; observedAt reste nullable si la source amont ne fournit pas sa date.",
            "Snapshot du build courant, attesté seulement après publication de la frame Black Box correspondante."
          ]
        }
      ],
      "freshness": {
        "generated": "2026-07-26T11:02:31+02:00",
        "signalFreshness": [
          {
            "key": "us",
            "label": "US Macro Dashboard",
            "source": "https://us.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/us-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-26T04:01:56.000Z",
            "retrievedAt": "2026-07-26T08:55:31.000Z",
            "lastAttemptAt": "2026-07-26T08:55:31.000Z",
            "lastSuccessAt": "2026-07-26T08:55:31.000Z",
            "computedAt": "2026-07-26T11:02:31+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-27T16:01:56.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "eu",
            "label": "EU Macro Dashboard",
            "source": "https://euro.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/euro-macro/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-26T05:43:14.000Z",
            "retrievedAt": "2026-07-26T08:55:31.000Z",
            "lastAttemptAt": "2026-07-26T08:55:31.000Z",
            "lastSuccessAt": "2026-07-26T08:55:31.000Z",
            "computedAt": "2026-07-26T11:02:31+02:00",
            "staleAfter": "PT36H",
            "expiresAt": "2026-07-27T17:43:14.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "yen",
            "label": "Yen Carry Monitor",
            "source": "https://yct.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/yen-carry/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-26T04:16:37.000Z",
            "retrievedAt": "2026-07-26T08:55:31.000Z",
            "lastAttemptAt": "2026-07-26T08:55:31.000Z",
            "lastSuccessAt": "2026-07-26T08:55:31.000Z",
            "computedAt": "2026-07-26T11:02:31+02:00",
            "staleAfter": "PT12H",
            "expiresAt": "2026-07-26T16:16:37.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "nominal",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "energie",
            "label": "Energie Monitor",
            "source": "https://energie.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/energie/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-26T08:40:06.000Z",
            "retrievedAt": "2026-07-26T08:55:31.000Z",
            "lastAttemptAt": "2026-07-26T08:55:31.000Z",
            "lastSuccessAt": "2026-07-26T08:55:31.000Z",
            "computedAt": "2026-07-26T11:02:31+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-26T14:40:06.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "official-delayed",
            "fallbackUsed": true,
            "fallbackReason": "Brent et WTI utilisent le spot quotidien EIA officiel différé.",
            "warnings": [
              "Brent/WTI : source EIA quotidienne officielle, publication différée.",
              "brent: source EIA quotidienne officielle différée, dernier point 2026-07-20 (6 j)",
              "wti: source EIA quotidienne officielle différée, dernier point 2026-07-20 (6 j)"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          },
          {
            "key": "debt",
            "label": "Debt Risk Radar",
            "source": "https://debt.l0g.fr",
            "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
            "observedAt": null,
            "sourcePublishedAt": "2026-07-26T08:55:49.000Z",
            "retrievedAt": "2026-07-26T09:03:44.392Z",
            "lastAttemptAt": "2026-07-26T09:03:44.392Z",
            "lastSuccessAt": "2026-07-26T09:03:44.392Z",
            "computedAt": "2026-07-26T11:02:31+02:00",
            "staleAfter": "PT6H",
            "expiresAt": "2026-07-26T14:55:49.000Z",
            "timelinessStatus": "fresh",
            "sourceStatus": "ok",
            "qualityStatus": "degraded",
            "fallbackUsed": false,
            "fallbackReason": null,
            "warnings": [
              "Massive Market Data: TLT: HTTP 429: {\"status\":\"ERROR\",\"request_id\":\"35e35536477db6fe1fcb9b6f002f69ea\",\"error\":\"You've exceeded the maximum requests per minute, please wait or upgrade your subscription to continue. https://massive.com/pr",
              "Massive Market Data: HYG: HTTP 429: {\"status\":\"ERROR\",\"request_id\":\"76ef2afd46a07c4bc3d566a93597873d\",\"error\":\"You've exceeded the maximum requests per minute, please wait or upgrade your subscription to continue. https://massive.com/pr",
              "Massive Market Data: LQD: HTTP 429: {\"status\":\"ERROR\",\"request_id\":\"3b8f1b920f1863db1becff31af005346\",\"error\":\"You've exceeded the maximum requests per minute, please wait or upgrade your subscription to continue. https://massive.com/pr",
              "Massive Market Data: SHY: HTTP 429: {\"status\":\"ERROR\",\"request_id\":\"8eceb34be80e81cda0616ab94a9ec4aa\",\"error\":\"You've exceeded the maximum requests per minute, please wait or upgrade your subscription to continue. https://massive.com/pr",
              "Massive Market Data: SPY: HTTP 429: {\"status\":\"ERROR\",\"request_id\":\"c72a69bb905517675d54fae93d97d799\",\"error\":\"You've exceeded the maximum requests per minute, please wait or upgrade your subscription to continue. https://massive.com/pr"
            ],
            "coverageStatus": "partial",
            "coverage": {
              "signalPresent": true,
              "observedAt": false,
              "sourcePublishedAt": true,
              "retrievedAt": true,
              "lastAttemptAt": true,
              "lastSuccessAt": true,
              "computedAt": true,
              "staleAfter": true
            },
            "missing": [
              "observedAt"
            ],
            "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
          }
        ],
        "policy": {
          "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, seriesDate pour la publication des signaux, observedAt pour la date économique amont, sourcePublishedAt pour la publication du producteur, puis computedAt/generated pour la construction du fichier.",
          "caveat": "l0g.fr n’est pas un flux temps réel strict. Une valeur best effort peut être conservée : sourceStatus, qualityStatus, fallbackUsed, lastAttemptAt et lastSuccessAt priment alors sur l’horodatage global d’assemblage.",
          "correctionPolicy": "https://l0g.fr/protocole-editorial/",
          "changelog": "https://l0g.fr/changelog-editorial/"
        }
      },
      "changes": {
        "generated": "2026-07-26T11:02:31+02:00",
        "latest": [
          {
            "id": "95fe8d445109dea2",
            "date": "2026-07-26T04:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "dix-mille-milliards-en-dormance-siu",
            "title": "Dix mille milliards en dormance",
            "url": "https://l0g.fr/posts/dix-mille-milliards-en-dormance-siu/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Dix mille milliards en dormance.",
            "objectId": "article:dix-mille-milliards-en-dormance-siu",
            "previousVersion": null,
            "currentVersion": "2026-07-26T04:55:00.000Z",
            "previousHash": null,
            "currentHash": "8244fccc0c61085a68e09066981b1102f97b38b678386ada622bf6ec186e4018",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c3b8385b4f75a592",
            "date": "2026-07-26T04:55:00.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "ten-trillion-asleep",
            "title": "Ten trillion asleep",
            "url": "https://l0g.fr/en/analysis/ten-trillion-asleep/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Ten trillion asleep.",
            "objectId": "article:en:ten-trillion-asleep",
            "previousVersion": null,
            "currentVersion": "2026-07-26T04:55:00.000Z",
            "previousHash": null,
            "currentHash": "07de38524d5b59e322c9f1a7909bd4a9aef1dbe5bac6a5a60dd25525f3473b79",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "c3de93461aa6ec93",
            "date": "2026-07-25T17:00:10.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "cash-pas-cash-coussin-liquidite-fonds-obligataires",
            "title": "Le cash qui n’est pas du cash : le coussin de liquidité caché des fonds obligataires",
            "url": "https://l0g.fr/posts/cash-pas-cash-coussin-liquidite-fonds-obligataires/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le cash qui n’est pas du cash : le coussin de liquidité caché des fonds obligataires.",
            "objectId": "article:cash-pas-cash-coussin-liquidite-fonds-obligataires",
            "previousVersion": null,
            "currentVersion": "2026-07-25T17:00:10.000Z",
            "previousHash": null,
            "currentHash": "236a067b69c20b02d2d0ed3aed46354d8e851e639c28fab0e8d1c5e39181c499",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "dd7d9f643dc0e4f6",
            "date": "2026-07-25T17:00:10.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "cash-that-is-not-cash-bond-fund-liquidity-buffer",
            "title": "The cash that is not cash: the hidden liquidity buffer in bond funds",
            "url": "https://l0g.fr/en/analysis/cash-that-is-not-cash-bond-fund-liquidity-buffer/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The cash that is not cash: the hidden liquidity buffer in bond funds.",
            "objectId": "article:en:cash-that-is-not-cash-bond-fund-liquidity-buffer",
            "previousVersion": null,
            "currentVersion": "2026-07-25T17:00:10.000Z",
            "previousHash": null,
            "currentHash": "45aff139b7afa54f17d1395e96d956ed31c3a1fb7dbb879522f5f4ea37c1c3d0",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "782c1361f3f82e48",
            "date": "2026-07-25T15:06:13.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "high-yield-holds-up-while-investment-grade-flees",
            "title": "High yield holds up while investment grade flees: what the bond market is really measuring",
            "url": "https://l0g.fr/en/analysis/high-yield-holds-up-while-investment-grade-flees/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : High yield holds up while investment grade flees: what the bond market is really measuring.",
            "objectId": "article:en:high-yield-holds-up-while-investment-grade-flees",
            "previousVersion": null,
            "currentVersion": "2026-07-25T15:06:13.000Z",
            "previousHash": null,
            "currentHash": "9a860fd4b14195fe7e835be399abd5f96615f7f4a06ad94f37873f0454fc2a0f",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "d2f9dd1647f74721",
            "date": "2026-07-25T15:06:13.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "le-high-yield-resiste-investment-grade-fuit",
            "title": "Le high yield résiste, l’investment grade fuit : ce que le marché obligataire mesure vraiment",
            "url": "https://l0g.fr/posts/le-high-yield-resiste-investment-grade-fuit/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le high yield résiste, l’investment grade fuit : ce que le marché obligataire mesure vraiment.",
            "objectId": "article:le-high-yield-resiste-investment-grade-fuit",
            "previousVersion": null,
            "currentVersion": "2026-07-25T15:06:13.000Z",
            "previousHash": null,
            "currentHash": "65c67b69d22b74bc559f206b114d24d3b6c601eedc54b741bc918e1e6ef5fd3b",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "1b37ee6136ba6531",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "kilowatt-fantome-reseau-data-center",
            "title": "Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?",
            "url": "https://l0g.fr/posts/kilowatt-fantome-reseau-data-center/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Le kilowatt fantôme : qui paie le réseau si le data center ne vient jamais ?.",
            "objectId": "article:kilowatt-fantome-reseau-data-center",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "7c0b738ae4983d23cf2d08a7eb35c80233acabd5058aa67253f600097e4a3d06",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "3a3272492216e91a",
            "date": "2026-07-25T08:39:51.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "the-ghost-kilowatt",
            "title": "The ghost kilowatt: who pays for the grid if the data center never arrives?",
            "url": "https://l0g.fr/en/analysis/the-ghost-kilowatt/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : The ghost kilowatt: who pays for the grid if the data center never arrives?.",
            "objectId": "article:en:the-ghost-kilowatt",
            "previousVersion": null,
            "currentVersion": "2026-07-25T08:39:51.000Z",
            "previousHash": null,
            "currentHash": "f45ac80e13d0552df4c3a0bf10e02deef6a69c646d2b36741995704791ce4dfa",
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "current-only"
          },
          {
            "id": "38a2b10cbe5bd291",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
            "url": "https://l0g.fr/posts/baril-appel-de-marge-liquidite-choc-petrolier/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier.",
            "objectId": "article:baril-appel-de-marge-liquidite-choc-petrolier",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "914bf236bb0ad9e6",
            "date": "2026-07-24T14:55:16.000Z",
            "type": "article-published",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "title",
              "description",
              "body",
              "evidence"
            ],
            "summary": "Publication de l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": null,
            "currentVersion": "2026-07-24T14:55:16.000Z",
            "previousHash": null,
            "currentHash": null,
            "replaces": null,
            "semanticChange": "publication",
            "correctionReason": null,
            "diffStatus": "historical-version-without-hash"
          },
          {
            "id": "754bd0dcbdf12224",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "en",
            "slug": "when-the-barrel-becomes-a-margin-call",
            "title": "When the barrel becomes a margin call: the hidden liquidity bill of the oil shock",
            "url": "https://l0g.fr/en/analysis/when-the-barrel-becomes-a-margin-call/",
            "changedFields": [
              "updatedDate",
              "body",
              "sources",
              "evidence"
            ],
            "summary": "Révision publiée pour l’analyse : When the barrel becomes a margin call: the hidden liquidity bill of the oil shock.",
            "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
            "previousVersion": "2026-07-24T14:55:16.000Z",
            "currentVersion": "2026-07-24T00:00:00.000Z",
            "previousHash": null,
            "currentHash": "f22e8bf72ddb600b5c0707e3e687e244b0a55b9c1e3c66e71c425eff613cc25c",
            "replaces": {
              "objectId": "article:en:when-the-barrel-becomes-a-margin-call",
              "version": "2026-07-24T14:55:16.000Z",
              "hash": null
            },
            "semanticChange": "evidence-update",
            "correctionReason": null,
            "diffStatus": "previous-version-known-without-hash"
          },
          {
            "id": "fbc13676581dbdc3",
            "date": "2026-07-24T00:00:00.000Z",
            "type": "article-revised",
            "contentType": "article",
            "language": "fr",
            "slug": "baril-appel-de-marge-liquidite-choc-petrolier",
            "title": "Quand le baril devient un appel de marge : la facture de liquidité cachée du choc pétrolier",
      