Angela en CI — Quality Gate Documentation
Angela peut s'exécuter comme quality gate dans n'importe quel pipeline CI/CD, en analysant votre documentation Markdown pour détecter les problèmes structurels, les incohérences et les problèmes de cohérence — sans nécessiter lore init. Le mode draft est entièrement hors ligne (pas de clé API, pas de coût) ; le mode review est opt-in et nécessite un fournisseur IA, réservé aux vérifications de cohérence pré-release à l'échelle du corpus.
Pourquoi utiliser Angela en CI
Votre documentation casse silencieusement. Un développeur ajoute un endpoint API mais oublie de mettre à jour la section d'authentification. Un autre supprime une fonctionnalité mais laisse des exemples obsolètes dans trois fichiers différents. Un troisième écrit « voir le guide de configuration » sans jamais y faire de lien.
Angela détecte ces problèmes avant qu'ils n'atteignent la production. Contrairement aux linters qui vérifient la syntaxe, Angela comprend les relations de contenu, les références croisées et les patterns de documentation qui comptent pour les humains.
Mode Draft (recommandé pour la CI)
S'exécute entièrement hors ligne. Vérifie :
- Sections manquantes — Why/What/Alternatives sur les types stricts lore (
decision,feature,bugfix,refactor) - Conformité au guide de style — structure des titres, langages des blocs de code, formats de liens
- Cohérence inter-documents — tags partagés, clusters de scope, liens internes cassés
- Cohérence tapes VHS ↔ documentation — info uniquement, ne bloque jamais la CI
- Score de qualité par personas — types stricts uniquement
Le mode draft ne fait jamais d'appel réseau. Il analyse vos fichiers localement et se termine immédiatement.
Utiliser Angela sur un site de doc non-lore
Angela peut tourner sans risque sur n'importe quel site de doc Markdown — MkDocs, Docusaurus, Astro, Diátaxis, fait main — même si vous n'avez jamais utilisé lore init.
L'analyse se branche sur le champ type du front matter :
- Types stricts (
decision,feature,bugfix,refactor) — reçoivent le traitement lore complet : exigences What/Why/Alternatives/Impact, checks personas, notation poids fort. - Tout le reste — profil libre. Aucune exigence de sections, aucun check persona ; la notation récompense la structure, la densité et les exemples de code plutôt que les conventions lore.
Blog posts, tutoriels, guides, concept pages, landing pages et tout type personnalisé ne produiront donc pas de faux warnings. Un tutoriel bien écrit peut atteindre 95/100 (A) sur le profil libre.
Les paires de traductions (par ex. installation.md et installation.fr.md) sont détectées automatiquement — elles ne sont pas marquées comme doublons. Codes supportés : fr, en, es, de, it, pt, zh, ja, ko, ru, ar, nl, pl.
Le front matter partiel est préservé : un doc avec seulement type: decision et date: (sans status) garde son type déclaré — il n'est pas silencieusement dégradé en note.
Démarrage rapide
GitHub Actions
# .github/workflows/docs.yml
- uses: GreyCoderK/lore@v1
with:
mode: draft # hors-ligne, gratuit — pas de clé API nécessaire
path: ./docs # votre répertoire markdown
fail_on: error # ou : warning, none
GitLab CI
doc-review:
stage: test
script:
- ./scripts/angela-ci.sh --path docs --fail-on warning --install
Jenkins / Bitbucket / Tout CI
./scripts/angela-ci.sh --path docs --fail-on error --install
Comment ça marche
flowchart LR
A[Déclencheur CI] --> B[Installer lore]
B --> C[angela draft --all --path ./docs]
C --> D{Problèmes trouvés ?}
D -->|erreurs| E[EXIT 1 — Échec]
D -->|warnings seulement| F{--fail-on ?}
D -->|propre| G[EXIT 0 — Succès]
F -->|warning| E
F -->|error| G
Angela parcourt votre répertoire de documentation, analyse chaque fichier pour détecter les problèmes structurels et de contenu, puis se termine avec le code 0 (succès) ou 1 (échec) selon votre seuil.
Pas besoin de répertoire .lore/. Pas de fichiers de configuration. Il suffit de pointer vers un dossier de fichiers Markdown.
Modes
| Mode | Clé API | Coût | Ce qu'il vérifie |
|---|---|---|---|
draft |
Non | Gratuit | Structure, style, cohérence, personas |
synthesize |
Non | Gratuit | Génère automatiquement des exemples API, requêtes SQL depuis le contenu du doc (hors ligne) |
review |
Oui | ~0,01-0,05 $ | Contradictions corpus-wide, lacunes, obsolescence |
Pipeline CI en 3 étapes recommandé
flowchart LR
A[Push / PR] --> B[Étape 1 : draft]
B --> C[Étape 2 : polish --synthesize]
C --> D[Étape 3 : review]
B -.->|GRATUIT, hors ligne| B
C -.->|GRATUIT, hors ligne| C
D -.->|Coût API, optionnel| D
Les étapes 1 et 2 sont entièrement hors ligne — pas de clé API, pas de coût. L'étape 3 (review) est optionnelle et uniquement nécessaire pour les vérifications de cohérence corpus-wide (pré-release, audits périodiques).
GitHub Actions (pipeline 3 étapes)
# .github/workflows/docs.yml
name: Documentation Quality
on: [push, pull_request]
jobs:
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Étape 1 : Vérification structurelle hors ligne (gratuit)
- uses: GreyCoderK/lore@v1
with:
mode: draft
path: ./docs
fail_on: error
# Étape 2 : Génération automatique d'exemples API depuis le contenu existant (gratuit)
- run: |
for f in docs/*.md; do
lore angela polish "$(basename $f)" --synthesize --set-status reviewed || true
done
# Optionnel : polish IA sur des fichiers curés.
# `--arbitrate-rule=first` résout les sections dupliquées de manière
# déterministe en non-TTY (sinon polish refuse proprement avec exit 1).
- run: lore angela polish decision-auth.md --yes --arbitrate-rule=first
# Optionnel : borner l'empreinte disque des backups polish + polish.log + quarantaine
- run: lore doctor --prune
# Étape 3 : Revue de cohérence IA (optionnel, uniquement sur les tags)
- if: startsWith(github.ref, 'refs/tags/v')
uses: GreyCoderK/lore@v1
with:
mode: review
path: ./docs
api_key: ${{ secrets.ANTHROPIC_API_KEY }}
Docs externes pré-planifiées (sans lore init)
Angela fonctionne sur n'importe quel répertoire Markdown — votre équipe peut planifier la documentation en dehors de lore (dans un wiki, un export Confluence, un export Notion, ou un site MkDocs fait main) et bénéficier quand même de l'analyse et de l'enrichissement synthesizer d'Angela :
# Projet externe — pas de répertoire .lore/ nécessaire
lore angela draft --all --path ./external-wiki/
# Générer des exemples Postman depuis des specs API dans un arbre de docs externe
lore angela polish api-endpoints.md --synthesize --path ./swagger-docs/
En mode autonome :
- Les fichiers avec front matter YAML reçoivent l'analyse complète
- Les fichiers sans front matter reçoivent des métadonnées synthétiques (type=note)
- Le synthesizer détecte les endpoints, filtres et sections sécurité que le doc ait été créé par lore ou non
- Pas besoin de .lorerc — les valeurs par défaut s'appliquent
Mode Review (optionnel, pour les releases)
Utilise un seul appel API IA pour trouver des problèmes à l'échelle du corpus. Idéal pour les vérifications pré-release ou les revues périodiques — pas pour chaque commit.
Clé API requise. Contrairement au mode draft (gratuit, hors ligne), le mode review fait un appel API par run. Le coût dépend de la taille du corpus et du modèle :
| Modèle | Coût typique par review | Notes |
|---|---|---|
claude-haiku-4-5-20251001 |
~0,001–0,005 $ | Recommandé pour la CI — rapide, peu cher |
claude-sonnet-4-6 |
~0,01–0,05 $ | Meilleure qualité de findings |
gpt-4o-mini |
~0,001–0,005 $ | Bonne alternative |
ollama/* |
Gratuit | Auto-hébergé, pas de coût réseau |
Configurez la clé API comme secret du dépôt. Angela affiche le coût estimé avant d'appeler l'API. Le job CI n'échouera pas sur un dépassement de coût, mais il avertira si le corpus est très grand.
Avec Anthropic (Claude) — par défaut
- uses: GreyCoderK/lore@v1
if: startsWith(github.ref, 'refs/tags/v')
with:
mode: review
path: ./docs
api_key: ${{ secrets.ANTHROPIC_API_KEY }}
Avec OpenAI (GPT)
- uses: GreyCoderK/lore@v1
if: startsWith(github.ref, 'refs/tags/v')
with:
mode: review
path: ./docs
api_key: ${{ secrets.OPENAI_API_KEY }}
provider: openai
model: gpt-4o
Avec Ollama (auto-hébergé, gratuit)
Si vous exécutez Ollama sur votre runner CI (ou un service sidecar) :
services:
ollama:
image: ollama/ollama
ports:
- 11434:11434
steps:
- run: curl -s http://localhost:11434/api/pull -d '{"name":"llama3.1"}'
- uses: GreyCoderK/lore@v1
with:
mode: review
path: ./docs
provider: ollama
model: llama3.1
endpoint: http://ollama:11434
Avec toute API compatible OpenAI
Tout fournisseur exposant un endpoint compatible OpenAI — Groq, Together, Mistral, Azure OpenAI, vLLM, LM Studio — fonctionne avec provider: openai :
- uses: GreyCoderK/lore@v1
with:
mode: review
path: ./docs
api_key: ${{ secrets.GROQ_API_KEY }}
provider: openai
model: mixtral-8x7b-32768
endpoint: https://api.groq.com
| Service | Endpoint | Exemples de modèles |
|---|---|---|
| Groq | https://api.groq.com |
mixtral-8x7b-32768, llama-3.1-70b-versatile |
| Together | https://api.together.xyz |
meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo |
| Mistral | https://api.mistral.ai |
mistral-large-latest |
| Azure OpenAI | https://VOTRE.openai.azure.com |
Votre nom de déploiement |
| vLLM / LM Studio | http://localhost:8000 |
N'importe quel modèle chargé |
Options du script
Le script portable supporte les modes draft et review :
./scripts/angela-ci.sh [OPTIONS]
--path <dir> Chemin vers les docs markdown (défaut : ./docs)
--mode <mode> Mode d'analyse : draft (hors-ligne) ou review (IA) (défaut : draft)
--fail-on <level> error | warning | none (défaut : error)
--filter <regex> Regex pour filtrer les documents par nom de fichier (review uniquement)
--all Analyser tous les documents, pas d'échantillonnage 25+25 (review uniquement)
--install Installer lore automatiquement si absent du PATH
--version <ver> Version spécifique de lore (défaut : latest)
--quiet Supprimer la sortie lisible par l'humain
Exemples
# Draft (hors-ligne, gratuit) — chaque push
./scripts/angela-ci.sh --path docs --fail-on warning --install
# Review (IA) — tous les docs
./scripts/angela-ci.sh --mode review --path docs --all --install
# Review — seulement les docs de commandes
./scripts/angela-ci.sh --mode review --path docs --filter "commands/.*" --install
# Review — silencieux pour parsing de logs
./scripts/angela-ci.sh --mode review --path docs --all --quiet --install
Jenkins / Bitbucket / GitLab
Le script fonctionne dans n'importe quel système CI. Configurez les variables LORE_AI_* pour activer le mode review :
Jenkins (Jenkinsfile)
pipeline {
environment {
LORE_AI_PROVIDER = 'anthropic'
LORE_AI_API_KEY = credentials('anthropic-api-key')
LORE_AI_TIMEOUT = '120s'
}
stages {
stage('Doc Draft') {
steps {
sh './scripts/angela-ci.sh --path docs --fail-on error --install'
}
}
stage('Doc Review') {
when { buildingTag() }
steps {
sh './scripts/angela-ci.sh --mode review --path docs --all --install'
}
}
}
}
Bitbucket Pipelines
pipelines:
default:
- step:
name: Qualité Doc (hors-ligne)
script:
- ./scripts/angela-ci.sh --path docs --fail-on warning --install
tags:
'v*':
- step:
name: Revue Doc (IA)
script:
- ./scripts/angela-ci.sh --mode review --path docs --all --install
environment:
LORE_AI_PROVIDER: openai
LORE_AI_MODEL: gpt-4o
LORE_AI_API_KEY: $OPENAI_API_KEY
LORE_AI_TIMEOUT: 120s
GitLab CI
doc-draft:
stage: test
script:
- ./scripts/angela-ci.sh --path docs --fail-on warning --install
doc-review:
stage: test
rules:
- if: $CI_COMMIT_TAG =~ /^v/
variables:
LORE_AI_PROVIDER: anthropic
LORE_AI_API_KEY: $ANTHROPIC_API_KEY
LORE_AI_TIMEOUT: 120s
LORE_ANGELA_MAX_TOKENS: 8192
script:
- ./scripts/angela-ci.sh --mode review --path docs --all --install
Variables d'environnement
lore lit automatiquement les variables LORE_AI_* (via Viper auto-env). Pas besoin de fichier .lorerc en CI :
| Variable | Description | Exemple |
|---|---|---|
LORE_AI_PROVIDER |
Fournisseur IA | anthropic, openai, ollama |
LORE_AI_MODEL |
Nom du modèle | claude-haiku-4-5-20251001, gpt-4o, llama3.1 |
LORE_AI_API_KEY |
Clé API (requis pour review, sauf ollama) | sk-ant-..., sk-... |
LORE_AI_ENDPOINT |
URL endpoint custom | https://api.groq.com, http://localhost:11434 |
LORE_AI_TIMEOUT |
Timeout de requête | 120s |
LORE_ANGELA_MAX_TOKENS |
Max tokens de sortie | 8192 |
Ces variables fonctionnent dans n'importe quel système CI — GitHub Actions, GitLab, Jenkins, Bitbucket, CircleCI, etc.
Mode standalone
Angela fonctionne sur n'importe quel répertoire de fichiers Markdown — avec ou sans front matter YAML :
- Avec front matter : Analyse complète (type, tags, dates, clusters de scope)
- Sans front matter : Métadonnées synthétiques à partir du nom de fichier et de la date de modification ; les vérifications structurelles et de style fonctionnent toujours
Vous pouvez ajouter Angela à n'importe quel projet ayant un dossier docs/, que vous utilisiez lore ou non.
Architecture d'intégration
flowchart TB
subgraph "Votre pipeline CI"
A[Push / PR] --> B{GitHub ?}
B -->|Oui| C[action.yml]
B -->|Non| D[angela-ci.sh]
C --> E[lore angela draft --all --path ./docs]
D --> E
end
subgraph "Analyse Angela"
E --> F[PlainCorpusStore]
F --> G[langdetect + VHS]
F --> H[corpus signals]
F --> I[style guide]
G --> J[Sortie JSON]
H --> J
I --> J
end
J --> K{Code de sortie}
K -->|0| L[Succès]
K -->|1| M[Échec + Rapport]
Visualisation des diagrammes
Les diagrammes de cette documentation utilisent Mermaid. Voici comment les visualiser selon votre environnement :
| Environnement | Solution | Lien |
|---|---|---|
| VS Code | Extension Markdown Preview Mermaid | Installer |
| JetBrains (IntelliJ, GoLand, etc.) | Plugin Mermaid | Installer |
| En ligne | Coller le bloc dans l'éditeur en ligne | mermaid.live |
| MkDocs | Rendu automatique via pymdownx.superfences |
Déjà configuré dans ce projet |
| GitHub | Rendu natif dans les fichiers .md |
Aucune action requise |
Audience non-technique ? Si votre audience ne peut pas rendre les diagrammes Mermaid, vous pouvez les convertir en images PNG/SVG avec mermaid-cli (
mmdc) et les placer dansassets/diagrams/.