Aller au contenu

Gates CI

Les gates CI sont les vérifications bloquantes appliquées sur chaque PR et chaque push sur main. Toute PR doit les passer pour être mergée.

Workflows : .github/workflows/ci.yml, .github/workflows/release.yml, .github/workflows/scorecard.yml.


GateSourceBloquant
Public files guardgit ls-files filtrageoui
Public docs guardscripts/check-public-docs.mjsoui
Docs link checkscripts/check-doc-links.mjsoui
DCO sign-offtim-actions/dcooui
Secret scangitleaksoui
ShellCheckshellcheck sur scripts/*.shoui
Linteslint --max-warnings=0oui
Architecture boundariesscripts/check-architecture-boundaries.mjsoui
Guardian runtime hardcodescripts/check-guardian-runtime-hardcode.mjsoui
Line-countscripts/check-line-counts.mjsoui
Typechecktsc --noEmitoui
Tests unitairesvitest runoui
Tests UIVitest UI/jsdomoui
Buildnpm run buildoui
License checkscripts/check-licenses.mjsoui
SBOMcyclonedx-npmoui
OSSF Scorecardscorecard-action (hebdo)non bloquant, mesure posture

Refuse les fichiers internes dans l’index Git :

  • .input (atelier privé, gitignored)
  • .claude (config Claude Code, gitignored sauf exceptions)
  • AGENTS.md, CLAUDE.md (guides internes — exclus du dépôt public par scripts/init-public-repo.sh)
  • .agents, .codex, .gitnexus (état local)

Si un de ces fichiers apparaît dans git ls-files, le job échoue.


scripts/check-public-docs.mjs analyse tous les .md sous docs/ (+ racine README*, ROADMAP, SECURITY, CONTRIBUTING) :

  • Noms de fichier interdits : motifs AGENT-* (sauf AGENT-INSTALL), AUDITOR-*, DISPATCH-*.
  • Contenu interdit : références aux briefs de dispatch internes, aux dossiers d’anciens chantiers WIP retirés, et autres artefacts d’orchestration interne.

Pour faire passer : retirer/renommer les fichiers contrevenants, ou supprimer la mention textuelle.


scripts/check-doc-links.mjs valide les liens markdown :

  • Chaque lien markdown inline doit pointer vers un fichier existant.
  • Chaque lien avec ancre doit pointer vers une section existante dans le fichier cible.
  • Les URL externes (http://, https://, mailto:) sont ignorées.

Pour faire passer : corriger ou retirer les liens cassés. Les mentions de fichiers à venir doivent être en code simple, pas en lien actif.


Chaque commit doit avoir une ligne Signed-off-by: Nom <email> (équivalent git commit -s). Le DCO atteste que vous avez le droit de soumettre la contribution sous la licence du projet.

Pour faire passer :

  • Toujours utiliser git commit -s (créer un alias si besoin).
  • Si commit oublié : git commit --amend -s pour le dernier, ou git rebase -i HEAD~N --signoff pour plusieurs.

gitleaks/gitleaks-action scanne les commits PR pour détecter clés API, tokens, mots de passe. Les faux positifs dépôt sont gardés étroits dans .gitleaks.toml ; ne jamais y whitelister un vrai secret.


scripts/check-architecture-boundaries.mjs valide que les imports respectent les frontières définies dans ADR 0001. Toute violation (core/ qui importe adapters/, etc.) bloque la CI.


scripts/check-guardian-runtime-hardcode.mjs relit les guardian packs JSON first-party et vérifie que leurs textes longs ne sont pas recopiés dans le runtime source. Les règles, mini-rules, prompts et politiques restent portés par les packs, matérialisés dans Cortex Lite puis compilés par guardian-runtime-compiler.


scripts/check-line-counts.mjs refuse les fichiers monolithiques au-dessus de 800 lignes sauf allowlist explicite avec justification. Les artefacts générés comme dist/, coverage/ et sbom/ sont exclus.


scripts/check-licenses.mjs vérifie que toutes les dépendances utilisent des licences compatibles avec le socle de la licence open source Arka Deck. Les copyleft non autorisées (GPL, AGPL) sont refusées.


cyclonedx-npm génère un Software Bill of Materials pour la racine, l’UI et cortex-lite. npm run sbom:check valide des SBOM temporaires en CI ; npm run sbom:release écrit les SBOM de release sous sbom/, et le garde tarball exige les trois fichiers .cdx.json.


Mesure hebdomadaire (lundi) de la posture supply-chain (signature, dépendances, hygiène). Non bloquant — score affiché publiquement sur la GitHub Security tab.