Skip to content
MCP ThesaurusMCP Thesaurus

l0g fr Risk Intelligence

CommunityIncomplete39/100Claim

streamable-httpupdated 1mo ago

Journal statique (Astro 7 + Tailwind v4), édité en Markdown/MDX, versionné sur GitHub, déployé en pull-based sur un serveur Debian/Apache qui ne sert que du HTML. Infographies locales, recherche Pagefind, RSS, sitemap, aucun tracker.

SourceWebsite

What can you do with l0g fr Risk Intelligence?

l0g.fr

Journal statique (Astro 7 + Tailwind v4), édité en Markdown/MDX, versionné sur GitHub, déployé en pull-based sur un serveur Debian/Apache qui ne sert que du HTML. Infographies locales, recherche Pagefind, RSS, sitemap, aucun tracker.

Pour publier (articles, pages avec graphes, colonne de droite), voir le guide pas Ă  pas : docs/GUIDE-CONTENU.md.

Jouer en local

npm install
npm run dev          # http://localhost:4321

Aperçu d'un build de production (nécessaire pour tester la recherche Pagefind) :

npm run build        # astro build + indexation pagefind
npm run preview

Surfaces publiques

l0g publie aussi des surfaces lisibles par machine, utilisées par les agents IA et par les dashboards :

  • /agents.json : manifeste de dĂ©couverte pour agents.
  • /openapi.json : contrat OpenAPI 3.1 de l'API publique.
  • /api/v1/risk-diff.json : diff du risque sur 1, 7 et 30 jours (signaux, sources, claims, modĂšles, articles et confiance).
  • /api/v1/black-box.json : frames point-in-time hashĂ©es pour rejouer l'Ă©tat public du risque sans reconstruction rĂ©troactive.
  • /api/v1/risk.json : signaux de risque normalisĂ©s par instrument.
  • /api/v1/debt-risk.json : snapshot canonique Dette US repris de Debt Risk Radar latest.json, avec provenance, buckets et couverture lorsque disponible.
  • /api/v1/signals/history.* : historique point-in-time pour backtests et replay sans look-ahead bias.
  • /api/v1/signals/{slug}/chart.svg : graphique autonome 1200 × 630 d'une sĂ©rie nommĂ©e, avec source et attribution CC BY 4.0 intĂ©grĂ©es.
  • /ressources-journalistes/ et /en/press-resources/ : graphiques, exports, code d'intĂ©gration, citations recommandĂ©es et limites de rĂ©utilisation.
  • /api/mcp/compact : façade MCP recommandĂ©e Ă  six outils, avec dĂ©couverte, recherche, documents, preuves, research packs et get_risk_state, produit principal pour l’état courant, le diff, l’historique et le replay.
  • /api/mcp : surface MCP complĂšte en lecture seule, conservĂ©e pour compatibilitĂ© et usages experts autour d'Agent Surface, Risk Diff, Black Box, claims, sources, intĂ©gritĂ© et changefeed.
  • /api/v1/toolset-manifest.json : versions et empreintes anti-dĂ©rive des contrats d'outils MCP complet et compact.
  • /api/v1/human-traffic.json : GET HTML humains agrĂ©gĂ©s par jour, page et domaine rĂ©fĂ©rent, sans identifiant persistant et avec seuil k=5.
  • /llms.txt et /llms-full.txt : cartes textuelles pour agents et RAG.

Les détails de calcul et les limites de modÚle sont dans docs/MODELES-RISQUE.md et dans /methodologie/.

Outil interne de revue des claims

L'UI de revue humaine des assertions (tooling d’admin) est volontairement isolĂ©e du site public et du MCP. Elle n'est pas exposĂ©e publiquement :

  • serveur local: 127.0.0.1:4317
  • endpoint principal: http://127.0.0.1:4317/

Lancement :

node scripts/review-claims.mjs

Le mode commit reste strictement en terminal :

node scripts/review-claims.mjs --commit [--dry-run] [--push] --message "..." 

Détails sécurité cÎté local :

  • seul localhost est acceptĂ©,
  • toutes les mutations API (/api/review, /api/remove) exigent JSON + token anti-CSRF propre Ă  la session (x-review-token),
  • validation de payload (longueurs/champs),
  • anti-spam local par fenĂȘtre de temps sur les routes de mutation,
  • commit Git en mode interactif terminal uniquement avec confirmation explicite CONFIRMER.

Le MCP public et les endpoints de production ne sont pas affectés par ces options.

Dépannage rapide

En cas d’erreur dans l’UI de revue :

  1. RequĂȘte rejetĂ©e avec Token de sĂ©curitĂ© manquant ou invalide

    • RafraĂźchis la page (Cmd/Ctrl + R) puis rejoue l’action.
    • Si ça persiste, arrĂȘte puis relance le service :
      • Ctrl+C dans le terminal qui a lancĂ© node scripts/review-claims.mjs
      • relance node scripts/review-claims.mjs
    • Evite d’avoir plusieurs tabs de cette UI ouvertes.
  2. Erreur Method not allowed / 405

    • VĂ©rifie de ne pas appeler les endpoints de maniĂšre manuelle hors UI.
    • Les routes mutantes attendent uniquement POST avec JSON.
  3. Erreur Content-Type invalide: application/json requis

    • C’est normal si une requĂȘte n’envoie pas content-type: application/json.
    • L’UI interne envoie bien ce header.
  4. Erreur de dĂ©bit (Trop de requĂȘtes)

    • Attends quelques secondes puis reteste ; la limite locale est 30 requĂȘtes / minute.
    • Cela protĂšge le endpoint admin local contre le spam.
  5. Erreur RequĂȘte trop volumineuse / champs trop longs

    • RĂ©duis la taille du payload dans le formulaire (note, preuve, localisateur).
    • Le message de commit reste inchangĂ© : il s’agit d’un guard local par design.

Checklist opérationnelle de maintenance

  • Avant de modifier ce flux local :
    • vĂ©rifier qu’aucune donnĂ©e sensible de production n’est prĂ©sente sur le poste (workflow git local propre),
    • arrĂȘter le serveur review existant (Ctrl+C) avant de relancer la commande,
    • dĂ©marrer avec node scripts/review-claims.mjs,
    • valider une review test puis vĂ©rifier la sortie JSON du serveur (/api/state).
  • En cas de hardening ou de changement de format de review :
    • relancer un git status --short,
    • exĂ©cuter node scripts/review-claims.mjs --commit --dry-run --message "...",
    • vĂ©rifier le diff affichĂ© n’éditera que src/config/claim-reviews.json,
    • exĂ©cuter le commit --dry-run rĂ©el avec CONFIRMER uniquement si le diff est conforme.
  • AprĂšs mise Ă  jour :
    • redĂ©marrer le serveur review local,
    • conserver la trace des Ă©vĂ©nements sĂ©curitĂ© rĂ©cents si nĂ©cessaire :
      • curl -s http://127.0.0.1:4317/api/security-stats

ModĂšles de risque

Deux corrections de modÚle sont maintenant reflétées dans les surfaces l0g :

  • Debt Risk Radar : les projections CBO restent isolĂ©es comme vulnĂ©rabilitĂ© structurelle. Le stress courant exclut CBO et impute les familles courantes absentes Ă  50, au lieu de renormaliser tout le score sur les seules sources disponibles. Le prochain snapshot gĂ©nĂ©rĂ© depuis latest.json expose score.coverage.
  • US Macro Dashboard : le moteur ne retient plus mĂ©caniquement le signal le plus Ă©levĂ© entre z-score, drift et momentum. Il combine les composantes par moyenne pondĂ©rĂ©e et pĂ©nalise les sĂ©ries qui alertent trop souvent hors fenĂȘtre de rĂ©cession NBER.

AprÚs modification d'un moteur amont, régénérer les artefacts l0g avec npm run risk:update, puis npm run test:risk-snapshot, npm run test:agent-surface et npm run build.

Écrire un article

Créer un fichier dans src/content/posts/, en .md (texte) ou .mdx (texte + composants). Frontmatter :

---
title: "Titre de l'article"
description: "Résumé court (liste + SEO + OG)."
pubDate: 2026-06-08
tags: ["macro", "crypto"]
draft: false        # true = non publié
---

L'URL est dĂ©rivĂ©e du nom de fichier : mon-article.md → /posts/mon-article/.

Ajouter une infographie

Les visuels publiĂ©s doivent ĂȘtre locaux : SVG inline dans un fichier .mdx, composant Astro interne ou fichier placĂ© dans public/infographies/.

![Description accessible du graphique](/infographies/mon-graphique.svg)

Les scripts, iframes, images et polices chargés depuis un domaine tiers sont interdits. Le build de sécurité contrÎle cette promesse.

Toute balise <img> doit déclarer ses dimensions intrinsÚques width et height, ainsi que loading="lazy" et decoding="async". L'audit de performance bloque une régression susceptible de provoquer du CLS.

Déploiement (vue d'ensemble)

Politique CI frugale

  • Aucun workflow GitHub Actions n'est planifiĂ© par cron.
  • Le build attestĂ© s'exĂ©cute sur un changement de main qui affecte le site, ou Ă  la demande. Les changements limitĂ©s aux documents internes et aux workflows sans effet sur le site ne republient pas built.
  • CodeQL conserve la suite security-extended sur les changements de code et les pull requests, avec annulation des analyses devenues obsolĂštes. Les changements purement Ă©ditoriaux ou statiques sont exclus.
  • Une modification de la chaĂźne risque valide automatiquement ses contrats locaux. Le contrĂŽle de bout en bout de la production s'exĂ©cute ensuite Ă  la demande, aprĂšs activation de la rĂ©vision serveur : un push ne peut donc plus ĂȘtre dĂ©clarĂ© en Ă©chec uniquement parce que la production sert encore la rĂ©vision prĂ©cĂ©dente. Le timer serveur l0g-risk.timer, configurĂ© toutes les 15 minutes, reste le mĂ©canisme de production des agrĂ©gats.
  • npm run test:ci-policy bloque la rĂ©introduction silencieuse d'un cron et vĂ©rifie les principaux garde-fous de coĂ»t et de sĂ©curitĂ©.

Migration attestée terminée et vérifiée le 21 juillet 2026

  • Le workflow CI publie dans built uniquement une enveloppe de release composĂ©e de l'archive statique, du SHA-256, du bundle Sigstore et des coordonnĂ©es du commit source. Ces coordonnĂ©es sont incluses dans l'archive attestĂ©e et dupliquĂ©es Ă  la racine de built; le dĂ©ployeur exige leur Ă©galitĂ© octet par octet avant toute bascule.
  • Le serveur active exclusivement l'archive dont le checksum, l'attestation, le workflow signataire, la ref et le commit source ont Ă©tĂ© vĂ©rifiĂ©s.
  • L'ancien arbre statique de compatibilitĂ© a Ă©tĂ© retirĂ© aprĂšs vĂ©rification en production des marqueurs .last_source_sha et .last_built_sha.

L'index des contrats, runbooks et versions maintenues se trouve dans docs/README.md.

  1. git push sur main.
  2. GitHub Actions construit dist/, crée une archive déterministe de toute la sortie, puis l'atteste avec GitHub OIDC et Sigstore.
  3. La branche built contient uniquement l'archive, son SHA-256, le bundle d'attestation et les coordonnées du commit source de main.
  4. Le timer systemd poll built toutes les 2 min. Avant toute bascule, il exige que le clone corresponde au HEAD distant de built, que le SHA source corresponde au HEAD distant de main, et que gh attestation verify confirme l'archive, le workflow signataire, la ref et le commit source.
  5. L'archive est contrÎlée contre les traversées de chemin et les liens, extraite dans une release isolée, puis le symlink servi par Apache est basculé atomiquement.

Le déploiement statique n'exécute aucune toolchain Node, ne build rien et n'ouvre aucun port entrant. Le serveur ne possÚde aucun token GitHub permanent.

Mise en place serveur (une fois)

# prérequis de vérification
git --version
gh --version
gh attestation verify --help >/dev/null

# utilisateur dédié
sudo useradd --system --create-home --shell /usr/sbin/nologin l0gdeploy
sudo mkdir -p /var/www/html/l0g && sudo chown l0gdeploy:l0gdeploy /var/www/html/l0g

# installation initiale des unités
sudo install -m 0755 deploy/deploy.sh /usr/local/bin/l0g-deploy.sh
sudo install -m 0644 deploy/l0g-deploy.service /etc/systemd/system/
sudo install -m 0644 deploy/l0g-deploy.timer /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now l0g-deploy.timer
sudo systemctl start l0g-deploy.service

# Apache
sudo a2enmod ssl headers deflate expires rewrite auth_basic authn_file
sudo apt-get install apache2-utils
sudo htpasswd -cB /etc/apache2/l0g-stats.htpasswd bluetouff
sudo chown root:www-data /etc/apache2/l0g-stats.htpasswd
sudo chmod 0640 /etc/apache2/l0g-stats.htpasswd
# Agrégat quotidien des GET HTML humains, à installer avant le vhost qui publie son JSON
sudo deploy/install-human-traffic.sh
sudo cp deploy/l0g.fr.apache.conf /etc/apache2/sites-available/
sudo a2ensite l0g.fr.apache.conf
sudo certbot --apache -d l0g.fr -d www.l0g.fr   # ou certonly puis reload
sudo systemctl reload apache2

Pour migrer un serveur qui possÚde déjà l'ancien timer, utiliser plutÎt le script transactionnel. Il sauvegarde le worker et les unités, vérifie le premier déploiement attesté et restaure automatiquement l'ancien worker, les unités, le symlink courant et les marqueurs si l'activation échoue :

sudo deploy/activate-worker.sh

Si la version Debian de gh ne fournit pas attestation verify, suivre le bloc d'installation depuis le dépÎt officiel GitHub dans docs/MCP-RELEASE.md. Tant que l'archive attestée ou l'outil de vérification manque, le script refuse la release et conserve le symlink courant.

ContrÎles aprÚs le premier déploiement attesté :

sudo systemctl start l0g-deploy.service
sudo systemctl status l0g-deploy.service l0g-deploy.timer --no-pager
sudo journalctl -u l0g-deploy.service -n 100 --no-pager
cat /var/www/html/l0g/.last_source_sha
cat /var/www/html/l0g/.last_built_sha
readlink -f /var/www/html/l0g/current

Mises Ă  jour sans y penser

  • DĂ©pendances : activer Renovate sur le dĂ©pĂŽt. renovate.json fusionne automatiquement patch/minor quand la CI est verte. Le preset helpers:pinGitHubActionDigests conserve toutes les Actions sur des SHA immuables et ouvre les mises Ă  jour de digest. Les majeures restent en PR manuelle. Un build cassĂ© ou une provenance incohĂ©rente n'atteint jamais la prod : la release courante continue de servir.
  • OS / Apache : unattended-upgrades cĂŽtĂ© Debian.

Sécurité, en bref

  • Sortie 100% statique, pas de runtime, pas de base de donnĂ©es.
  • GitHub ne dĂ©tient aucune clĂ© d'accĂšs au serveur ; le serveur ne fait que du HTTPS sortant.
  • La branche built n'est pas une autoritĂ© seule : son archive doit ĂȘtre attestĂ©e par .github/workflows/build.yml et provenir du HEAD courant de main au moment de l'activation. Cette vĂ©rification est le contrat du nouveau dĂ©ployeur ; l'Ă©tat transitoire du serveur est documentĂ© plus haut.
  • CSP stricte (voir deploy/l0g.fr.apache.conf), HSTS, en-tĂȘtes durcis.
  • UnitĂ© de dĂ©ploiement systemd sandboxĂ©e.

Licences et citation

  • code, schĂ©mas machine, scripts, tests, workflows et dĂ©ploiement : MIT ;
  • textes, donnĂ©es et artefacts Ă©ditoriaux : CC BY 4.0 ;
  • mĂ©tadonnĂ©es de citation : CITATION.cff ;
  • release stable du protocole : releases/l0g-editorial-protocol-1.0.0/.

Le fichier LICENSE définit précisément la portée et renvoie aux deux textes juridiques complets dans LICENSES/.

Ajouter une UI d'édition plus tard (optionnel)

Le site est en Ă©dition « git-pur » par choix de sĂ©curitĂ©. Pour ajouter une UI type CMS sans base de donnĂ©es, le plus propre avec Astro est Keystatic (git-based, schĂ©mas TypeScript). Cela rĂ©introduit toutefois une route /admin et un flux OAuth GitHub Ă  autoriser dans la CSP — Ă  peser contre le modĂšle « zĂ©ro runtime » actuel.