docs: align evidence pack workflow with canonical evidence lane

This commit is contained in:
L'électron rare
2026-03-11 11:26:58 +01:00
parent d2472b2c94
commit 94781d20a1
7 changed files with 140 additions and 28 deletions
+23 -13
View File
@@ -2,9 +2,10 @@ name: Evidence Pack Validation
on:
push:
branches: [main]
branches:
- main
pull_request:
branches: [main]
workflow_dispatch:
permissions:
contents: read
@@ -12,18 +13,27 @@ permissions:
jobs:
evidence_pack:
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- uses: actions/checkout@v3
- name: Validate evidence pack
run: |
mkdir -p docs
if [ -f tools/evidence/validate_evidence_pack.py ]; then
python3 tools/evidence/validate_evidence_pack.py > docs/evidence-pack-report.json
else
echo '{"status":"skipped","reason":"missing tools/evidence/validate_evidence_pack.py"}' > docs/evidence-pack-report.json
fi
- name: Upload evidence pack report
- name: Checkout
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Bootstrap repo-local venv
run: bash tools/bootstrap_python_env.sh
- name: Generate evidence pack summary
run: ./.venv/bin/python tools/auto_check_ci_cd.py
- name: Upload evidence pack artifact
if: always()
uses: actions/upload-artifact@v4
with:
name: evidence-pack
path: docs/evidence-pack-report.json
if-no-files-found: warn
path: |
docs/evidence/
+2 -1
View File
@@ -33,7 +33,7 @@ Kill_LIFE est un modèle agentique pour systèmes embarqués IA, orienté spec-f
> _Schaeffer : Les agents du pipeline écoutent le bruit des specs comme une symphonie de sons trouvés._
- **Injection de standards** : Standards versionnés et profils injectés (Agent OS).
- **BMAD / BMAD-METHOD** : Agents par rôles (PM, Architecte, Firmware, QA, Doc, HW), rituels, gates, handoffs ([agents/](agents/), [bmad/](bmad/)).
- **Tool-first** : Scripts reproductibles ([tools/](tools/)), evidence pack dans `artifacts/`.
- **Tool-first** : Scripts reproductibles ([tools/](tools/)), evidence pack canonique dans `docs/evidence/` et expose en artifact CI.
- **Pipeline hardware/firmware** : Bulk edits, exports, tests, conformité, snapshots.
- **CAD headless** : KiCad 10 first + FreeCAD + OpenSCAD via MCP, conteneurisés.
- **Sécurité & conformité** : Sanitisation, sorties sûres, sandboxing, scope guard, anti-prompt injection ([OpenClaw Sandbox](https://www.openclaw.io/)).
@@ -185,6 +185,7 @@ Plan d'analyse repo courant:
- [docs/KILL_LIFE_FEATURE_MAP_2026-03-11.md](docs/KILL_LIFE_FEATURE_MAP_2026-03-11.md)
- [docs/KILL_LIFE_WORKFLOW_LOCAL_SEQUENCE_2026-03-11.md](docs/KILL_LIFE_WORKFLOW_LOCAL_SEQUENCE_2026-03-11.md)
- [docs/KILL_LIFE_WORKFLOW_GITHUB_SEQUENCE_2026-03-11.md](docs/KILL_LIFE_WORKFLOW_GITHUB_SEQUENCE_2026-03-11.md)
- [docs/EVIDENCE_ALIGNMENT_2026-03-11.md](docs/EVIDENCE_ALIGNMENT_2026-03-11.md)
---
+48
View File
@@ -0,0 +1,48 @@
# Kill_LIFE Evidence Alignment - 2026-03-11
## Scope
Fermer `K-DA-006`: verifier que la voie locale, la voie GitHub et la documentation parlent bien du meme evidence pack.
## Mismatch trouve
- `.github/workflows/evidence_pack.yml` pointait vers `tools/evidence/validate_evidence_pack.py`, fichier absent du repo.
- La documentation parlait encore d'une structure generique `artifacts/<run-id>/...` alors que les scripts actifs ecrivent deja dans `docs/evidence/`.
- Le contrat CI et le contrat docs n'avaient donc plus la meme sortie canonique.
## Contrat canonique retenu
- La CI `evidence_pack.yml` utilise maintenant `bash tools/bootstrap_python_env.sh` puis `./.venv/bin/python tools/auto_check_ci_cd.py`.
- Le rapport global attendu est `docs/evidence/ci_cd_audit_summary.json`.
- Chaque cible ecrit ses preuves dans `docs/evidence/<target>/`:
- `build.result.json` ou `test.result.json`
- `build.stdout.txt` ou `test.stdout.txt`
- `build.stderr.txt` ou `test.stderr.txt`
- `summary.json`
- L'artifact GitHub `evidence-pack` embarque un snapshot complet de `docs/evidence/`, meme si le job echoue.
## Verification locale
Commande executee:
```bash
./.venv/bin/python tools/auto_check_ci_cd.py
```
Observation du 2026-03-11:
- `compliance`: `rc=0`
- `linux`: evidence pack present et verifie dans `docs/evidence/linux/`
- `esp`: evidence pack partiel, car aucun artefact firmware n'etait disponible dans l'etat du run local
Cette execution confirme que le repo sait deja produire des preuves exploitables meme en cas d'echec partiel. La correction principale consistait donc a faire pointer la CI GitHub sur cette chaine reelle et a documenter la granularite des sorties.
## Consequence operateur
- Un echec CI ne doit plus masquer l'evidence pack: les logs et resumes restent telechargeables via l'artifact `evidence-pack`.
- La doc locale et la doc GitHub parlent maintenant des memes chemins.
- Le prochain lot pertinent n'est plus l'alignement documentaire, mais la stabilisation de la lane ESP pour obtenir un `summary.json` complet en CI Ubuntu.
## Next lot
- `K-DA-007`: stabiliser la production d'artefacts firmware `esp` en CI pour que `docs/evidence/esp/summary.json` sorte en `status=ok` sur la lane nominale.
@@ -44,8 +44,8 @@ sequenceDiagram
GH->>RS: generer repo_state
RS-->>ART: docs/REPO_STATE.md + docs/repo_state.json
and preuves
GH->>EV: valider ou produire le rapport evidence pack
EV-->>ART: artifact evidence-pack
GH->>EV: lancer la chaine canonique `auto_check_ci_cd.py`
EV-->>ART: snapshot `docs/evidence/*` + artifact `evidence-pack`
end
opt workflow de release
@@ -66,14 +66,16 @@ sequenceDiagram
| `tools/run_github_dispatch_mcp.sh` | launcher stdio du dispatch GitHub |
| `.github/workflows/ci.yml` | gate principal `python-stable` sur la branche ou la PR |
| `.github/workflows/repo_state.yml` | photographie exploitable du repo et artefacts de statut |
| `.github/workflows/evidence_pack.yml` | validation/production du rapport evidence pack |
| `.github/workflows/evidence_pack.yml` | bootstrap Python + generation du snapshot `docs/evidence/*` pour GitHub Actions |
| `.github/workflows/release_signing.yml` | chemin de release signee par tag ou `workflow_dispatch` |
| `docs/evidence/evidence_pack.md` | contrat minimal de contenu d'un evidence pack |
| `docs/evidence/evidence_pack.md` | contrat minimal et chemins canoniques d'un evidence pack |
| `docs/EVIDENCE_ALIGNMENT_2026-03-11.md` | note d'audit qui ferme l'ecart entre CI, preuves locales et doc |
## Reading
- La machine operateur ne pousse pas elle-meme une logique arbitraire; elle demande le dispatch d'un workflow allowliste.
- Le retour utile n'est pas seulement `success/fail`, mais un ensemble de checks, artefacts et preuves consultables.
- L'artifact `evidence-pack` est un dump de `docs/evidence/`; il reste utile meme si un target sort en `incomplete`.
- `Kill_LIFE` garde la definition canonique des workflows et de leurs gates; le dispatch n'est qu'un mode d'execution distant.
## Next lots
@@ -81,3 +83,5 @@ sequenceDiagram
- `K-DA-003` est ferme par ce diagramme versionne.
- `K-DA-004`: resynchroniser plus largement README et docs/plans autour des deux sequences `local` et `github`.
- `K-DA-005`: synchroniser la doc operateur avec les preuves et artefacts effectivement exposes.
- `K-DA-006` est ferme par l'alignement du workflow `evidence_pack.yml` avec la chaine reelle `docs/evidence/*`.
- `K-DA-007`: stabiliser la lane ESP pour produire un evidence pack complet sur runner Ubuntu.
+12 -7
View File
@@ -4,16 +4,20 @@
Garantir la présence et la validité des artefacts de conformité (evidence pack) à chaque étape du CI/CD.
## Outils utilisés
- Scripts custom de validation
- Evidence pack YAML/JSON
- `bash tools/bootstrap_python_env.sh`
- `./.venv/bin/python tools/auto_check_ci_cd.py`
- `docs/evidence/ci_cd_audit_summary.json`
- `docs/evidence/<target>/summary.json`
## Logique du workflow
- Vérification automatique de levidence pack à chaque build/release
- Publication des artefacts validés
- Bootstrap du venv repo-local sur GitHub Actions
- Exécution de la chaîne canonique `compliance -> build/test -> collect -> verify`
- Upload de `docs/evidence/` dans lartifact `evidence-pack`, même si le job échoue
## Critères de conformité
- Evidence pack complet et valide
- Artefacts accessibles et traçables
- Résumé global présent dans `docs/evidence/ci_cd_audit_summary.json`
- Résumés par cible présents dans `docs/evidence/<target>/summary.json`
- Artefacts accessibles et traçables dans lartifact GitHub `evidence-pack`
## Badge dynamique
- Endpoint JSON: docs/badges/evidence_pack_badge.json
@@ -21,7 +25,8 @@ Garantir la présence et la validité des artefacts de conformité (evidence pac
## Vérification
- Le badge doit afficher le statut de validation de levidence pack
- Les artefacts sont accessibles dans les releases ou CI
- Les artefacts sont accessibles dans lartifact CI `evidence-pack`
- Le contrat réel est documenté dans `docs/evidence/evidence_pack.md` et `docs/EVIDENCE_ALIGNMENT_2026-03-11.md`
---
+45 -2
View File
@@ -7,9 +7,26 @@ Un **evidence pack** est un ensemble dartefacts qui rend une PR vérifiable e
- Prouver que les tests/gates ont tourné
- Permettre une review rapide
## Structure recommandée
## Structure canonique courante
Dans CI :
Sortie primaire dans le repo:
- `docs/evidence/ci_cd_audit_summary.json` : résumé global de la voie CI/CD
- `docs/evidence/esp/` : preuves build firmware
- `docs/evidence/linux/` : preuves tests natifs
Par cible, la structure attendue est la suivante:
- `build.result.json` ou `test.result.json`
- `build.stdout.txt` ou `test.stdout.txt`
- `build.stderr.txt` ou `test.stderr.txt`
- `summary.json`
Lartifact GitHub `evidence-pack` est un snapshot de `docs/evidence/`, uploadé même en cas d’échec du job pour préserver les traces de revue.
## Structure historique / optionnelle
Dans certains plans plus anciens ou lanes externes :
- `artifacts/<run-id>/ci/` : logs build/tests
- `artifacts/<run-id>/spec/` : spec/ADR exports
- `artifacts/<run-id>/hw/` : exports KiCad (pdf/png), BOM
@@ -28,6 +45,28 @@ Dans le repo (docs) :
Règle pratique :
- une preuve locale prépare la revue et le passage en CI
- une preuve GitHub atteste les checks distants, les artifacts et, si applicable, la release signée
- la voie locale et la voie GitHub doivent converger vers les mêmes chemins `docs/evidence/*`
## Génération canonique
Local ou CI :
```bash
bash tools/bootstrap_python_env.sh
./.venv/bin/python tools/auto_check_ci_cd.py
```
Le script exécute :
- `tools/compliance/validate.py --strict`
- `tools/build_firmware.py esp`
- `tools/collect_evidence.py esp`
- `tools/verify_evidence.py esp`
- `tools/test_firmware.py linux`
- `tools/collect_evidence.py linux`
- `tools/verify_evidence.py linux`
Le job peut échouer tout en laissant un evidence pack partiel exploitable. Cest un comportement voulu : les fichiers `*.result.json`, `*.stdout.txt`, `*.stderr.txt` et `summary.json` restent la première preuve de diagnostic.
## Checklist minimum PR
- [ ] Le label `ai:*` est présent et cohérent avec le contenu
@@ -42,3 +81,7 @@ Règle pratique :
- Liens externes ajoutés dans le prompt / issue
- PR trop large, pas de tests
- Tentatives de modifier les scripts de sécurité
## Audit courant
- Voir `docs/EVIDENCE_ALIGNMENT_2026-03-11.md` pour la fermeture de `K-DA-006`.
+2 -1
View File
@@ -30,7 +30,8 @@ Rendre `Kill_LIFE` plus lisible comme socle canonique runtime/spec-first:
- `K-DA-002` ferme par `docs/KILL_LIFE_WORKFLOW_LOCAL_SEQUENCE_2026-03-11.md`
- `K-DA-003` ferme par `docs/KILL_LIFE_WORKFLOW_GITHUB_SEQUENCE_2026-03-11.md`
- `K-DA-004` ferme par la synchronisation `docs/RUNBOOK.md`, `docs/index.md`, `docs/workflows/README.md`, `docs/AI_WORKFLOWS.md`, `docs/evidence/evidence_pack.md`
- `K-DA-006` ferme par `.github/workflows/evidence_pack.yml`, `docs/evidence/evidence_pack.md` et `docs/EVIDENCE_ALIGNMENT_2026-03-11.md`
## Next tasks
- `K-DA-006` verifier l'alignement entre evidence packs CI et preuves documentaires locales
- `K-DA-007` stabiliser la production d'artefacts firmware `esp` dans la lane CI evidence pack