[DTP-Worker 20260805_181325] Auto exec · session 20260805_181325
CI / Contraintes NON-NÉGOCIABLES (CLAUDE.md) (push) Has been cancelled
CI / Validation JSON (schémas Faisabilité) (push) Has been cancelled
CI / Qualité documentaire (liens + 4Big) (push) Has been cancelled
CI / Reproductibilité des artefacts out/ (build == commité) (push) Has been cancelled
CI / Fraîcheur matrice de régression (run == commité) (push) Has been cancelled
CI / Intégrité du câblage CI (gate agrège tout · gates statiques verrouillés) (push) Has been cancelled
CI / Intégrité des chiffres du README (valeur == artefact cité · (push) Has been cancelled
CI / Intégrité mobile-build.yml (gating portable · activation différée · (push) Has been cancelled
CI / Publiciste · parser + schéma + generator (unittest) (push) Has been cancelled
CI / RBAC · 50 rôles + schéma (unittest) (push) Has been cancelled
CI / Faisabilité · générateur 4 volets + round-trip (unittest) (push) Has been cancelled
CI / RBAC · fixtures ERPNext (Role + Custom DocPerm) (push) Has been cancelled
CI / RBAC · plan User Permission (row-level) (push) Has been cancelled
CI / RBAC · Role Profile (bundles par portail) (push) Has been cancelled
CI / RBAC · run-book d'application unifié (agrégat 3 volets) (push) Has been cancelled
CI / Faisabilité · dossier bancable trilingue FR/EN/ES (push) Has been cancelled
CI / CRM · workflow vente ERPNext (lead → CONFOTUR) (push) Has been cancelled
CI / CRM · DocType porteur OTO Dossier Vente (push) Has been cancelled
CI / CRM · barème commissions vendeurs (push) Has been cancelled
CI / CRM · Financement Bancaire (gate hypothécaire RD) (push) Has been cancelled
CI / Fiscal · e-CF DGII (Compupar) (push) Has been cancelled
CI / Frontend · Workspaces 5 portails rôle (push) Has been cancelled
CI / Legal · DocType CONFOTUR Application (push) Has been cancelled
CI / QA · Audit 5D conformité (push) Has been cancelled
CI / SEO · mots-clés trilingues + schema.org + hreflang (push) Has been cancelled
CI / Chat OTOIA · montage par portail (Custom Block) (push) Has been cancelled
CI / QA · Audit 4Big (95+/100 sur 100% deliverables) (push) Has been cancelled
CI / Démo · Scénarios (run-sheet P07 banquier / P05 client) (push) Has been cancelled
CI / QA · Matrice de régression exhaustive (Sprint 8) (push) Has been cancelled
CI / DevOps · Run-book de déploiement VPS unifié (Sprint 8) (push) Has been cancelled
CI / QA · Matrice d'acceptation / traçabilité MVP (Sprint 8) (push) Has been cancelled
CI / Mobile · config app Expo/EAS (navigation par rôle) (push) Has been cancelled
CI / PIE · manifest de dépendances (Annexe 12 · V10.1) (push) Has been cancelled
CI / E2E baseline Playwright (manuel) (push) Has been cancelled
CI / Gate qualité (agrégat) (push) Has been cancelled
CI / Contraintes NON-NÉGOCIABLES (CLAUDE.md) (push) Has been cancelled
CI / Validation JSON (schémas Faisabilité) (push) Has been cancelled
CI / Qualité documentaire (liens + 4Big) (push) Has been cancelled
CI / Reproductibilité des artefacts out/ (build == commité) (push) Has been cancelled
CI / Fraîcheur matrice de régression (run == commité) (push) Has been cancelled
CI / Intégrité du câblage CI (gate agrège tout · gates statiques verrouillés) (push) Has been cancelled
CI / Intégrité des chiffres du README (valeur == artefact cité · (push) Has been cancelled
CI / Intégrité mobile-build.yml (gating portable · activation différée · (push) Has been cancelled
CI / Publiciste · parser + schéma + generator (unittest) (push) Has been cancelled
CI / RBAC · 50 rôles + schéma (unittest) (push) Has been cancelled
CI / Faisabilité · générateur 4 volets + round-trip (unittest) (push) Has been cancelled
CI / RBAC · fixtures ERPNext (Role + Custom DocPerm) (push) Has been cancelled
CI / RBAC · plan User Permission (row-level) (push) Has been cancelled
CI / RBAC · Role Profile (bundles par portail) (push) Has been cancelled
CI / RBAC · run-book d'application unifié (agrégat 3 volets) (push) Has been cancelled
CI / Faisabilité · dossier bancable trilingue FR/EN/ES (push) Has been cancelled
CI / CRM · workflow vente ERPNext (lead → CONFOTUR) (push) Has been cancelled
CI / CRM · DocType porteur OTO Dossier Vente (push) Has been cancelled
CI / CRM · barème commissions vendeurs (push) Has been cancelled
CI / CRM · Financement Bancaire (gate hypothécaire RD) (push) Has been cancelled
CI / Fiscal · e-CF DGII (Compupar) (push) Has been cancelled
CI / Frontend · Workspaces 5 portails rôle (push) Has been cancelled
CI / Legal · DocType CONFOTUR Application (push) Has been cancelled
CI / QA · Audit 5D conformité (push) Has been cancelled
CI / SEO · mots-clés trilingues + schema.org + hreflang (push) Has been cancelled
CI / Chat OTOIA · montage par portail (Custom Block) (push) Has been cancelled
CI / QA · Audit 4Big (95+/100 sur 100% deliverables) (push) Has been cancelled
CI / Démo · Scénarios (run-sheet P07 banquier / P05 client) (push) Has been cancelled
CI / QA · Matrice de régression exhaustive (Sprint 8) (push) Has been cancelled
CI / DevOps · Run-book de déploiement VPS unifié (Sprint 8) (push) Has been cancelled
CI / QA · Matrice d'acceptation / traçabilité MVP (Sprint 8) (push) Has been cancelled
CI / Mobile · config app Expo/EAS (navigation par rôle) (push) Has been cancelled
CI / PIE · manifest de dépendances (Annexe 12 · V10.1) (push) Has been cancelled
CI / E2E baseline Playwright (manuel) (push) Has been cancelled
CI / Gate qualité (agrégat) (push) Has been cancelled
This commit is contained in:
+16
-1
@@ -181,7 +181,7 @@ puis commit.
|
||||
### `check_ci_integrity.sh`
|
||||
Prouve, en lisant `.gitea/workflows/ci.yml`, que le **câblage** du workflow tient —
|
||||
car le job `gate` est le **seul verrou de merge** : un check absent de son `needs:`
|
||||
ne bloque **rien**, même rouge. Deux invariants :
|
||||
ne bloque **rien**, même rouge. Trois invariants :
|
||||
- **INV-A** — `gate.needs` == { tous les jobs définis } − { `gate` } − { jobs manuels }
|
||||
(un job manuel = gardé par `if: … workflow_dispatch …`, ex. `e2e-baseline`,
|
||||
légitimement hors du gate push/PR car il exige un serveur live). Détecte un job
|
||||
@@ -193,6 +193,21 @@ ne bloque **rien**, même rouge. Deux invariants :
|
||||
script (lib partagée `ci/lib.sh` — jamais un job propre). Un nouveau gate statique
|
||||
**non câblé** (script mort) ou **décâblé**, ou une **lib morte** (sourcée par
|
||||
personne), casse le check.
|
||||
- **INV-C** — le workflow force le **mode UTF-8 de Python** (`env: PYTHONUTF8: "1"`
|
||||
au niveau workflow → tous les jobs). Motif : chaque générateur clôt son `build`
|
||||
par un `print("✅ …" / accents français)` vers stdout, dont l'encodage suit la
|
||||
**locale du runner**. Sur une image runner ASCII (`LC_ALL=C` sans coercition
|
||||
PEP 538, `PYTHONUTF8` non posé), ce print lève `UnicodeEncodeError` **après**
|
||||
écriture des fichiers → `check-artifacts` voit un exit non-nul et les 25 suites
|
||||
plantent : **tout le gate passe ROUGE le jour où l'image runner change**, alors
|
||||
qu'il est VERT sur le poste dev (UTF-8) — classe « le runner n'est pas ton poste »
|
||||
(sœur des sweeps hash-seed / locale-TZ / forward-compat, mais ici un **défaut
|
||||
réel présent**, pas une simple attestation). `PYTHONUTF8=1` (PEP 540) impose
|
||||
stdout/stdin/défaut-fichier en UTF-8 **partout** → 20 builds qui crashaient +
|
||||
les suites redeviennent locale-robustes (prouvé : `run_ci.sh` sous
|
||||
`LC_ALL=C` neutralisé = 33 PASS). Comme l'absence de cet `env:` est **invisible**
|
||||
sur un runner UTF-8, INV-C l'**ancre** : le retirer casse ce gate au lieu de
|
||||
dériver en silence. `run_ci.sh` **exporte la même variable** (miroir fidèle).
|
||||
|
||||
Ferme le trou laissé par les couvertures existantes (`audit_4big/registry`,
|
||||
`qa/regression/discovery`) qui ne prouvent l'appartenance au gate que des jobs de
|
||||
|
||||
@@ -148,6 +148,28 @@ while IFS= read -r script; do
|
||||
fi
|
||||
done < <(git ls-files 'ci/*.sh' | grep -vx 'ci/check_ci_integrity.sh')
|
||||
|
||||
# --- INV-C : le workflow force le mode UTF-8 de Python (indépendance locale) --
|
||||
# Chaque générateur clôt son `build` par un print(✅/accents) vers stdout ; sous
|
||||
# une locale ASCII (runner minimal : LC_ALL=C, sans coercition PEP 538), ce print
|
||||
# lève UnicodeEncodeError → `check-artifacts` ROUGE et les 25 suites plantent,
|
||||
# EN SILENCE le jour où l'image runner change (VERT aujourd'hui car UTF-8). Le
|
||||
# correctif est un `env: PYTHONUTF8: "1"` au niveau WORKFLOW (s'applique à tous
|
||||
# les jobs). Comme son absence est invisible sur un runner UTF-8, on l'ancre ici :
|
||||
# le retirer casse ce gate au lieu de dériver silencieusement. On lit l'`env:`
|
||||
# top-level (indenté 2 espaces, AVANT `jobs:` → hors du parseur de jobs).
|
||||
echo "== INV-C · le workflow force PYTHONUTF8 (I/O UTF-8 · indépendance locale runner) =="
|
||||
utf8_mode="$(awk '
|
||||
/^jobs:[[:space:]]*$/ { exit } # ne considérer que l’en-tête (avant jobs:)
|
||||
/^env:[[:space:]]*$/ { inenv=1; next }
|
||||
inenv && /^[^[:space:]]/ { inenv=0 } # fin du bloc env: (clé non indentée)
|
||||
inenv && match($0, /^[[:space:]]+PYTHONUTF8:[[:space:]]*["'\'']?1["'\'']?[[:space:]]*$/) { print "1" }
|
||||
' "$CI")"
|
||||
if [[ "$utf8_mode" == "1" ]]; then
|
||||
ok "workflow env: PYTHONUTF8=\"1\" → stdout/défaut-fichier UTF-8 sur tout runner (builds + suites locale-robustes)"
|
||||
else
|
||||
report "workflow SANS \`env: PYTHONUTF8: \"1\"\` top-level → gate locale-fragile (RED silencieux sur runner ASCII · cf. print ✅ en fin de build)"
|
||||
fi
|
||||
|
||||
echo
|
||||
if [[ "$FAIL" -eq 0 ]]; then
|
||||
echo -e "\033[32m✅ Câblage CI intègre (gate agrège tout job non-manuel · gates statiques verrouillés).\033[0m"
|
||||
|
||||
Reference in New Issue
Block a user