epic(wiki-quality): Fiabilisation du pipeline ingest/consolidate — linter mécanique, citations vérifiées, glossaire versionné, agents modulaires
Provenance : ticket adapté depuis
fyl-guidelines#7(généralisé pour le template, purgé de toute spécificité métier d'un fork particulier).
Contexte
Ce README documente déjà, dans sa table de compromis, plusieurs limites connues du pattern : "Hallucinations baked in — Bad info propagates", avec pour seule mitigation actuelle un "lint hebdomadaire, vérification de provenance, revue manuelle phase 1" — donc rien de mécanique. docs/llm-wiki-STRUCTURE_MAP.md documente aussi une limite de scalabilité à ~400 pages avant approche hybride. Et la règle "Citation obligatoire" mise en avant par ce template repose entièrement sur le respect, par l'agent ingest, d'une instruction en langage naturel — sans aucune vérification mécanique entre la rédaction d'une page et sa publication dans wiki/.
Ces limites ont été creusées en profondeur sur un fork de production de ce template, où elles se sont matérialisées en incidents concrets (contenu inventé sans source, doublons de terminologie métier, dérive du fichier log.md, agent de consolidation monolithique en échec de couverture). Cet EPIC porte, sous forme générique et réutilisable par tout fork, les mécanismes de fiabilisation qui en résultent — pour que chaque projet héritant de ce template bénéficie de garde-fous mécaniques par défaut plutôt que de devoir les redécouvrir indépendamment.
Objectif de l'EPIC
Faire passer le pipeline ingest/consolidate d'une discipline purement déclarative (documentée dans les guides, appliquée "au mérite" par l'agent LLM) à des contrôles mécaniques par défaut : linter structurel, ancrage aux sources vérifié (pas juste cité), glossaire de concepts avec statuts de provenance et dédoublonnage, journal borné, et agents de consolidation à responsabilité unique.
Sous-issues
-
#4 (closed) — feat(wiki-lint): Linter mécanique pour wiki/ (frontmatter, wikilinks, orphelins, chemins raw/) -
#5 — chore(wiki-lint): Porte bloquante (hook post-ingestion / CI) + git init sur wiki/raw/ -
#6 — feat(wiki-ingest): Durcir la citation obligatoire — pipeline de citations vérifiées -
#7 — feat(wiki-ingest): Agent fidelity-checker — vérification par décomposition en affirmations atomiques -
#8 — feat(wiki-glossary): Hook optionnel d'extraction de glossaire depuis des sources structurées -
#9 — feat(wiki-glossary): Workflow de dédoublonnage (chaîne + embeddings) pour concepts proposés -
#10 (closed) — refactor(wiki-log): Fragmentation de log.md en fichiers journaliers -
#11 — refactor(agents): Découpage de consolidateur-wiki en sous-agents à responsabilité unique -
#12 — chore(wiki-scale): Seuil d'alerte de scalabilité + plan de découpage multi-wiki
Contrainte transverse
Toutes ces sous-issues doivent rester génériques et pilotées par wiki.config.json — aucune ne doit introduire de dépendance à la structure ou au domaine métier d'un fork particulier. C'est la même contrainte que le reste du template : "les agents sont génériques, lisent votre wiki.config.json, s'adaptent".