0fbca06d3d
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>
12 KiB
12 KiB
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 | |
|---|---|---|
| Q1–Q8 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 (⚠️)
- 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/buildpour confirmer 0 régression — attendu vert puisque aucune modification de code. - 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.
- Détails Mustache vs Go-templates Docker : les
{{ }}dedocker inspect --formatentrent 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é.