{
  "schema": "https://l0g.fr/openapi.json#/components/schemas/FreshnessSurface",
  "version": "1.18.0",
  "generated": "2026-10-16T23:25:18Z",
  "staleAfter": "P2D",
  "latest": [
    {
      "type": "article",
      "canonicalId": "article:msci-indonesie-flottant-risque-indices",
      "language": "fr",
      "slug": "msci-indonesie-flottant-risque-indices",
      "title": "MSCI et l’Indonésie : le prix d’un flottant opaque",
      "url": "https://l0g.fr/posts/msci-indonesie-flottant-risque-indices/",
      "date": "2026-10-16"
    },
    {
      "type": "article",
      "canonicalId": "article:msci-indonesie-flottant-risque-indices",
      "language": "en",
      "slug": "msci-indonesia-free-float-index-risk",
      "title": "MSCI and Indonesia: the cost of opaque ownership",
      "url": "https://l0g.fr/en/analysis/msci-indonesia-free-float-index-risk/",
      "date": "2026-10-16"
    },
    {
      "type": "article",
      "canonicalId": "article:tokenisation-qui-finance-weekend",
      "language": "fr",
      "slug": "tokenisation-qui-finance-weekend",
      "title": "Tokenisation : qui finance le dimanche ?",
      "url": "https://l0g.fr/posts/tokenisation-qui-finance-weekend/",
      "date": "2026-10-16"
    },
    {
      "type": "article",
      "canonicalId": "article:tokenisation-qui-finance-weekend",
      "language": "en",
      "slug": "tokenized-markets-weekend-funding",
      "title": "Tokenized markets: who funds the weekend?",
      "url": "https://l0g.fr/en/analysis/tokenized-markets-weekend-funding/",
      "date": "2026-10-16"
    },
    {
      "type": "article",
      "canonicalId": "article:ia-debouches-rentabilite-innovation",
      "language": "fr",
      "slug": "ia-debouches-rentabilite-innovation",
      "title": "L’IA à l’épreuve des débouchés",
      "url": "https://l0g.fr/posts/ia-debouches-rentabilite-innovation/",
      "date": "2026-10-16"
    },
    {
      "type": "article",
      "canonicalId": "article:ia-debouches-rentabilite-innovation",
      "language": "en",
      "slug": "ai-growth-demand-innovation-returns",
      "title": "AI’s growth engine needs a market",
      "url": "https://l0g.fr/en/analysis/ai-growth-demand-innovation-returns/",
      "date": "2026-10-16"
    },
    {
      "type": "article",
      "canonicalId": "article:credit-prive-prix-argent-a-placer",
      "language": "fr",
      "slug": "credit-prive-prix-argent-a-placer",
      "title": "Crédit privé : le prix de l’argent à placer",
      "url": "https://l0g.fr/posts/credit-prive-prix-argent-a-placer/",
      "date": "2026-10-16"
    },
    {
      "type": "article",
      "canonicalId": "article:credit-prive-prix-argent-a-placer",
      "language": "en",
      "slug": "private-credit-test-of-patience",
      "title": "Private credit’s test of patience",
      "url": "https://l0g.fr/en/analysis/private-credit-test-of-patience/",
      "date": "2026-10-16"
    },
    {
      "type": "article",
      "canonicalId": "article:ormuz-engrais-pari-cinq-navires",
      "language": "fr",
      "slug": "ormuz-engrais-pari-cinq-navires",
      "title": "Ormuz : le pari des cinq navires",
      "url": "https://l0g.fr/posts/ormuz-engrais-pari-cinq-navires/",
      "date": "2026-10-16"
    },
    {
      "type": "article",
      "canonicalId": "article:ormuz-engrais-pari-cinq-navires",
      "language": "en",
      "slug": "hormuz-fertilizer-corridor-crop-calendar",
      "title": "Hormuz: five ships and the crop calendar",
      "url": "https://l0g.fr/en/analysis/hormuz-fertilizer-corridor-crop-calendar/",
      "date": "2026-10-16"
    },
    {
      "type": "article",
      "canonicalId": "article:detroits-prix-des-jours-gagnes",
      "language": "fr",
      "slug": "detroits-prix-des-jours-gagnes",
      "title": "Détroits : le prix des jours gagnés",
      "url": "https://l0g.fr/posts/detroits-prix-des-jours-gagnes/",
      "date": "2026-10-16"
    },
    {
      "type": "article",
      "canonicalId": "article:detroits-prix-des-jours-gagnes",
      "language": "en",
      "slug": "shipping-chokepoints-cost-of-buying-time",
      "title": "Shipping chokepoints and the cost of buying time",
      "url": "https://l0g.fr/en/analysis/shipping-chokepoints-cost-of-buying-time/",
      "date": "2026-10-16"
    },
    {
      "type": "article",
      "canonicalId": "article:usdc-reserves-suivre-jeton-mica",
      "language": "fr",
      "slug": "usdc-reserves-suivre-jeton-mica",
      "title": "USDC : les réserves doivent suivre le jeton",
      "url": "https://l0g.fr/posts/usdc-reserves-suivre-jeton-mica/",
      "date": "2026-10-15"
    },
    {
      "type": "article",
      "canonicalId": "article:usdc-reserves-suivre-jeton-mica",
      "language": "en",
      "slug": "usdc-reserves-follow-token-mica",
      "title": "USDC: can the reserves follow the token?",
      "url": "https://l0g.fr/en/analysis/usdc-reserves-follow-token-mica/",
      "date": "2026-10-15"
    },
    {
      "type": "guide",
      "canonicalId": "guide:lire-le-gamma-des-dealers",
      "language": "en",
      "slug": "read-dealer-gamma",
      "title": "Reading dealer gamma: when options hedging drives the market",
      "url": "https://l0g.fr/en/guides/read-dealer-gamma/",
      "date": "2026-10-15"
    },
    {
      "type": "guide",
      "canonicalId": "guide:lire-le-rapport-jolts",
      "language": "en",
      "slug": "read-jolts-report",
      "title": "How to Read JOLTS: under the hood of the U.S. labor market",
      "url": "https://l0g.fr/en/guides/read-jolts-report/",
      "date": "2026-10-15"
    },
    {
      "type": "guide",
      "canonicalId": "guide:m2-masse-monetaire-risk-on",
      "language": "en",
      "slug": "read-m2-money-supply-risk-on",
      "title": "How to Read M2 Money Supply: liquidity signal, bad readings and risk-on narratives",
      "url": "https://l0g.fr/en/guides/read-m2-money-supply-risk-on/",
      "date": "2026-10-15"
    },
    {
      "type": "guide",
      "canonicalId": "guide:13d-vs-13g-sec",
      "language": "en",
      "slug": "read-schedule-13d-13g-sec",
      "title": "Schedule 13D and 13G: activism or passive ownership",
      "url": "https://l0g.fr/en/guides/read-schedule-13d-13g-sec/",
      "date": "2026-10-15"
    },
    {
      "type": "article",
      "canonicalId": "article:a7-banques-detour-paiements-russes",
      "language": "fr",
      "slug": "a7-banques-detour-paiements-russes",
      "title": "A7 : les banques au bout du détour russe",
      "url": "https://l0g.fr/posts/a7-banques-detour-paiements-russes/",
      "date": "2026-10-15"
    },
    {
      "type": "article",
      "canonicalId": "article:a7-banques-detour-paiements-russes",
      "language": "en",
      "slug": "a7-banks-russia-payment-detour",
      "title": "A7: the banks at the end of Russia’s payment detour",
      "url": "https://l0g.fr/en/analysis/a7-banks-russia-payment-detour/",
      "date": "2026-10-15"
    }
  ],
  "corpus": {
    "articles": 745,
    "articlesByLanguage": {
      "fr": 373,
      "en": 372
    },
    "guides": 100,
    "guidesByLanguage": {
      "fr": 50,
      "en": 50
    },
    "methodologies": 6,
    "glossary": 657,
    "primarySources": 18,
    "editorialChangelog": 15
  },
  "endpoints": [
    {
      "path": "/agents.json",
      "role": "Manifeste de découverte agent",
      "update": "à chaque build"
    },
    {
      "path": "/openapi.json",
      "role": "Contrat OpenAPI public",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/catalog.json",
      "role": "Catalogue machine complet",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/catalog.ndjson",
      "role": "Catalogue machine en NDJSON",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/articles/recent.json",
      "role": "Fenêtre bornée des publications françaises récentes",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/search-index.json",
      "role": "Index de recherche bilingue partagé",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/agent-bench.json",
      "role": "Benchmark déterministe FR/EN de l’Agent Surface et du MCP",
      "update": "à chaque build publié"
    },
    {
      "path": "/api/v1/claims.json",
      "role": "Graphe affirmation-source",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/claims.ndjson",
      "role": "Claims en NDJSON",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/evidence-graph.json",
      "role": "Evidence graph en nœuds et arêtes",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/evidence-graph.ndjson",
      "role": "Evidence graph en NDJSON",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/sources.json",
      "role": "Registre sources et hôtes cités",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/freshness.json",
      "role": "Fraîcheur et derniers contenus",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/integrity.json",
      "role": "Empreintes SHA-256 des surfaces M2M",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/toolset-manifest.json",
      "role": "Empreintes anti-dérive des tools MCP",
      "update": "à chaque changement de contrat MCP"
    },
    {
      "path": "/api/v1/changes.json",
      "role": "Changefeed machine des publications et révisions",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/changes.ndjson",
      "role": "Changefeed machine en NDJSON",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/risk-diff.json",
      "role": "Diff du risque : signaux, sources, claims, modèles et articles",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/black-box.json",
      "role": "Boîte noire point-in-time des frames de risque rejouables",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/debt-risk.json",
      "role": "Snapshot Dette US avec provenance Debt Risk Radar",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/history.ndjson",
      "role": "Journal opérationnel brut à chaque assemblage",
      "update": "toutes les 15 minutes"
    },
    {
      "path": "/api/v1/signals/current.json",
      "role": "Dernières observations point-in-time par instrument",
      "update": "à chaque build"
    },
    {
      "path": "/api/v1/signals/history.json",
      "role": "Historique fusionné avec niveau de preuve par observation",
      "update": "à chaque build, journal opérationnel et archive Black Box"
    },
    {
      "path": "/api/v1/signals/history.ndjson",
      "role": "Historique des signaux en NDJSON",
      "update": "à chaque build et archive append-only"
    },
    {
      "path": "/api/v1/signals/history.csv",
      "role": "Observations de signaux à plat pour backtest",
      "update": "à chaque build et archive append-only"
    },
    {
      "path": "/api/v1/signals/schema.json",
      "role": "Schéma des lignes historiques de signaux",
      "update": "à chaque changement de contrat"
    },
    {
      "path": "/api/v1/human-traffic.json",
      "role": "Lectures HTML filtrées agrégées sans identifiant",
      "update": "chaque jour"
    },
    {
      "path": "/llms.txt",
      "role": "Carte concise pour agents",
      "update": "à chaque build"
    },
    {
      "path": "/llms-full.txt",
      "role": "Corpus textuel étendu",
      "update": "à chaque build"
    },
    {
      "path": "/llms-full-en.txt",
      "role": "Corpus textuel anglais étendu",
      "update": "à chaque build"
    }
  ],
  "signalFreshness": [
    {
      "key": "us",
      "label": "US Macro Dashboard",
      "source": "https://us.l0g.fr",
      "methodology": "https://l0g.fr/methodologie/us-macro/",
      "observedAt": "2026-10-15T00:00:00.000Z",
      "sourcePublishedAt": "2026-10-16T04:02:40.000Z",
      "sourceCheckedAt": null,
      "retrievedAt": "2026-10-16T23:23:05.000Z",
      "lastAttemptAt": "2026-10-16T23:23:05.000Z",
      "lastSuccessAt": "2026-10-16T23:23:05.000Z",
      "computedAt": "2026-10-16T23:25:18Z",
      "staleAfter": "PT36H",
      "expiresAt": "2026-10-17T16:02:40.000Z",
      "timelinessStatus": "fresh",
      "sourceStatus": "ok",
      "qualityStatus": "nominal",
      "fallbackUsed": false,
      "fallbackReason": null,
      "warnings": [],
      "coverageStatus": "complete",
      "coverage": {
        "signalPresent": true,
        "observedAt": true,
        "sourcePublishedAt": true,
        "retrievedAt": true,
        "lastAttemptAt": true,
        "lastSuccessAt": true,
        "computedAt": true,
        "staleAfter": true
      },
      "missing": [],
      "note": "La fraîcheur est calculée par 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": "2026-10-15T00:00:00.000Z",
      "sourcePublishedAt": "2026-10-16T05:56:21.000Z",
      "sourceCheckedAt": null,
      "retrievedAt": "2026-10-16T23:23:05.000Z",
      "lastAttemptAt": "2026-10-16T23:23:05.000Z",
      "lastSuccessAt": "2026-10-16T23:23:05.000Z",
      "computedAt": "2026-10-16T23:25:18Z",
      "staleAfter": "PT36H",
      "expiresAt": "2026-10-17T17:56:21.000Z",
      "timelinessStatus": "fresh",
      "sourceStatus": "ok",
      "qualityStatus": "nominal",
      "fallbackUsed": false,
      "fallbackReason": null,
      "warnings": [],
      "coverageStatus": "complete",
      "coverage": {
        "signalPresent": true,
        "observedAt": true,
        "sourcePublishedAt": true,
        "retrievedAt": true,
        "lastAttemptAt": true,
        "lastSuccessAt": true,
        "computedAt": true,
        "staleAfter": true
      },
      "missing": [],
      "note": "La fraîcheur est calculée par 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": "2026-10-16T00:00:00.000Z",
      "sourcePublishedAt": "2026-10-16T21:19:17.000Z",
      "sourceCheckedAt": "2026-10-16T21:19:17.000Z",
      "retrievedAt": "2026-10-16T23:23:05.000Z",
      "lastAttemptAt": "2026-10-16T23:23:05.000Z",
      "lastSuccessAt": "2026-10-16T23:23:05.000Z",
      "computedAt": "2026-10-16T23:25:18Z",
      "staleAfter": "PT12H",
      "expiresAt": "2026-10-17T09:19:17.000Z",
      "timelinessStatus": "fresh",
      "sourceStatus": "ok",
      "qualityStatus": "nominal",
      "fallbackUsed": false,
      "fallbackReason": null,
      "warnings": [],
      "coverageStatus": "complete",
      "coverage": {
        "signalPresent": true,
        "observedAt": true,
        "sourcePublishedAt": true,
        "retrievedAt": true,
        "lastAttemptAt": true,
        "lastSuccessAt": true,
        "computedAt": true,
        "staleAfter": true
      },
      "missing": [],
      "note": "La fraîcheur est calculée par 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": "2026-10-16T23:00:00.000Z",
      "sourcePublishedAt": "2026-10-16T23:18:58.000Z",
      "sourceCheckedAt": null,
      "retrievedAt": "2026-10-16T23:23:05.000Z",
      "lastAttemptAt": "2026-10-16T23:23:05.000Z",
      "lastSuccessAt": "2026-10-16T23:23:05.000Z",
      "computedAt": "2026-10-16T23:25:18Z",
      "staleAfter": "PT6H",
      "expiresAt": "2026-10-17T05:18:58.000Z",
      "timelinessStatus": "fresh",
      "sourceStatus": "ok",
      "qualityStatus": "nominal",
      "fallbackUsed": false,
      "fallbackReason": null,
      "warnings": [],
      "coverageStatus": "complete",
      "coverage": {
        "signalPresent": true,
        "observedAt": true,
        "sourcePublishedAt": true,
        "retrievedAt": true,
        "lastAttemptAt": true,
        "lastSuccessAt": true,
        "computedAt": true,
        "staleAfter": true
      },
      "missing": [],
      "note": "La fraîcheur est calculée par 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": "2026-10-16T00:00:00.000Z",
      "sourcePublishedAt": "2026-10-16T23:14:19.262Z",
      "sourceCheckedAt": null,
      "retrievedAt": "2026-10-16T23:27:32.790Z",
      "lastAttemptAt": "2026-10-16T23:27:32.790Z",
      "lastSuccessAt": "2026-10-16T23:27:32.790Z",
      "computedAt": "2026-10-16T23:25:18Z",
      "staleAfter": "PT6H",
      "expiresAt": "2026-10-17T05:14:19.262Z",
      "timelinessStatus": "fresh",
      "sourceStatus": "ok",
      "qualityStatus": "official-delayed",
      "fallbackUsed": false,
      "fallbackReason": null,
      "warnings": [
        "Publication trimestrielle FRED différée, dernière observation officielle confirmée ; période d’origine conservée."
      ],
      "coverageStatus": "complete",
      "coverage": {
        "signalPresent": true,
        "observedAt": true,
        "sourcePublishedAt": true,
        "retrievedAt": true,
        "lastAttemptAt": true,
        "lastSuccessAt": true,
        "computedAt": true,
        "staleAfter": true
      },
      "missing": [],
      "note": "La fraîcheur est calculée par signal depuis la date du producteur ou, à défaut, son dernier succès. generated/updated de l’agrégat datent seulement l’assemblage."
    }
  ],
  "freshnessPolicy": {
    "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/"
  },
  "license": "CC BY 4.0",
  "attribution": "l0g.fr"
}
