docs: Windows host compat is a categorical constraint (B8 cancelled)

User requirement (non-negotiable): the project must stay
first-class compatible with a Windows host permanently — Phase B
adds Linux *alongside* Windows, never replacing/degrading it.
- implementation-plan-A-B §2: categorical-constraint banner; B8
  decommissioning cancelled (kept only as historical record);
  master checklist B8 row updated.
- PhaseB-user-checklist: Passo 9 (B8) cancelled -> dual-host kept;
  Passo 8 no longer a decommission gate; tracking table + closing
  note updated.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Simone
2026-05-17 23:45:31 +02:00
parent 6c4e5c2e0e
commit 573d11691d
2 changed files with 49 additions and 35 deletions
+24 -23
View File
@@ -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 **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. - [ ] Esercizio normale per ≥7 giorni con runner Linux primario.
- [ ] Verifica giornaliera (bastano 2 minuti): - [ ] 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 > 🚫 **VINCOLO CATEGORICO: l'host Windows NON va dismesso.** Resta un
> spento ma intatto per ≥1 mese come rollback. > 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 ```powershell
$stamp = Get-Date -Format 'yyyyMMdd' $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" Get-FileHash $archive -Algorithm SHA256 | Tee-Object "$archive.sha256"
``` ```
- [ ] Verifica integrità (estrazione di prova in tmp): - [ ] Host Windows **resta installato e operativo** (uso dual-host).
- [ ] Aggiornare `docs/RUNBOOK.md` documentando l'uso di **entrambi**
```powershell gli host (Windows + Linux), non una procedura di dismissione.
$test = "$env:TEMP\ci-restore-test" - [ ] ~~Spegnere/riallocare host Windows~~ — NON applicabile.
& '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.
--- ---
@@ -474,11 +471,15 @@ incidenti critici prima di dismettere l'host Windows.
| 3 | B3 | Chiavi SSH + keyring (PoC headless) | [ ] | | 3 | B3 | Chiavi SSH + keyring (PoC headless) | [ ] |
| 4 | B4 | act_runner systemd service registrato | [ ] | | 4 | B4 | act_runner systemd service registrato | [ ] |
| 5 | B5 | Timer systemd installati e attivi | [ ] | | 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) | [ ] | | 7 | B7 | Capacity burn-in 4 × 10 (Win + Linux) | [ ] |
| 8 | — | ≥1 settimana di stabilità senza rollback | [ ] | | 8 | — | ≥1 settimana di stabilità | [ ] |
| 9 | B8 | Decommissioning host Windows (opzionale) | [ ] | | 9 | B8 | ~~Decommissioning Windows~~ ANNULLATO (dual-host) | [x] |
Quando tutti i passi sono `[x]`, la **Fase B è chiusa** e si può > **Vincolo categorico**: host Windows supportato in permanenza
valutare l'apertura della Fase C (backend ESXi, vedi > (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`). `plans/idea-3-esxi-support.md`).
+25 -12
View File
@@ -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] Rsync incrementale finale `F:\CI\Artifacts\``/var/lib/ci/artifacts/`
- [ ] [B6] Trigger smoke workflow + `build-ns7zip.yml` matrix da host Linux PASS - [ ] [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 - [ ] [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] (Facoltativo) Backup periodico di `F:\CI\`
- [ ] [B8] Lasciare host Windows spento ma reinstallato per ≥1 mese come rollback - [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 - [ ] [X1] Aggiornare `lint.yml` per girare ruff + mypy + pytest oltre a PSSA
- [ ] [X2] Aggiungere observability: log strutturato `logging` + journald handler in Fase B - [ ] [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) - [ ] [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 ## 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 > **Parallelizzazione**: B1 può iniziare durante A3/A4 (setup hardware
> indipendente dal codice). B2, B3 possono iniziare appena B1 è done e > indipendente dal codice). B2, B3 possono iniziare appena B1 è done e
> A5 è done. B4B6 sono **strettamente sequenziali** dopo "A done". > A5 è done. B4B6 sono **strettamente sequenziali** dopo "A done".
@@ -697,20 +707,23 @@ fallisce, rollback a Windows (vedi B6 rollback).
- [ ] Tempi documentati - [ ] Tempi documentati
- [ ] Nessuna VM orfana - [ ] 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 **Obiettivo (annullato)**: ~~dopo ≥1 settimana di stabilità, dismettere
senza incidenti. 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) - [ ] (Facoltativo) Backup periodico di `F:\CI\` su archivio esterno
- [ ] Spegnimento runner Windows (`Stop-Service actions-runner`, runner già fermo da B6) - [ ] Host Windows **resta installato e utilizzabile** (run dual-host)
- [ ] Lasciare host Windows installato ma spento per ≥1 mese come rollback - [ ] Documentare in `docs/RUNBOOK.md` come usare entrambi gli host
- [ ] Documentare procedura di riaccensione in `docs/RUNBOOK.md` - [ ] ~~Riallocare hardware~~ — NON applicabile (Windows host permanente)
- [ ] Dopo 1 mese: riallocare hardware se non ci sono stati rollback
**Hook futuri Fase C**: nessuno. **Hook futuri Fase C**: nessuno.