---
title: "La suite du blog : un RSS qui répond, 74 articles rapatriés, une bibliothèque par type"
subtitle: "Une session de dette : réparer le visible, sauver l'invisible, et rendre navigable tout ce qui n'est pas un article"
date: 2026-09-20
time: "23:48"
author: Synthèse VFG
publishedBy: idea
status: pub
tags: ["metaprojet", "blog", "rss", "navigation", "taxonomie", "git", "mirror", "bibliotheque", "accessibilite"]
---

## TL;DR

La migration v2 du blog était close, mais « la suite » commençait par de la
dette bien visible : le **RSS renvoyait 404** en prod, des liens `localhost`
traînaient dans des pages publiques, et le compte d'articles ne tombait juste
nulle part (384 dans le repo, 456 servis en ligne). Cette session a réparé le
visible, **sauvé l'invisible** — 74 articles n'existaient que sur le VPS, jamais
revenus dans git — et livré une **Bibliothèque** qui range enfin les ~500
fichiers markdown *non-articles* (docs, handoffs, audits, plans, corpus) par
**type** et par **filtre**. Huit commits, 78 tests verts, zéro perte.

---

## 1. Réparer le visible

Le lien RSS de la navigation pointait `/feed/rss.xml` → **404**. La cause
n'était pas les feeds (ils existaient sur disque) mais le serveur : le
catch-all de `src/server.js` résolvait les chemins contre la racine du repo,
jamais contre `public/`, et aucun mount statique ne servait `/feed/`. Un mount
`fastifyStatic` de quatre lignes, à côté de ceux de `/lexique/` et `/shared/`,
et le flux répond enfin.

Dans la foulée : les liens `http://127.0.0.1:5193` (l'outil Grimoire, local)
qui pointaient vers le vide depuis une page publique sont devenus des libellés
`(local)` non cliquables ; les pages figées (`devblog.html` au 16/06,
`guide-todos` au 30/06 affichant « 179 articles » quand il y en a 458) portent
désormais un bandeau **« Instantané du JJ/MM — données non à jour »** ; et une
ligne malformée du `.gitignore` (deux patterns collés) a été séparée.

## 2. Sauver l'invisible

Le vrai sujet était le comptage incohérent. `mirror:prod` — un script en
**lecture seule** qui rapatrie les articles de prod dans `.sandbox/` — a
tranché : la prod servait **456** articles, le repo n'en versionnait que
**384**. Différence : **74 articles publiés directement sur le VPS via l'admin
API**, jamais revenus dans git. Le modèle « local-first » du README ne
reflétait pas la réalité — la source la plus complète, c'était la prod.

Ces 74 articles ont été copiés dans `devblog/posts/` sans écraser un seul
fichier local, portant le total à **458** (les 456 de prod + 2 articles encore
locaux). Ils sont désormais dans git **et** sur GitHub **et** sur le VPS :
triple sauvegarde, rien perdu. Le frontmatter `status` — qui coexistait en
quatre graphies (`pub`, `"pub"`, `"publish"`, `published`) — a été ramené au
canon `pub`/`draft`, et `publish-article.mjs` **rejette** maintenant toute
valeur inconnue plutôt que de publier un brouillon par accident.

## 3. Rendre navigable ce qui n'est pas un article

Un blog n'est pas que ses articles. Ce dépôt contient **~500 fichiers markdown
non-articles** : 178 handoffs, 170 audits, 79 docs, 49 fichiers de corpus, des
plans, des statuts. Ils existaient dans un catalogue, mais rangés seulement par
**dossier** — et noyés sous 1000+ fichiers de tooling (`.claude`, `.sandbox`).

La refonte ajoute une dimension transversale : le **type**. Chaque fichier est
classé (article, handoff, audit, plan, statut, corpus, doc, workspace) quel que
soit son dossier, et le catalogue expose des compteurs par type. En excluant le
bruit tooling, il passe de **2163 à 994 entrées réelles**.

Au-dessus, une page **Bibliothèque** (`/bibliotheque/`) — pas rétro, sur les
tokens du design system, en dark mode, accessible (skip-link, landmarks,
`aria-pressed`) — offre des **facettes cliquables** par type, une recherche, et
des groupes par catégorie. Elle remplace « index md » dans la navigation
principale.

| Type | Fichiers |
|------|----------|
| Articles | 458 |
| Handoffs | 178 |
| Audits | 170 |
| Docs & guides | 79 |
| Corpus & récits | 49 |
| Statuts | 13 |
| Workspace | 13 |
| Plans & roadmaps | 12 |
| Autres | 22 |

## 4. Ce qui reste

Le fond de la dette est structurel et attend ses propres sessions :
**unifier les trois générateurs HTML** qui coexistent, **rendre les articles
côté serveur** (aujourd'hui un viewer JS affiche « Chargement… », mauvais pour
le SEO et les lecteurs d'écran), régénérer les feeds au moment de la
publication pour arrêter de les committer, et consolider les ~35 catégories de
dossiers. Le plan détaillé vit dans `docs/PLAN-BLOG-SUITE-2026-07.md`.

La leçon de la session : **la dette la plus dangereuse n'est pas celle qu'on
voit** (un 404 se remarque) mais celle qu'on ne voit pas — 74 articles à un
`rm -rf` du néant, sur un seul disque, parce que le chemin de publication
court-circuitait git. Le premier réflexe d'une « suite », c'est de recompter.

---

**Sources** : handoff `handoffs/2026-07-20-0950-suite-blog-rss-rapatriement-bibliotheque.md` ·
plan `docs/PLAN-BLOG-SUITE-2026-07.md` · script `scripts/mirror-prod-articles.mjs` ·
catalogue `src/md-catalog.js` · page `public/bibliotheque/`.