diff --git a/plans/PhaseB-user-checklist.md b/plans/PhaseB-user-checklist.md index d02564d..c837dd4 100644 --- a/plans/PhaseB-user-checklist.md +++ b/plans/PhaseB-user-checklist.md @@ -418,10 +418,11 @@ baseline Windows (entro ±20%). --- -## Passo 8 — Stabilità ≥1 settimana (gate per B8) +## Passo 8 — Stabilità ≥1 settimana **Obiettivo**: verificare ≥1 settimana di esercizio Linux senza -incidenti critici prima di dismettere l'host Windows. +incidenti critici. (NB: non è più gate per una dismissione Windows — +vedi Passo 9: host Windows mantenuto in permanenza.) - [ ] Esercizio normale per ≥7 giorni con runner Linux primario. - [ ] Verifica giornaliera (bastano 2 minuti): @@ -436,12 +437,16 @@ incidenti critici prima di dismettere l'host Windows. --- -## Passo 9 — Decommissioning host Windows (B8, opzionale) +## Passo 9 — ~~Decommissioning host Windows~~ — ANNULLATO -> ⚠️ Procedere solo dopo Passo 8 `[x]`. L'host Windows va lasciato -> spento ma intatto per ≥1 mese come rollback. +> 🚫 **VINCOLO CATEGORICO: l'host Windows NON va dismesso.** Resta un +> target supportato di prima classe in permanenza (run dual-host +> Win+Linux), non solo rollback. Niente `shutdown` definitivo, niente +> riallocazione hardware che tolga la capacità Windows. Questo step è +> mantenuto solo come record storico. -- [ ] Backup finale di `F:\CI\` su archivio esterno: +- [ ] (Facoltativo, igiene) Backup periodico di `F:\CI\` su archivio + esterno: ```powershell $stamp = Get-Date -Format 'yyyyMMdd' @@ -450,18 +455,10 @@ incidenti critici prima di dismettere l'host Windows. Get-FileHash $archive -Algorithm SHA256 | Tee-Object "$archive.sha256" ``` -- [ ] Verifica integrità (estrazione di prova in tmp): - - ```powershell - $test = "$env:TEMP\ci-restore-test" - & 'C:\Program Files\Git\usr\bin\tar.exe' -tf $archive | Select-Object -First 20 - ``` - -- [ ] Spegnere host Windows (`shutdown /s /t 0`). -- [ ] Lasciare hardware integro e spento per ≥1 mese. -- [ ] Aggiornare `docs/RUNBOOK.md` con la procedura di riaccensione + - ri-registrazione scheduled task come rollback. -- [ ] Dopo 1 mese senza rollback: riallocare hardware. +- [ ] Host Windows **resta installato e operativo** (uso dual-host). +- [ ] Aggiornare `docs/RUNBOOK.md` documentando l'uso di **entrambi** + gli host (Windows + Linux), non una procedura di dismissione. +- [ ] ~~Spegnere/riallocare host Windows~~ — NON applicabile. --- @@ -474,11 +471,15 @@ incidenti critici prima di dismettere l'host Windows. | 3 | B3 | Chiavi SSH + keyring (PoC headless) | [ ] | | 4 | B4 | act_runner systemd service registrato | [ ] | | 5 | B5 | Timer systemd installati e attivi | [ ] | -| 6 | B6 | Cutover (stop Windows, runner Linux primario) | [ ] | +| 6 | B6 | Cutover (Linux primario, Windows resta operativo) | [ ] | | 7 | B7 | Capacity burn-in 4 × 10 (Win + Linux) | [ ] | -| 8 | — | ≥1 settimana di stabilità senza rollback | [ ] | -| 9 | B8 | Decommissioning host Windows (opzionale) | [ ] | +| 8 | — | ≥1 settimana di stabilità | [ ] | +| 9 | B8 | ~~Decommissioning Windows~~ ANNULLATO (dual-host) | [x] | -Quando tutti i passi sono `[x]`, la **Fase B è chiusa** e si può -valutare l'apertura della Fase C (backend ESXi, vedi +> **Vincolo categorico**: host Windows supportato in permanenza +> (dual-host), mai dismesso. Fase B = Linux **in aggiunta**, non al +> posto di Windows. + +Quando i passi 1-8 sono `[x]`, la **Fase B è chiusa** (B8 annullato per +vincolo) e si può valutare l'apertura della Fase C (backend ESXi, vedi `plans/idea-3-esxi-support.md`). diff --git a/plans/implementation-plan-A-B.md b/plans/implementation-plan-A-B.md index 97148f1..9b17300 100644 --- a/plans/implementation-plan-A-B.md +++ b/plans/implementation-plan-A-B.md @@ -99,8 +99,8 @@ A4; cambiano solo path/env vars in Fase B). - [ ] [B6] Rsync incrementale finale `F:\CI\Artifacts\` → `/var/lib/ci/artifacts/` - [ ] [B6] Trigger smoke workflow + `build-ns7zip.yml` matrix da host Linux PASS - [ ] [B7] Eseguire burn-in 4 job concorrenti × 10 round su template Windows e Linux con tempi entro ±20% baseline -- [ ] [B8] Backup finale di `F:\CI\` su archivio -- [ ] [B8] Lasciare host Windows spento ma reinstallato per ≥1 mese come rollback +- [ ] [B8] (Facoltativo) Backup periodico di `F:\CI\` +- [x] [B8] ~~Decommissioning host Windows~~ **ANNULLATO** — vincolo categorico: host Windows supportato in permanenza (dual-host), non dismesso - [ ] [X1] Aggiornare `lint.yml` per girare ruff + mypy + pytest oltre a PSSA - [ ] [X2] Aggiungere observability: log strutturato `logging` + journald handler in Fase B - [ ] [X3] Documentare gestione credenziali headless (DPAPI machine scope su Win, vault `age` su Linux) @@ -384,6 +384,16 @@ qualche caller esterno non ancora migrato emerge. ## 2. Fase B — Migrazione host Linux Mint +> **VINCOLO CATEGORICO (non negoziabile): compatibilità host Windows +> permanente.** Fase B **aggiunge** il supporto host Linux **accanto** +> a Windows — non lo sostituisce né lo degrada. Windows host resta un +> target di **prima classe** e supportato, NON solo rollback. In +> concreto: **B8 NON va eseguito come rimozione reale** (l'host Windows +> resta operativo/usabile); nessun assunto Linux-only nel codice +> condiviso; la rimozione shim (B5) deve lasciare un modo Windows-nativo +> di invocare la CLI Python; ogni modifica Fase B deve dichiarare +> l'impatto su host Windows e preferire parità dual-host. +> > **Parallelizzazione**: B1 può iniziare durante A3/A4 (setup hardware > indipendente dal codice). B2, B3 possono iniziare appena B1 è done e > A5 è done. B4–B6 sono **strettamente sequenziali** dopo "A done". @@ -697,20 +707,23 @@ fallisce, rollback a Windows (vedi B6 rollback). - [ ] Tempi documentati - [ ] Nessuna VM orfana -### B8 — Decommissioning host Windows (opzionale) +### B8 — ~~Decommissioning host Windows~~ — ANNULLATO (vincolo categorico) -**Obiettivo**: dopo ≥1 settimana di stabilità, dismettere host Windows. +> **B8 NON va eseguito.** Vincolo categorico: l'host Windows resta +> supportato di prima classe in modo permanente (non solo rollback). +> Niente dismissione, niente riallocazione hardware che rimuova la +> capacità di girare su host Windows. Questo step resta solo come +> record storico del piano originale. -**Input / dipendenze**: B7 done + ≥1 settimana di esercizio Linux -senza incidenti. +**Obiettivo (annullato)**: ~~dopo ≥1 settimana di stabilità, dismettere +host Windows.~~ → Host Windows mantenuto operativo a regime. -**Attività**: +**Attività (NON eseguire la dismissione; resta solo, se utile):** -- [ ] Backup finale di `F:\CI\` su archivio esterno (`tar` + checksum) -- [ ] Spegnimento runner Windows (`Stop-Service actions-runner`, runner già fermo da B6) -- [ ] Lasciare host Windows installato ma spento per ≥1 mese come rollback -- [ ] Documentare procedura di riaccensione in `docs/RUNBOOK.md` -- [ ] Dopo 1 mese: riallocare hardware se non ci sono stati rollback +- [ ] (Facoltativo) Backup periodico di `F:\CI\` su archivio esterno +- [ ] Host Windows **resta installato e utilizzabile** (run dual-host) +- [ ] Documentare in `docs/RUNBOOK.md` come usare entrambi gli host +- [ ] ~~Riallocare hardware~~ — NON applicabile (Windows host permanente) **Hook futuri Fase C**: nessuno.