v0.3.13-pre.009

This commit is contained in:
2026-09-10 19:56:16 +02:00
parent 1746d47412
commit 665d7d2bb6
15 changed files with 1051 additions and 45 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md -->
<!-- version: 8 -->
<!-- version: 9 -->
# Validation v0.3.13 — WS standard / Helius / HTTP live + convergence multi-source
@@ -1288,3 +1288,127 @@ pas de failover provider implicite
pas de préférence silencieuse entre sources divergentes
pas de nouveaux compteurs/health publics multi-source avant pre.010
```
## 68. Gate complet pre.008-fix.002 reçu
Le 10 septembre 2026, le gate Worker puis son complément Transport/graphe ont été fournis et sont verts pour toutes les commandes exécutées :
```text
fmt : PASS
audits Rust : clean / export completeness 0
Markdown : clean, 340 tables / 844 files
cargo check --workspace : PASS
clippy strict : PASS
Worker : 94 unit + 4 cross-layer + 15 dependency-boundary + 22 hardening + 16 public-api + 4 release-completeness, 0 échec
Transport : 389 unit + 52 public-api + 44 release-completeness + 4 doc-tests, 0 échec
smokes Transport live opt-in : 5 ignored comme prévu
cargo tree worker normal/features : exécutés sans erreur
cargo tree --duplicates : exécuté sans erreur et liste les doublons existants du workspace
```
Aucun smoke live ignoré n'est requalifié en preuve réseau réelle.
## 69. Surface pre.009 matérialisée
```text
validate_hydration_fairness_capacity privé
hydration_pending_limit privé
hydration_in_flight_limit privé
quotas statiques par source reference-bearing
RawTransactionIngestGlobalHydrationRegistry max_pending exact
sémaphore global hydration
RawTransactionIngestHydrationLeaderGuard privé
RawTransactionIngestCanonicalState privé
comparaison slot/block_time/format/hash avant observation additionnelle
```
Aucune API publique ni dépendance supplémentaire n'est requise.
## 70. Invariants globaux pre.009
Pour une composition productive valide :
```text
hydration_source_count <= admission_queue_capacity
hydration_source_count <= persistence_concurrency
somme quotas pending = admission_queue_capacity
somme quotas hydration tasks = persistence_concurrency
quota de chaque source reference-bearing >= 1
global registry distinct keys <= admission_queue_capacity
HTTP leader effectivement ouvert <= persistence_concurrency
source count <= 32
```
Une composition sous-provisionnée échoue avant spawn. Il n'existe aucune extension silencieuse des bornes configurées, aucune queue provider privée et aucune `unbounded_channel`.
## 71. Duplicate storm, fairness et cleanup
Les tests déterministes ajoutés vérifient :
```text
32 subscriptions identiques -> une seule entrée/leader global
clés distinctes au-delà de max_pending -> runtime_invalid sûr
sémaphore capacité 1 -> seconde acquisition simultanée refusée
leader guard droppé -> follower reçoit Failed et la clé peut redevenir leader
queue admission capacité 1 -> une seconde source déjà prête n'est pas affamée par la répétition d'une storm
```
Le test de fairness ne revendique ni priorité métier ni scheduler pondéré. Il vérifie le comportement minimal attendu du canal borné commun et les quotas réservent une capacité aux autres sources reference-bearing.
## 72. Disagreement/content conflict pre.009
Pour une même identité `(network, signature)`, le cache run-local compare maintenant :
```text
slot
block_time
format_id
format_version
content_hash
```
Les cas slot divergent, block time divergent et contenu/hash divergent sont testés comme content conflicts terminaux avant `record_raw_transaction_observation`. Le Store reste l'autorité durable finale et aucune politique de majority vote, provider priority, preferred provider ou overwrite conflict n'est admise.
## 73. Canaris externes pre.009
Les suites externes sont étendues pour verrouiller :
```text
dependency-boundary : bornes/fairness restent dans Worker + façades existantes
hardening : quotas, sémaphore, cleanup, disagreement et absence de provider preference
public-api : registry, leader guard, quotas et canonical state restent privés
release-completeness : présence obligatoire des trois nouveaux canaris
```
## 74. Validation locale d'assemblage pre.009
Le toolchain Cargo/Rustfmt n'est pas disponible dans l'environnement d'assemblage. Les commandes Cargo post-modification restent `NON EXÉCUTÉ LOCAL`; seules les validations statiques effectivement exécutées et les contrôles de packaging pourront être déclarés PASS dans le delta.
## 75. Non-claims pre.009
```text
pas de nouveaux compteurs/health publics avant pre.010
pas de QoS/scheduler pondéré
pas de failover provider implicite
pas de source primary/standby
pas de majority vote
pas de préférence provider/tier
pas de overwrite d'un conflit canonique
pas de preuve live réseau nouvelle
```
## 76. Gate opérateur requis avant pre.010
```bash
cargo fmt --all
cargo fmt --all -- --check
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
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p ksp-onchain-transport-lib
cargo test -p ksp-worker-raw-transaction-ingest-lib
cargo tree -p ksp-worker-raw-transaction-ingest-lib --edges normal
cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
cargo tree --duplicates
```