docs(cache): end-to-end numbers, operator runbook, and a vmrun gotcha

Measured through the real pipeline, not the unit tests: a Rust job goes from
186s to 84s (build phase 150s -> 47s), and 75s with the source modified, which
is the scenario CI actually runs. The entry is 645 MB and costs 8s to restore.

The test that decides whether this ships is row 4: a deliberate type error in
fury-core, built warm. The cache restored 645 MB of dependencies and the build
still went red with E0308, exit 1, publishing nothing. A cache that can turn a
red build green is the worst failure a CI system has because it is silent --
re-run that row whenever the prune rules change.

AGENTS.md #17 records something found while validating: `vmrun list` is
per-user. Run as the wrong user it answers "Total running VMs: 0" while a clone
is very much alive, which makes the "no VMs running" check before a
deploy --force (#14) unreliable. `ps | grep vmware-vmx` is user-independent and
was already the recommended diagnosis.
This commit is contained in:
2026-07-22 22:15:32 +02:00
parent 15b1676375
commit 9f78742111
4 changed files with 117 additions and 4 deletions
+20 -4
View File
@@ -35,7 +35,7 @@ _Last updated: 2026-05-11 (post Sprint 15: §7.5 DONE — Rinomina Setup-* → I
| [x] | Gitea Workflow Integration | 5 | 0 | tutti completati — example.yml usa composite action |
| [x] | §1 Sicurezza & hardening | 3 | 0 | 1.1, 1.4, 1.6 done; 1.2/1.3/1.5/1.7/1.8 deferred (home lab) |
| [x] | §2 Affidabilità & resilienza | 7 | 0 | tutto done (2.1-2.7) |
| [ ] | §3 Performance & throughput | 4 | 1 | 3.1/3.2/3.3/3.6 done; 3.4/3.5 deferred; **3.8 cache cargo pianificata** |
| [x] | §3 Performance & throughput | 5 | 0 | 3.1/3.2/3.3/3.6/3.8 done; 3.4/3.5 deferred — **§3 CHIUSO** |
| [x] | §4 Osservabilità & manutenzione | 3 | 0 | 4.1/4.3/4.4 done (4.2 Prometheus, 4.5 Dashboard rimossi) |
| [x] | §5 Qualità codice & test | 5 | 0 | 5.1/5.2/5.3/5.4/5.5 done |
| [x] | §6 Scalabilità & estensioni | 5 | 0 | 6.1-6.2 done, 6.3 deferred (home lab), 6.4-6.5 done, 6.6 done |
@@ -938,8 +938,19 @@ cioè nelle invocazioni manuali/burn-in.
`Start-Job`/`pwsh`/`$IsWindows`. Lo shim resta solo per il runner Windows, dove
`CI_VENV_PYTHON` è sempre settato. Il bug non è più raggiungibile sull'host Linux.
### 3.8 [P2] [ ] Cache delle dipendenze cargo per i job Rust — PIANIFICATO (2026-07-22)
File: [plans/cargo-dependency-cache.md](plans/cargo-dependency-cache.md).
### 3.8 [P2] [x] Cache delle dipendenze cargo per i job Rust — COMPLETATO 2026-07-22
File: [src/ci_orchestrator/cargo_cache.py](src/ci_orchestrator/cargo_cache.py),
[src/ci_orchestrator/assets/cargo-cache-prune.sh](src/ci_orchestrator/assets/cargo-cache-prune.sh),
piano in [plans/cargo-dependency-cache.md](plans/cargo-dependency-cache.md),
numeri in [plans/cargo-dependency-cache-measurements.md](plans/cargo-dependency-cache-measurements.md).
**Risultato misurato end-to-end**: job Rust da **186 s → 84 s** (fase build
150 s → 47 s). Con sorgente modificato — lo scenario CI vero — 75 s. Entry da
645 MB, restore 8 s. `--no-cargo-cache` e i tag `v*` restano a freddo.
**La prova che conta**: errore di compilazione deliberato in `fury-core`,
run a caldo → `error[E0308]`, job exit 1. La cache non può nascondere una
regressione. Da ripetere ogni volta che cambiano le regole di potatura.
Misurato in furyrs#12: dei ~133 s di un job Rust, ~120 s sono la compilazione
delle ~490 dipendenze esterne, che `Cargo.lock` committato tiene **bit-identiche
@@ -975,7 +986,12 @@ concorrenti.
cambio di `Cargo.lock`, centinaia di MB l'una) senza estendere `retention run`
ripeterebbe l'errore di §2.9 su scala maggiore.
**Prossimo passo**: Task 0 del piano — misurare prima di costruire, come in #12.
**Nota emersa implementando**: l'asserzione prevista dal piano era tautologica
— ri-cercava gli stessi glob che aveva appena cancellato, quindi provava solo
che `rm` fosse andato a buon fine, non che i pattern coprissero la realtà.
Sostituita con un oracolo indipendente: i depfile `.d` che cargo scrive dicono
da quali sorgenti ogni artefatto è stato compilato. Dettaglio nel documento
delle misure.
### 8.1 [P3] [ ] Mirror GitHub Actions su Gitea locale (rimuovi dipendenza github.com)
File: [.gitea/workflows/lint.yml](.gitea/workflows/lint.yml), Gitea (org `actions`).