189 lines
6.2 KiB
Markdown
189 lines
6.2 KiB
Markdown
<!-- file: deltas/0.3.12/pre.005.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta `0.3.12-pre.005` — Block transactionnel + BlockMeta/Slot continuity-only
|
|
|
|
## Base requise
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 à :
|
|
|
|
```text
|
|
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
|
|
|
|
```text
|
|
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
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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
|
|
|
|
```text
|
|
deltas/0.3.12/pre.005.md
|
|
```
|
|
|
|
## Fichiers modifiés
|
|
|
|
```text
|
|
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
|
|
|
|
```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
|
|
```
|
|
|
|
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 :
|
|
|
|
```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
|
|
```
|
|
|
|
## Non-claims
|
|
|
|
```text
|
|
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
|
|
```
|