docs: align evidence pack workflow with canonical evidence lane
This commit is contained in:
@@ -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/
|
||||
|
||||
@@ -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)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 l’evidence 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 l’artifact `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 l’artifact 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 l’evidence pack
|
||||
- Les artefacts sont accessibles dans les releases ou CI
|
||||
- Les artefacts sont accessibles dans l’artifact CI `evidence-pack`
|
||||
- Le contrat réel est documenté dans `docs/evidence/evidence_pack.md` et `docs/EVIDENCE_ALIGNMENT_2026-03-11.md`
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -7,9 +7,26 @@ Un **evidence pack** est un ensemble d’artefacts 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`
|
||||
|
||||
L’artifact 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. C’est 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`.
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user