v0.3.11-pre.006

This commit is contained in:
2026-09-08 10:54:40 +02:00
parent 0db32a865c
commit 61d8b1dee2
10 changed files with 769 additions and 37 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/028-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION.md -->
<!-- version: 8 -->
<!-- version: 9 -->
# Validation v0.3.11 — fondation runtime du Worker RawTransaction ingest
@@ -852,3 +852,165 @@ cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
Critère de passage : le supervisor/JoinSet privé, le seam source déterministe et le join complet avant terminal sont verts ; aucun `mpsc`, common RAW assembly, Store write, snapshot concret, source live ou Transport n'apparaît.
## 17. Fermeture opérateur `pre.005` et matérialisation `pre.006`
### 17.1 Fermeture opérateur de `pre.005`
Le journal opérateur communiqué le 8 septembre 2026 ferme `0.3.11-pre.005` (`workspace.package.version = 0.3.11-pre.5`) :
```text
cargo fmt --all : terminé sans erreur
python3 scripts/audit_rust_workspace_rules.py : clean, export completeness 0
python3 scripts/audit_markdown_tables.py ... : clean (340 tables, 780 files)
cargo check --workspace : terminé sans erreur
cargo clippy --workspace --all-targets --all-features -- -D warnings : terminé sans erreur
cargo test -p ksp-worker-raw-transaction-ingest-lib : 11 unit + 3 dependency-boundary + 4 public API PASS, 0 échec
doc-tests : PASS
cargo tree normal : conforme au firewall attendu
cargo tree features : Tokio limité à macros/rt/sync/time côté Worker et Store sans backend Worker direct
```
`pre.006` peut donc être ouverte.
### 17.2 Admission centrale bornée
Le supervisor crée exactement un channel central :
```text
tokio::sync::mpsc::channel<RawTransactionIngress>(admission_queue_capacity)
```
`RawTransactionIngress` reste crate-private et n'appartient pas à l'API publique. Le receiver owner `RawTransactionAdmission` est également crate-private ; le seam source reçoit directement un clone du `tokio::sync::mpsc::Sender<RawTransactionIngress>` avec son `watch<bool>` de stop.
Le contrat d'admission est :
```text
mpsc::Sender::send(...).await pour le backpressure
source harness : select! biased avec stop avant send
receiver close au shutdown
aucun unbounded_channel
aucun drop silencieux sous saturation normale
```
Le supervisor continue à observer le stop en priorité. Lors de la fermeture, le receiver appelle `close()`, refuse toute nouvelle admission, puis canonicalise les entrées déjà présentes dans le buffer avant le join final des tâches enfants.
### 17.3 Ingress privé et common RAW
L'ingress de fondation porte uniquement :
```text
RawTransactionMaterial
RawNetworkId attendu
RawAcquisitionProvenance sûre
source key opaque [u8; 32]
```
Le pipeline `pre.006` est :
```text
vérifier ingress.network == settings.network
canonicalize_raw_transaction(material)
vérifier transaction.reference.network == settings.network
dériver RawObservationKey Worker-owned
assemble_raw_transaction_acquisition(transaction, observation_key, provenance)
```
Aucune logique de canonicalisation RAW v1 n'est recodée dans le Worker. Une erreur common RAW est réduite à un contexte runtime statique et n'échoe aucun payload, réseau ou signature.
### 17.4 Observation key privée V1
Le domaine exact est :
```text
ksp.raw_transaction_ingest.observation.v1\0
```
L'entrée SHA-256 est domain-separated puis encode avec longueur `u64` big-endian :
```text
network UTF-8
signature 64 bytes
source key 32 bytes
```
Aucun timestamp local, run id ou ordre d'admission n'entre dans la clé. Une rediffusion du même triplet produit donc la même `RawObservationKey`; le contrat provider/source public reste reporté à `0.3.12`.
Golden harness figé :
```text
network : mainnet
signature : 64 x 0x07
source key : 32 x 0x09
SHA-256 : f8d161dca8a8a72a0da110fc87882ee7136848461c6aa32b09e30a6188b95dcc
```
### 17.5 Preuves ajoutées
Les tests unitaires `pre.006` couvrent :
```text
capacity = 1 : second send reste bloqué tant que le premier slot n'est pas consommé
stop : un sender bloqué retourne false sans admission post-stop
common RAW : payload canonique exact + format/version exacts
observation key : golden exact
assembly : transaction/provenance/reference alignés
network guard : mismatch ingress et mismatch material rejetés sans fuite de valeurs
```
Le test de dependency boundary exige désormais `mpsc`, common canonicalization, common assembly et le domaine observation, tout en interdisant toujours persistence, mode Store, Transport, snapshots et `unbounded_channel`.
### 17.6 Frontière volontaire de `pre.006`
La tranche n'introduit encore aucun :
```text
RawTransactionWrite::persist_raw_transaction_acquisition
RawTransactionAcquisitionMode::Normal
persistence concurrency
Store outcome mapping
content conflict terminal
store failure terminal
snapshot concret / compteurs publics
source live / Transport
Config
retry/reconnect/gap repair
```
`pre.007` reste propriétaire de la persistence et des outcomes. `pre.008` reste propriétaire des snapshots. `pre.009` reste propriétaire du fault ordering immédiat et du drain timeout/abort.
### 17.7 Preuves locales d'assemblage `pre.006`
Exécuté dans l'environnement d'assemblage :
```text
python3 scripts/audit_rust_workspace_rules.py
General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
KSP workspace Rust rule audit: clean
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas
Markdown table audit: clean (340 table(s), 781 file(s))
scan statique production : aucun ?, unwrap, expect, panic, unbounded_channel
scan statique scope : aucune persistence Store, aucun Transport, aucun snapshot concret
scan statique pipeline : exactement un mpsc::channel, un appel common canonicalize et un appel common assembly
golden SHA-256 indépendant : f8d161dca8a8a72a0da110fc87882ee7136848461c6aa32b09e30a6188b95dcc
```
L'environnement d'assemblage ne fournit ni `cargo`, ni `rustc`, ni `rustfmt`. Aucun gate Cargo `pre.006` n'est déclaré PASS localement.
### 17.8 Gate opérateur demandé pour `pre.006`
```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
```
Critère de passage : admission bornée/backpressure, stop-preemption, canonicalisation common, golden observation et assembly sont verts ; aucune persistence Store, source live, Transport ou snapshot concret n'apparaît.