Files
2026-09-09 12:45:29 +02:00

6.2 KiB

Delta 0.3.12-pre.005 — Block transactionnel + BlockMeta/Slot continuity-only

Base requise

0.3.12-pre.004-fix.001
workspace.package.version = 0.3.12-pre.4.fix.1

Le gate opérateur communiqué pour cette base est entièrement vert : audits Rust/Markdown, cargo check --workspace, Clippy strict, 17 tests Common RAW et 52 tests Worker avec toutes les suites d'intégration associées.

Objectif

Fermer les adapters privés Yellowstone restants nécessaires avant le source task productif :

Block -> N signaux transactionnels d'hydration dans l'ordre source
BlockMeta -> signal continuity-only
Slot -> signal continuity-only

La tranche ne branche ni session live, ni reconnect policy Worker, ni from_slot, ni ReplayInfo, ni processing frontier.

Version

workspace.package.version = 0.3.12-pre.5

Block

YellowstoneBlockUpdate implémente un adapter privé borné qui lit uniquement les identités nécessaires au P0 :

filters
created_at
slot
transactions[].signature
transactions[].index

Chaque transaction incluse produit un RawTransactionIngestSourceSignal avec family = Block. L'ordre du Vec de sortie suit strictement l'ordre transactions[] du DTO Transport. Aucun body/meta Yellowstone n'entre dans Common RAW directement.

La future hydration réutilise getTransaction et la provenance composite yellowstone_http; la méthode d'acquisition devient block_get_transaction, distincte de transaction_get_transaction et status_get_transaction.

get_block_observed reste hors P0 et n'est pas introduit.

BlockMeta et Slot

Les deux DTOs convergent vers un signal Worker privé séparé, RawTransactionIngestContinuitySignal. Sa forme est strictement bornée à :

created_at
family
matched_filter_count
matched_filter_fingerprint
matched_filter_id
network
parent_slot
route
slot
status

BlockMeta fournit slot/parent et aucun status. Ses blockhash, rewards, block_time, block_height et compteurs ne sont pas utilisés comme preuve de complétude transactionnelle dans cette tranche.

Slot fournit slot/parent/status. Les sept états Yellowstone sont mappés vers un enum Worker privé source-neutral. Le diagnostic dead_error n'est jamais lu.

Aucun signal continuity-only ne peut produire un RawTransactionIngress.

RUST-API-008

Le consumer productif n'arrive qu'en pre.006. Les adapters et projecteurs privés Block/BlockMeta/Slot restent donc sous #[cfg(test)], comme la chaîne Transaction/Status/hydration déjà qualifiée.

Aucun #[allow(dead_code)], #[expect(dead_code)] ou export public artificiel n'est ajouté.

Canaris

Block -> 3 signatures exactes dans l'ordre source, avec indexes non triés conservés
Block -> slot/network/filter context commun
Block -> méthode de provenance block_get_transaction
BlockMeta -> continuity-only slot/parent sans status
Slot -> continuity-only slot/parent/status
mapping exact Processed/Confirmed/Finalized/FirstShredReceived/Completed/CreatedBank/Dead
Debug continuity sans filter names ni RAW material
scanner continuity sans signature/transaction/meta/payload/body/error/dead_error
impls réels YellowstoneBlockUpdate/YellowstoneBlockMetaUpdate/YellowstoneSlotUpdate présents
aucun open_standard_subscribe/next_update/get_block_observed
aucune dépendance directe Config/Backfill/backend/reqwest/tonic/proto

Décisions prises

Block est une troisième famille de discovery/hydration, pas un second pipeline RAW
BlockMeta et Slot sont continuity-only
les compteurs BlockMeta ne prouvent jamais la complétude
dead_error ne traverse jamais la frontière Worker
getBlock reste hors P0
reconnect/from_slot/ReplayInfo restent pre.008
activation source productive et coalescence restent pre.006

Questions ouvertes

Aucune question ouverte ne bloque pre.005.

Restent réservés :

source task productive + coalescence : pre.006
processing frontier run-local : pre.007
reconnect/from_slot/ReplayInfo : pre.008
races/retry/backpressure : pre.009

Fichiers ajoutés

deltas/0.3.12/pre.005.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_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/release_completeness.rs
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs
docs/validation/029-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY.md

Fichiers supprimés

Aucun.

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

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

Les scanners source ciblés vérifient également l'absence d'I/O live prématurée, de get_block_observed, de dead_error dans l'adapter Slot et de dépendances d'implémentation directes interdites.

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

cargo, rustc et rustfmt ne sont pas installés dans l'environnement d'assemblage. Aucun résultat Cargo local n'est déclaré PASS.

Gate opérateur requis :

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

Non-claims

pas de source Yellowstone productive
pas de stream ouvert
pas de getBlock
pas de RAW direct depuis Block
pas de RAW depuis BlockMeta/Slot
pas de coalescence productive
pas de frontier
pas de reconnect/replay/repair Worker
pas de smoke live Worker