7.3 KiB
Delta 0.3.13-pre.008 — convergence cross-source et observations multiples
Base requise
livraison précédente : 0.3.13-pre.007
Cargo base : 0.3.13-pre.7
delta base : deltas/0.3.13/pre.007.md
archive delta base : ksp-general-0.3.13-pre.007.zip
Le gate opérateur communiqué le 10 septembre 2026 est vert pour toutes les commandes exécutées : cargo fmt, cargo fmt --check, audits Rust/Markdown, cargo check --workspace, Clippy strict et toutes les suites ksp-worker-raw-transaction-ingest-lib (90 unit, 4 cross-layer, 14 dependency-boundary, 21 hardening, 15 public-api, 4 release-completeness, 0 doc-test). Le log reçu ne contient pas les sorties séparées cargo test -p ksp-onchain-transport-lib ni les trois commandes cargo tree; elles ne sont donc pas déclarées PASS ici.
Objectif
Fermer la convergence des sources live simultanées sans dupliquer l'identité RawTransaction :
plusieurs sources reference-bearing
-> une hydration globale par (network, signature, commitment)
-> acquisitions source-distinctes
-> canonicalisation RAW commune
-> convergence par (network, signature) + content hash
-> une entity RAW
-> plusieurs observations déterministes
Version
livraison : 0.3.13-pre.008
workspace.package.version : 0.3.13-pre.8
archive : ksp-general-0.3.13-pre.008.zip
Cargo.toml passe de la version de fichier 552 à 553.
Hydration globale cross-source
RawTransactionIngestRuntimeResources::run_live_sources crée un RawTransactionIngestGlobalHydrationRegistry privé partagé par Yellowstone, Standard Logs et Helius Transaction. Standard Block et HTTP Block Polling restent RAW-direct et n'entrent pas dans ce registre.
La clé reste exactement :
(network, signature, commitment)
Le premier demandeur devient leader et exécute le getTransaction observed existant. Les suivants s'abonnent au même résultat via un watch privé. La registry est bornée par admission_queue_capacity, publie soit le résultat observed soit un ErrorCode sûr, puis retire la clé.
Les signaux source restent distincts : le même résultat d'hydration est finalisé séparément avec le contexte/provenance de chaque signal.
Convergence persistence
Le runtime possède un RawTransactionIngestPersistenceConvergence privé et run-local. Sa capacité productive est :
max(admission_queue_capacity, persistence_concurrency)
Chaque identité (network, signature) possède un verrou async local et mémorise le RawContentHash canonique après une première persistence réussie non purgée.
première acquisition
-> persist_raw_transaction_acquisition
-> Store atomique entity + observation
même identity + même content hash
-> record_raw_transaction_observation uniquement
même identity + hash divergent
-> content conflict terminal
Le cache évince uniquement une entrée inactive lorsqu'il atteint sa borne. Le runtime dimensionne cette borne pour couvrir toutes les tâches persistence simultanées valides.
Observations multiples
L'observation_key reste dérivée de la référence canonique et du source_key privé. Deux sources distinctes observant le même RAW produisent donc une seule référence/entity mais des observations déterministes distinctes.
Un replay de la même observation retourne AlreadyPresent sans réécriture de l'entité. Une observation supplémentaire NotRecorded est incohérente pour une entité déjà durable et devient une faute runtime sûre.
Preuves ajoutées
Tests unitaires déterministes :
deux source_key -> même référence/hash canonique, observation_key distinctes
registry globale -> un leader, un follower, publication partagée puis retrait
première identity -> une persistence atomique
seconde observation distincte -> record_observation seul
replay même observation -> AlreadyPresent sans nouvelle persistence entity
Canaris externes :
dependency_boundary : Store/Transport facades uniquement, pas de backend/client direct
hardening : caches bornés, hash conflict-checked, convergence privée, aucun canal unbounded
public_api : registry/cache/hydration key/source_key non exposés
release_completeness : présence obligatoire des trois canaris pre.008
Frontière de tranche
pre.008 ne ferme pas encore :
fairness adversariale sous duplicate storm prolongé
starvation entre sources
matrice complète de disagreement provider/source
stress des bornes globales
nouveaux compteurs/health publics multi-source
Ces points restent pre.009 et pre.010 selon le plan.
Fichiers modifiés
Cargo.toml
crates/ksp-worker-raw-transaction-ingest-lib/README.md
crates/ksp-worker-raw-transaction-ingest-lib/USAGE.md
crates/ksp-worker-raw-transaction-ingest-lib/src/lib.rs
crates/ksp-worker-raw-transaction-ingest-lib/src/persistence.rs
crates/ksp-worker-raw-transaction-ingest-lib/src/runtime.rs
crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs
crates/ksp-worker-raw-transaction-ingest-lib/tests/dependency_boundary.rs
crates/ksp-worker-raw-transaction-ingest-lib/tests/hardening.rs
crates/ksp-worker-raw-transaction-ingest-lib/tests/public_api.rs
crates/ksp-worker-raw-transaction-ingest-lib/tests/release_completeness.rs
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/admission.rs
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/persistence.rs
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime.rs
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs
docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md
docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md
Fichiers ajoutés
deltas/0.3.13/pre.008.md
Fichiers supprimés
aucun
Validation dans l'environnement d'assemblage
Le toolchain Rust/Cargo/Rustfmt n'est pas disponible dans l'environnement d'assemblage. Les commandes Cargo post-pre.008 restent donc NON EXÉCUTÉ LOCAL. Les audits statiques KSP, le scan normatif, le contrôle exhaustif du diff, des headers et du ZIP sont exécutés avant livraison.
Résultats statiques finaux :
General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
KSP workspace Rust rule audit: clean
Markdown table audit: clean (340 tables, 842 files)
Normative rule definitions: 489
Unique normative IDs: 489
Duplicates: 0
Contrôle ciblé :
17 fichiers existants modifiés
1 fichier ajouté
0 suppression
17/17 headers existants : +1
nouvelle dépendance : aucune
backend Store physique direct : absent
client HTTP/gRPC direct : absent
unbounded_channel : absent
convergence/registry publiques : absentes
Gate opérateur requis avant pre.009
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