Files
system_update/docs/design/tache2/99-couverture-gate.md
T
gilles 0fbca06d3d docs: roadmap tâches 1.9-8 (briefs, gates de validation, designs tâche 2) + plans d'implémentation
Cartographie complète (liste_taches/coherence_taches), briefs tacheN + gates
validation_tacheN, design tâche 2 (docs/design/tache2/), specs/plans jalon 1-2
et tâche 1.9/2 (Phase 1, Phase 2, SJ-0→3). Validations consignées (1.9 , 2-8 🟡).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 19:50:25 +02:00

12 KiB
Raw Blame History

99 — Auto-évaluation de couverture du gate validation_tache2.md

Relecture case par case. = couvert ; ⚠️ = couvert avec réserve / hors périmètre design (à confirmer en implémentation). Légende des renvois : fichiers de docs/design/tache2/.


§1 Discipline & périmètre

Case État Renvoi
Aucun code de production modifié (server/client/shared/templates/configs) Seuls docs/design/tache2/** + section clôture tache2.md créés. À vérifier par git status.
Jalon 1 et jalon 2 intacts Aucun fichier de jalon touché.
Aucun autre chantier hors périmètre Hors-scope listés comme suggestions (00-synthese.md §6).
Dépôts de référence non copiés nas-ops/linux-update-dashboard cités en inspiration, pseudo-shell réécrit.

§2 Complétude — Axes

Axe État Renvoi
A — Templates APT + sémantique + profils OS + proxy 10-templates-apt.md, 60-profils-os-machine.md
B — Capture prévu/appliqué consommable Hermes 40-contrats-json.md (snapshot/diff/dédup/réduction)
C — Taxonomie erreurs + remédiation 50-erreurs.md
D — Docker scan/pull/up/down/prune + détection + JSON 20-docker.md
E — Scripts personnalisés + overrides + garde-fous 30-scripts-custom.md

§2 Complétude — Livrables §4

Livrable État Renvoi
Inventaire des templates 10 §2, 20 §2, 30 §2/§4
Contenu proposé (pseudo-shell, ===SU:XXX===) 10 §4, 20 §4, 30 §4
Schémas JSON canoniques étendus 40
Taxonomie des erreurs 50
Modèle profils OS + overrides 60
Modèle profils machine 60 §5
Modèle scripts personnalisés 30
Note de sécurité 70
Découpage en sous-jalons priorisé 80

§2 — 8 questions d'investigation

État Renvoi
Q1Q8 tranchées (MVP/alternatives/risques) 90-questions-investigation.md

§3 Cohérence & intégration

Case État Renvoi
Types JSON compatibles shared/types.ts, rétro-compatibles 40 §1–§4 (champs optionnels, payload jalon 1 valide)
Convention templates (===SU:, LC_ALL=C, sudo -S, parsable) 10/20/30
Parsing (JSON-in-shell vs TS) explicite et justifié 90 Q1, 40 §7
Couche SSH réutilisée (server/ssh/client.ts) 00 §4, 90 Q6
Frontière Hermes/MCP, réduction déterministe 70, 40 §7
Sécurité actions destructives + pas de secret 70 §1/§2
Profils OS n'invalident pas Debian/Ubuntu prod 60 §2 (fallback base)
Sous-jalons indépendamment implémentables 80

§4 Non-régression

Case État Note
pnpm check/test/build verts ⚠️ Hors périmètre design (aucun code touché) ; à exécuter par l'orchestrateur. Aucune modification de code n'a été faite.
Flux jalon 1 inchangés Extensions additives uniquement ; templates jalon 1 non modifiés.

§6 Focus Docker Compose

Case État Renvoi
Gestion par SSH, réutilise couche existante, docker context = alternative 20 §1
Stacks depuis racines déclarées composeRoots, scan limité, validation UI 20 §1/§4.1
Détection labels en complément 20 §1/§4.1
Stack détecté = candidate, actions sur enabled seulement 20 §1
scan-compose.sh.tpl (fichiers compose, ignore .git/node_modules/backup/old/archive, config --quiet) 20 §4.1
inspect-compose.sh.tpl (config --images, ps --format json, images --format json, image inspect) 20 §4.2
pull-check.sh.tpl (pull --policy always --ignore-buildable, compare ID/digest/labels, non passif) 20 §4.3, §1 tableau
apply-compose.sh.tpl (up -d --remove-orphans, recapture) 20 §4.4
prune-images.sh.tpl (safe -f, agressif -a -f --filter until=168h validé) 20 §4.5
down-compose.sh.tpl (séparé/destructif, --volumes/--rmi interdits) 20 §4.6
Flux 1→8 formalisé 20 §3
pull télécharge sans démarrer 20 §3
up -d recrée si changement, préserve volumes, down inutile 20 §3
prune -f vs -a (destructif) 20 §2/§3
Sources Docker citées 20 §1
Snapshot Docker rétrocompatible (bloc optionnel) 40 §3
Bloc snapshot Docker (stacks/services/ID/digest/labels/candidat/statut) 40 §3 (« bloc Docker minimal »)
ExecutionResult.docker (pull/up/prune/erreurs/recréés/supprimés/octets) 40 §4
Erreurs Docker structurées (10 codes) 50 §3
Réduction Hermes (lignes Docker) + log brut archivé 20 §5, 40 §7
Config machine (dockerEnabled/composeRoots/composeScanDepth/composeStacks[]) sans casser MachineView 20 §6, 40 §5
Refresh combiné apt+docker ou Docker séparé 20 §6
ActionType étendu (docker_*) + filtrage autorisation 40 §2, 20 §6
Réutilise executions/WS/rawLogPath/reportPath/statut 20 §6
UI compteur Docker séparé + détail + boutons validés 20 §6
Validation UI apply/prune agressif/down ; Hermes ne déclenche pas 20 §6, 70 §2
Secrets registry jamais lus ; erreurs nettoyées 20 §6, 70 §1

§7 Focus APT/reboot

Case État Renvoi
apt_update_analyze distinct des upgrades destructifs 10 §2, 40 §2
update + -s upgrade + -s dist-upgrade 10 §4.1
Snapshot liste paquets prévus (nom/cur/cible/origine/arch) 10 §4.1, 40 §3
Distingue upgrade vs full/dist (maj/install/remove/held) 10 §4.1, 40 §3
Simulations parsées via Inst/Conf/Remv, log brut archivé 10 §1/§4.1
Statut ok/updates_available/warning/error, warning si remove/held 10 §4.1, 40 §3
Sources APT citées 10 §1
Distingue os_family et machine_kind à l'ajout 60 §1/§6
Choix manuel OS (Debian/Ubuntu/Proxmox/RPi/autre) 60 §6
Choix manuel type (VM/physique/Proxmox/LXC/RPi/GPU-workstation) 60 §6
machine_probe détecte/corrige 60 §6
Scripts dépendent du couple OS/type 60 §5
Debian firmware vérifie contrib/non-free/non-free-firmware 60 §4
Proxmox = profil dédié 60 §2/§4
Scripts hardware/drivers/benchmark jamais par défaut, validation 60 §5
Templates APT attendus (update-analyze/upgrade/full-upgrade/autoremove/clean/reboot-check/reboot) 10 §2/§4
Politique non interactive (noninteractive, -y, confdef/confold) 10 §4.2, 50 §2
Justification confdef/confold 10 §4.2, 50 §2
Prompts traités comme risques de blocage 50 §2
Timeout inactivité/global → erreur contrôlée 50 §2
human_interaction_required prévu 50 §2
Pas seulement exit code 50 §1, 10 §4.2
dpkg-query before/after 10 §4.2
Diff backend (maj/install/remove/inchangé/versions/anomalies) 40 §4, 90 Q4
ExecutionResult.apt (planned/applied/installed/removed/held/errors/reboot) 40 §4
Rapport MD résume diff + réf log 70 §4, 40 §8
Reboot vérifié (boot_id avant/après, attente, reconnexion) 10 §4.5, 40 §4
Reboot ok si revient ET boot_id changé 10 §4.5
RebootResult (beforeBootId…status/errors) 40 §4
Délai adaptatif par machine 10 §4.5, 40 §4
Statuts d'échec reboot distingués 40 §4 (RebootResult.status)
Reboot = action validée ; Hermes ne déclenche pas 70 §2
apt_update_analyze alimente snapshot + tuile 10 §6, 20 §6
Actions via même route + table executions 20 §6, 10 §6
UI avant exécution (paquets/suppressions/held/reboot/risque) 70 §2, 40 §3 (renvoi tâche 3 pour le rendu)
UI après exécution (réussite/diff/reboot/rapport/log) 70 §4 (renvoi tâche 3)
Confirmation UI pour dist/full/autoremove/reboot 70 §2
Nouveaux champs/actions rétrocompatibles 40 §1/§2

§8 Focus post-install

Case État Renvoi
Interdit questions interactives SSH → champs formulaire 30 §1
Profils cochables dépliant leurs champs 30 §1/§3
Manifeste (id/label/description/fields/défauts/validations/preview/risk/confirmations) 30 §1/§3
Bouton désactivé si champs invalides 30 §1
Preview avec masquage secrets + signalement réseau/reboot 30 §1, 70 §1
Échec structuré si décision manquante 30 §1/§4
Profils attendus (bootstrap_root/identity_network/base_tools/network_tools/dev_git/sharing/docker_official/vm_guest_tools + optionnels) 30 §2
Champs identity_network 30 §3
Champs docker_official 30 §3
Champs sharing 30 §3
Champs vm_guest_tools 30 §3
Champs préremplis modifiables 30 §3
Exemple de manifeste 30 §3
Templates custom attendus (bootstrap/identity/install-package-groups/docker-official/sharing/vm-guest-tools) 30 §4
Sources citées 30 §4
identity_network à risque (confirmation/preview/sauvegardes) 30 §4.2, 70 §2
Résultat JSON ancien/nouveau endpoint + reconnectHost 40 §4 (PostInstallResult.networkChange), 30 §4.2
Pas de coupure sans stratégie reconnexion ; reboot via reboot_verified 30 §4.2
Webapp vérifie reconnexion + met à jour machine 30 §4.2
Erreurs réseau distinguées (6 codes) 50 §4
ExecutionResult.postInstall rétrocompatible 40 §4
Résultat liste profils/variables non sensibles/fichiers/paquets/services/reboots/erreurs 40 §4
Secrets jamais inclus 30 §5, 70 §1
Changements réseau/Docker marqués dans rapport MD 30 §5, 70 §4
Même mécanique (templates/preview/SSH/WS/executions/rapport/log) 30 §6
Valeurs réutilisables stockées (où) 30 §6 (script_variables_presets/machine_profile_state)
Hermes propose/explique, JSON réduit, pas de déclenchement risqué 30 §6, 70 §2/§3
Profils découpés en sous-jalons indépendants 80 SJ-8/SJ-9

Réserves résiduelles (⚠️)

  1. Non-régression build/tests (§4) : non exécutée dans cette mission de design (aucun code touché, par consigne). L'orchestrateur doit lancer pnpm check/test/build pour confirmer 0 régression — attendu vert puisque aucune modification de code.
  2. Rendu UI fin (§7/§8 « UI avant/après ») : le design pose les données et les exigences ; le rendu visuel exact relève de la tâche 3. Couvert au niveau contrat/exigence, pas au niveau JSX.
  3. Détails Mustache vs Go-templates Docker : les {{ }} de docker inspect --format entrent en conflit avec Mustache ; le pseudo-shell le signale (échappement) — choix de délimiteurs à figer en implémentation (SJ-4).

Aucune réserve bloquante identifiée. Verdict visé : Accepté.