Files
khadhroony-solana-project/deltas/0.3.11/pre.006.md
2026-09-08 10:54:40 +02:00

5.3 KiB

Delta 0.3.11-pre.006 — admission bornée et canonicalisation Common RAW

Base requise

0.3.11-pre.005
workspace.package.version = 0.3.11-pre.5

Le gate opérateur du 8 septembre 2026 est vert sur fmt, audits Rust/Markdown, cargo check --workspace, Clippy strict, les 18 tests de la crate Worker, doc-tests et les arbres Cargo normal/features.

Objectif

Matérialiser uniquement la responsabilité pre.006 du plan 032 : admission mpsc centrale bornée, backpressure async, ingress privé, canonicalisation via ksp-raw-transaction-lib, observation key Worker déterministe et assembly du RawTransactionAcquisition. Aucune persistence Store et aucune source réseau.

Version

identifiant de livraison : 0.3.11-pre.006
workspace.package.version : 0.3.11-pre.6

Admission privée bornée

Le supervisor crée un seul channel central dimensionné par RawTransactionIngestSettings::admission_queue_capacity() :

tokio::sync::mpsc::channel(...)

Le seam source reçoit le sender mpsc borné et le signal de stop. Le contrat prouvé est :

send().await pour le backpressure
select! biased : stop avant send dans le harness source
aucun unbounded_channel
receiver close au shutdown

Au shutdown, le receiver ferme les nouvelles admissions et consume les entrées déjà en queue avant le join final des tâches enfants.

Ingress et Common RAW

L'ingress crate-private, absent de l'API publique, transporte :

RawTransactionMaterial
RawNetworkId attendu
RawAcquisitionProvenance
source key opaque [u8; 32]

Le pipeline est :

network guard
ksp_raw_transaction_lib::canonicalize_raw_transaction(...)
material network guard
observation key Worker
ksp_raw_transaction_lib::assemble_raw_transaction_acquisition(...)

Aucune canonicalisation RAW v1 n'est réimplémentée dans le Worker.

Observation key V1

Domaine exact :

ksp.raw_transaction_ingest.observation.v1\0

Le SHA-256 encode avec longueur u64 big-endian :

network
signature
source key

Golden harness :

network : mainnet
signature : 64 x 0x07
source key : 32 x 0x09
SHA-256 : f8d161dca8a8a72a0da110fc87882ee7136848461c6aa32b09e30a6188b95dcc

Aucun timestamp local, run id ou ordre d'admission ne participe à la clé.

Tests ajoutés ou étendus

capacity=1 : second send bloqué jusqu'à consommation d'un slot
stop : sender bloqué rejeté sans admission post-stop
payload common RAW canonique exact
format id/version exacts
observation-key golden exact
assembly transaction/provenance/reference exact
mismatch network ingress/material rejetés sans fuite de valeurs
dependency boundary : mpsc/common RAW requis, persistence/Transport/snapshot toujours interdits

Fichiers ajoutés

crates/ksp-worker-raw-transaction-ingest-lib/src/admission.rs
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/admission.rs
deltas/0.3.11/pre.006.md

Fichiers modifiés

Cargo.toml
crates/ksp-worker-raw-transaction-ingest-lib/src/lib.rs
crates/ksp-worker-raw-transaction-ingest-lib/src/runtime.rs
crates/ksp-worker-raw-transaction-ingest-lib/tests/dependency_boundary.rs
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime.rs
docs/plans/032-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION_PLAN.md
docs/validation/028-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION.md

Fichiers supprimés

Aucun.

Hors scope conservé

RawTransactionWrite / persistence Store
RawTransactionAcquisitionMode::Normal
persistence concurrency
Store outcome mapping / idempotence / conflict
snapshots concrets
source live / Transport
Config
retry / reconnect / gap repair

Validations exécutées dans l'environnement d'assemblage

General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
KSP workspace Rust rule audit: clean
Markdown table audit: clean (340 table(s), 781 file(s))

scan production : aucun ?, unwrap, expect, panic, unbounded_channel
scan scope : aucune persistence Store, aucun Transport, aucun snapshot concret
pipeline : exactement 1 mpsc::channel, 1 canonicalize_raw_transaction, 1 assemble_raw_transaction_acquisition
observation golden indépendant : f8d161dca8a8a72a0da110fc87882ee7136848461c6aa32b09e30a6188b95dcc

L'environnement d'assemblage ne fournit ni cargo, ni rustc, ni rustfmt. Aucun gate Cargo de pre.006 n'est déclaré PASS localement.

Gate opérateur demandé

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

Décision

pre.007 reste bloquée jusqu'à validation opérateur verte de l'admission bornée, du backpressure, du golden observation et de l'assembly Common RAW.

Questions ouvertes

Aucune nouvelle question architecturale. La persistence réelle et les outcomes Store restent dans pre.007, les snapshots dans pre.008, et le hardening fault/drain dans pre.009.