ADR 0008 : glossaire et scénarios, source unique pour le code, l'aide et les tests

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-02 13:45:34 +01:00
co-authored by Claude Opus 5.5
parent 463bc6f553
commit 77ca5a60ca
36 changed files with 518 additions and 1 deletions
+36
View File
@@ -0,0 +1,36 @@
#!/usr/bin/env bash
# Vérifie les fiches du glossaire (docs/glossaire/, ADR 0008) :
# en-tête avec term et english, titre identique au terme, ligne « En bref »,
# traductions anglaises uniques, chaque fiche présente dans l'index,
# liens « Voir aussi » vers des fiches existantes.
set -euo pipefail
cd "$(dirname "$0")/../docs/glossaire"
errors=0
report() {
echo "$1"
errors=$((errors + 1))
}
for f in *.md; do
[ "$f" = README.md ] && continue
[ "$(sed -n 1p "$f")" = "---" ] || report "$f : l'en-tête doit commencer par ---"
term="$(sed -n 's/^term: //p' "$f")"
english="$(sed -n 's/^english: //p' "$f")"
[ -n "$term" ] || report "$f : champ term absent"
[ -n "$english" ] || report "$f : champ english absent"
grep -qx "# $term" "$f" || report "$f : le titre doit être « # $term »"
grep -qE '^\*\*En bref\*\* : .+' "$f" || report "$f : ligne « **En bref** : » absente"
grep -qF "]($f)" README.md || report "$f : absent de l'index README.md"
while IFS= read -r link; do
[ -f "$link" ] || report "$f : lien vers une fiche inexistante ($link)"
done < <(grep -oE '\]\([^)]+\.md\)' "$f" | sed -E 's/^\]\((.*)\)$/\1/' || true)
done
duplicates="$(find . -name '*.md' ! -name README.md -exec sed -n 's/^english: //p' {} + | sort | uniq -d)"
[ -z "$duplicates" ] || report "traductions anglaises en double : $duplicates"
[ "$errors" -eq 0 ]
+25
View File
@@ -0,0 +1,25 @@
#!/usr/bin/env bash
# Vérifie la forme des scénarios d'utilisation (docs/scenarios/, ADR 0008) :
# un titre « Fonctionnalité », au moins un « Scénario », des étapes qui
# commencent par un mot-clé Gherkin français, chaque fichier dans l'index.
set -euo pipefail
cd "$(dirname "$0")/../docs/scenarios"
errors=0
report() {
echo "$1"
errors=$((errors + 1))
}
for f in *.feature.md; do
head -n1 "$f" | grep -qE '^# Fonctionnalité : .+' \
|| report "$f : la première ligne doit être « # Fonctionnalité : … »"
grep -qE '^## Scénario : .+' "$f" || report "$f : aucun « ## Scénario : … »"
while IFS= read -r step; do
report "$f : étape sans mot-clé Gherkin : $step"
done < <(grep -E '^\* ' "$f" | grep -vE '^\* (Étant donné|Quand|Alors|Et|Mais) ' || true)
grep -qF "]($f)" README.md || report "$f : absent de l'index README.md"
done
[ "$errors" -eq 0 ]