v0.3.12-pre.007

This commit is contained in:
2026-09-09 16:21:23 +02:00
parent 07b9b20eb5
commit ba69a5ad20
13 changed files with 1037 additions and 105 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/029-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY.md -->
<!-- version: 12 -->
<!-- version: 13 -->
# Validation v0.3.12 — Yellowstone + hydration HTTP + continuité de run du Worker RawTransaction
@@ -1339,3 +1339,110 @@ cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p ksp-worker-raw-transaction-ingest-lib
```
## 57. Gate opérateur `pre.006-fix.001`
Le gate opérateur communiqué pour `0.3.12-pre.6.fix.1` est entièrement vert :
```text
General Rust rule audit : clean
Rust export completeness audit : 0 candidate(s)
KSP workspace Rust rule audit : clean
Markdown table audit : clean (340 tables, 811 fichiers)
cargo check --workspace : PASS
cargo clippy --workspace --all-targets --all-features -- -D warnings : PASS
cargo test -p ksp-worker-raw-transaction-ingest-lib : 58 PASS / 0 FAIL
```
Les suites `dependency_boundary`, `hardening`, `public_api`, `release_completeness` et les doc-tests passent également. `pre.006-fix.001` devient donc la base autoritaire de `pre.007`.
## 58. Contrat processing frontier `pre.007`
`pre.007` introduit une frontier strictement run-local liée uniquement au travail réellement observé par le source task :
```text
source signal Transaction/Status/Block validé -> pending
getTransaction -> Missing -> settled
getTransaction -> Available + ingress accepté par admission -> settled
BlockMeta/Slot continuity-only observé -> settled immédiat
```
`settled` ne signifie ni persisté, ni durable, ni complet sur la blockchain. L'admission queue depth et `in_flight_persistence` restent les métriques séparées qui décrivent les étages aval.
La projection publique ajoute uniquement :
```text
hydration_pending
processing_frontier_slot
oldest_pending_slot
```
`processing_frontier_slot` est la plus haute slot réellement observée et settled qui n'est pas située au-delà de la plus ancienne slot pending. Une slot pending bloque donc toujours l'avancement de la frontier.
## 59. Borne mémoire et compaction
Le tracker privé conserve les slots pending exactes et compacte les slots settled-only par intervalles autour des slots pending. Il ne conserve qu'un maximum settled par intervalle, plus les slots qui possèdent encore du pending.
Avec `N` slots pending distinctes, la représentation reste donc bornée linéairement par le même travail déjà borné par le coordinator d'hydration ; un flux continuity-only sans pending se compacte à une seule slot settled candidate.
Aucune map de slots historique/non bornée n'est créée.
## 60. Projection supervisor et activité
Le source task publie sa projection par un `tokio::sync::watch` latest-value privé. Le supervisor est l'unique owner du `RawTransactionIngestSnapshotPublisher` et applique la projection dans le snapshot concret existant.
La projection peut coalescer des valeurs intermédiaires ; elle ne perd pas de compteur durable car elle ne transporte que des gauges/latest-values calculées à partir de l'état source courant.
`WorkerActivity` devient `Active` lorsque `hydration_pending > 0`, même si l'admission queue et les persistences sont momentanément à zéro.
Aucune signature, filter, provider, endpoint, transaction/meta ou erreur distante n'entre dans la projection.
## 61. Canaris `pre.007`
Les canaris déterministes ajoutés vérifient :
```text
frontier initiale vide
slot settled 100 -> frontier 100
pending 102 + settled 105 -> frontier reste 100
pending 104 puis settle 102 -> frontier 102, oldest pending 104
settle 104 -> frontier 105
compaction de 0..1000 avec pending 10/20 -> <= 5 états de slot
snapshot latest-value hydration_pending/frontier/oldest_pending
WorkerActivity active quand hydration_pending > 0
getters publics exacts
aucun ReplayInfo/from_slot/continuity_gap/repair
aucun backend/Config/Backfill/direct reqwest/tonic/proto
```
## 62. Non-claims `pre.007`
`pre.007` ne prétend pas :
```text
interpréter reconnect Transport
modifier ou décider from_slot
interpréter SubscribeReplayInfo
prouver un replay réussi
prouver une continuité blockchain
maintenir un checkpoint inter-process
fault sur gap de rétention
lancer un repair/backfill
```
Ces responsabilités restent `pre.008` et les releases de repair ultérieures.
## 63. Gate opérateur requis pour `pre.007`
```bash
cargo fmt --all
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-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
```
Dans l'environnement d'assemblage, `cargo`, `rustc` et `rustfmt` ne sont pas installés ; aucun gate Cargo local n'est revendiqué.