v0.3.13-pre.008

This commit is contained in:
2026-09-10 17:52:35 +02:00
parent 8bb530e9b4
commit 1f2720463b
18 changed files with 899 additions and 36 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md -->
<!-- version: 7 -->
<!-- version: 8 -->
# Plan v0.3.13 — WS standard / Helius / HTTP live + convergence multi-source RawTransaction
@@ -1246,3 +1246,40 @@ cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
cargo tree --duplicates
```
## 62. Gate opérateur pre.007 reçu avant pre.008
Le gate communiqué le 10 septembre 2026 est vert pour toutes les commandes effectivement exécutées : fmt, audits Rust/Markdown, `cargo check --workspace`, Clippy strict et toutes les suites Worker (`90` unit, `4` cross-layer, `14` dependency-boundary, `21` hardening, `15` public-api, `4` release-completeness, `0` doc-test). Les sorties Transport ciblées et `cargo tree` ne figurent pas dans le log reçu et ne sont pas déclarées PASS.
## 63. Implémentation pre.008 — convergence cross-source
Les trois familles reference-bearing Yellowstone, Standard Logs et Helius Transaction partagent un `RawTransactionIngestGlobalHydrationRegistry` privé au run. La clé reste exactement `(network, signature, commitment)`. La première source devient leader et exécute `getTransaction observed`; les suivantes attendent le même résultat via un canal `watch` privé. Le registre est borné par `admission_queue_capacity` et retiré après publication du résultat.
La canonicalisation reste inchangée et source-neutral. La convergence persistence utilise `(network, signature)` puis compare le `RawContentHash` canonique. Une divergence de hash devient le content conflict terminal existant.
## 64. Observations multiples et persistence
La première acquisition d'une identité canonique passe par l'écriture Store atomique existante `RawTransaction + RawTransactionObservation`. Tant que le hash reste identique, les acquisitions suivantes de la même identité n'écrivent plus l'entité : elles appellent uniquement `record_raw_transaction_observation` via `ksp-store-lib`.
Les `RawObservationKey` restent déterministes et source-dépendantes. Deux sources distinctes peuvent donc produire deux observations durables pour une seule entité RAW, tandis qu'un replay de la même observation reste idempotent (`AlreadyPresent`). `NotRecorded` sur une observation supplémentaire est considéré incohérent et devient une faute runtime sûre.
La cache persistence est privée, run-local et bornée à `max(admission_queue_capacity, persistence_concurrency)` dans le runtime productif afin de couvrir toutes les tâches persistence simultanées sans bypass de convergence.
## 65. Frontière de tranche pre.008
`pre.008` ferme la coalescence cross-source, l'unique hydration globale par clé et les observations Store multiples. Elle ne ferme pas encore les scénarios de disagreement/fairness sous charge hostile, les duplicate storms prolongés, la starvation ou les bornes adversariales détaillées : ces preuves appartiennent à `pre.009`.
## 66. Gate opérateur requis avant pre.009
```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
```

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md -->
<!-- version: 7 -->
<!-- version: 8 -->
# Validation v0.3.13 — WS standard / Helius / HTTP live + convergence multi-source
@@ -1242,3 +1242,49 @@ cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
cargo tree --duplicates
```
## 63. Gate opérateur pre.007 reçu
Preuve communiquée le 10 septembre 2026 : fmt PASS, audits Rust clean/export completeness 0, Markdown clean `340/841`, `cargo check --workspace` PASS, Clippy strict PASS, Worker `90/90` unit, `4/4` cross-layer, `14/14` dependency-boundary, `21/21` hardening, `15/15` public-api, `4/4` release-completeness et `0` doc-test. Le log fourni ne contient pas les sorties Transport ciblées ni les trois `cargo tree`.
## 64. Surface pre.008 matérialisée
```text
RawTransactionIngestGlobalHydrationRegistry privé
coalescence globale (network, signature, commitment)
leader unique getTransaction observed
résultat partagé par watch borné/retiré
RawTransactionIngestPersistenceConvergence privé
clé canonique (network, signature)
hash canonique conflict-checked
première persistence atomique entity + observation
observations suivantes via record_raw_transaction_observation
RawObservationKey source-distincte et idempotente
```
## 65. Invariants pre.008
```text
aucun fanout HTTP pour une même clé d'hydration simultanée
aucune fusion des identités de source dans l'API publique
une identité RAW canonique n'est pas dupliquée par source
hash divergent pour même network/signature => content conflict terminal
observation source différente => observation durable supplémentaire
replay même observation => AlreadyPresent sans réécriture RAW
registre hydration <= admission_queue_capacity
cache persistence runtime <= max(admission_queue_capacity, persistence_concurrency)
aucun backend Store physique ni client HTTP direct dans Worker
```
## 66. Validation locale d'assemblage pre.008
Le toolchain Cargo/Rustfmt n'est pas disponible dans l'environnement d'assemblage. Les commandes Cargo post-modification restent `NON EXÉCUTÉ LOCAL`; les audits statiques et contrôles de packaging sont consignés dans le delta `pre.008`.
## 67. Non-claims pre.008
```text
pas encore de fairness adversariale complète avant pre.009
pas encore de canari starvation/duplicate storm cross-source complet avant pre.009
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
```