8903a4b774
Le gate valide la bonne-formation JSON SEULEMENT (parse strict), mais l.27 portait un commentaire orphelin annonçant un contrôle de conformité $schema/draft que le code n'implemente jamais (branche then imprime juste le check). Nouvelle sous-classe comment-vs-code : les scripts de GATE eux-memes, jamais couverts par les sweeps docstring-vs-code (scopes aux generateurs de prod + helpers *lib/). Isolement verifie : sweep des 8 scripts ci/*.sh + lib.sh = 0 autre derive. Fix 2 volets : (1) suppression de la ligne fantome ; (2) en-tete PERIMETRE explicite (bonne-formation seule ; conformite $schema = oracle jsonschema optionnel de check_regression.sh, 17 skips par design) -> le commentaire retire devient une affirmation positive et vraie du perimetre. 0 changement de logique executable, 0 artefact rebuild, 0 gate ajoute (#5, FIX pas controle neuf), 0 chiffre saisi (#6), 0 VPS (#8). run_ci 33 PASS / 0 FAIL / 0 SKIP. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
45 lines
1.7 KiB
Bash
Executable File
45 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ============================================================================
|
|
# validate_json.sh · OTO Enterprise OS DTP
|
|
# ----------------------------------------------------------------------------
|
|
# Valide que tous les fichiers .json suivis sont bien formés (parse strict).
|
|
# Les schémas JSON (version.schema.json, projets_master.schema.json) sont le
|
|
# contrat de données Faisabilité ↔ Publiciste : un JSON cassé bloque le
|
|
# pipeline en aval → on l'attrape ici.
|
|
# PÉRIMÈTRE : bonne-formation SEULEMENT (parse). La conformité au $schema
|
|
# (validation structurelle contre le .schema.json) n'est PAS contrôlée ici —
|
|
# c'est l'oracle tiers OPTIONNEL `jsonschema` de la suite régression (cf.
|
|
# check_regression.sh, 17 skips par design quand la lib est absente).
|
|
# Dépendances : bash, git, python3. Aucun réseau requis.
|
|
# ============================================================================
|
|
set -uo pipefail
|
|
# shellcheck source=ci/lib.sh
|
|
source "$(dirname "${BASH_SOURCE[0]}")/lib.sh" || exit 3
|
|
cd_repo_root # racine du dépôt, ou ROUGE honnête si hors arbre git (cf. lib.sh)
|
|
|
|
FAIL=0
|
|
mapfile -t files < <(git ls-files '*.json')
|
|
|
|
if [[ "${#files[@]}" -eq 0 ]]; then
|
|
echo "Aucun fichier .json suivi — rien à valider."
|
|
exit 0
|
|
fi
|
|
|
|
for f in "${files[@]}"; do
|
|
if python3 -c "import json,sys; json.load(open(sys.argv[1]))" "$f" 2>/tmp/jsonerr; then
|
|
printf ' \033[32m✓\033[0m %s\n' "$f"
|
|
else
|
|
printf ' \033[31m✗\033[0m %s\n' "$f"
|
|
sed 's/^/ /' /tmp/jsonerr
|
|
FAIL=1
|
|
fi
|
|
done
|
|
|
|
echo
|
|
if [[ "$FAIL" -eq 0 ]]; then
|
|
echo -e "\033[32m✅ Tous les JSON sont bien formés.\033[0m"
|
|
else
|
|
echo -e "\033[31m❌ JSON invalide détecté.\033[0m"
|
|
fi
|
|
exit "$FAIL"
|