# Delta `0.3.14-pre.009-fix.001` — rétablissement des canaris de health multi-source ## Base requise ```text 0.3.14-pre.009 workspace.package.version = 0.3.14-pre.9 deltas/0.3.14/pre.009.md présent ``` ## Objectif Corriger strictement les deux échecs de `tests/hardening.rs` observés après `pre.009`, sans modifier la politique fonctionnelle de health : ```text rendre explicite le garde source_active < source_total attendu par le canari historique pre.010 rendre explicite le pont aggregate.with_continuity_health attendu par le canari pre.009 préserver exactement Healthy / Degraded / Unhealthy / Faulted et les preuves de continuité de pre.009 ``` ## Défaut observé Le gate opérateur de `0.3.14-pre.009` a produit : ```text cargo fmt --all : PASS cargo fmt --all -- --check : PASS audit Rust workspace rules : PASS audit Markdown tables : PASS cargo check --workspace : PASS cargo clippy --workspace --all-targets --all-features -- -D warnings : PASS cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features : FAIL ``` Les suites précédant `hardening` passent, dont `143` unit tests. Deux canaris textuels échouent : ```text v0_3_13_pre_010_multi_source_health_is_conservative_counted_and_redacted required pre.010 health guard missing: source_active < source_total v0_3_14_pre_009_health_policy_is_present_future_coverage_gated_and_source_neutral required pre.009 inventory-health bridge missing: aggregate.with_continuity_health ``` ## Cause Les deux invariants sont présents sémantiquement mais ne sont plus visibles sous les formes textuelles exactes attendues par les canaris : ```text snapshot.source_active < snapshot.source_total aggregate\n .with_continuity_health(...) ``` Le hardening recherche volontairement les formes explicites historiques afin de protéger les invariants de health et le pont Inventory -> Continuity -> Snapshot. ## Correction `health_for_state` matérialise des variables locales source-neutres : ```text source_total source_active source_failed ``` La condition `Degraded` exprime donc explicitement : ```text source_active < source_total ``` Le pont de projection matérialise ensuite : ```text let aggregate = aggregate.with_continuity_health(...) ``` avant d'ajouter `failed_source_losses_reconciled`. Ces changements sont algébriquement équivalents au code de `pre.009` et ne changent aucune décision runtime. ## Fichiers ajoutés ```text deltas/0.3.14/pre.009-fix.001.md ``` ## Fichiers modifiés ```text Cargo.toml crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs crates/ksp-worker-raw-transaction-ingest-lib/src/snapshot.rs ``` ## Fichiers supprimés ```text aucun ``` ## Version Cargo Le correctif modifie du code Rust production ; conformément à `VER-ID-007` et `VER-ID-010` : ```text header Cargo.toml : 579 -> 580 workspace.package.version : 0.3.14-pre.9 -> 0.3.14-pre.9.fix.1 ``` Versions de fichiers : ```text src/runtime_resources.rs : 37 -> 38 src/snapshot.rs : 6 -> 7 ``` ## Frontières préservées ```text aucune modification de TargetCoverage aucune modification du gap ledger aucune modification des coverage epochs aucune modification du continuity frontier aucune modification de la classification source-loss aucun respawn Worker aucun nouveau scheduler ou task aucun changement Transport aucune nouvelle requête HTTP aucune nouvelle dépendance ou feature aucun accès Config aucun Job Backfill aucun backend Store physique aucune croissance de surface publique ``` ## Validations exécutées Dans le sandbox de préparation : ```text python3 scripts/audit_rust_workspace_rules.py python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas vérification ciblée des deux tokens de hardening contrôle du diff exact contrôle d'inventaire ZIP unzip -t réapplication du delta sur la base pre.009 et comparaison byte-à-byte ``` ## Validations non exécutées Le toolchain Rust/Cargo n'est pas disponible dans le sandbox de préparation. Le gate opérateur reste requis : ```text cargo fmt --all cargo fmt --all -- --check cargo check --workspace cargo clippy --workspace --all-targets --all-features -- -D warnings cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features ``` ## Décisions prises ```text corriger les formes explicites attendues plutôt que relâcher ou supprimer les canaris ne pas ajouter de #[allow(...)] ne pas modifier la sémantique de health validée par les unit tests pre.009 ``` ## Questions ouvertes ```text aucune pour ce correctif ```