v0.3.12-pre.006
This commit is contained in:
219
deltas/0.3.12/pre.006.md
Normal file
219
deltas/0.3.12/pre.006.md
Normal file
@@ -0,0 +1,219 @@
|
||||
<!-- file: deltas/0.3.12/pre.006.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.3.12-pre.006` — source Yellowstone productive + coalescence bornée
|
||||
|
||||
## Base requise
|
||||
|
||||
```text
|
||||
0.3.12-pre.005-fix.001
|
||||
workspace.package.version = 0.3.12-pre.5.fix.1
|
||||
```
|
||||
|
||||
Le gate opérateur communiqué pour cette base est entièrement vert : audits Rust/Markdown, `cargo check --workspace`, Clippy strict et 56 tests Worker avec toutes les suites d'intégration associées.
|
||||
|
||||
## Objectif
|
||||
|
||||
Ouvrir la première source Yellowstone réellement productive en réutilisant exclusivement les moteurs déjà qualifiés :
|
||||
|
||||
```text
|
||||
Transport Yellowstone session
|
||||
adapters Transaction/Status/Block
|
||||
hydration HTTP getTransaction observed
|
||||
coalescence bornée
|
||||
RawTransactionIngress existant
|
||||
SourceTasks JoinSet existant
|
||||
supervisor/admission/persistence existants
|
||||
```
|
||||
|
||||
La tranche ne crée ni processing frontier, ni politique Worker de reconnect/from_slot/ReplayInfo, ni repair historique.
|
||||
|
||||
## Version
|
||||
|
||||
```text
|
||||
workspace.package.version = 0.3.12-pre.6
|
||||
```
|
||||
|
||||
## Source task productive
|
||||
|
||||
`RawTransactionIngestWorker::start_with_runtime_resources` consomme maintenant les ressources validées et ajoute exactement un child source au `JoinSet` privé existant.
|
||||
|
||||
Le child appelle uniquement la façade Transport :
|
||||
|
||||
```text
|
||||
YellowstoneGrpcChannel::open_standard_subscribe
|
||||
SolanaYellowstoneGrpcSubscribeSession::next_update
|
||||
SolanaYellowstoneGrpcSubscribeSession::close
|
||||
```
|
||||
|
||||
Aucun client `tonic`, `reqwest`, proto Yellowstone ou SDK provider n'est instancié par le Worker.
|
||||
|
||||
L'ouverture est stop-preemptible. Après stop/fault, les hydrations privées sont abort/join et la session est fermée via Transport. Toute erreur distante est réduite à un `ErrorCode` KSP sûr avant de remonter au supervisor, qui conserve son mapping stable `source_failed`.
|
||||
|
||||
## Activation des adapters
|
||||
|
||||
Les adapters `Transaction`, `TransactionStatus`, `Block`, `BlockMeta` et `Slot` sortent de `#[cfg(test)]` car ils possèdent désormais un consumer productif réel, conformément à `RUST-API-008`.
|
||||
|
||||
Le routage est :
|
||||
|
||||
```text
|
||||
Transaction/TransactionStatus/Block -> candidat hydration
|
||||
BlockMeta/Slot -> continuity-only, aucune admission RAW
|
||||
Account/Entry/Ping/Pong -> ignorés par le vertical RAW
|
||||
```
|
||||
|
||||
Le wrapper fixture `hydrate_yellowstone_signal` reste test-only ; le chemin productif sépare fetch HTTP et finalisation afin de permettre le fan-out coalescé.
|
||||
|
||||
## Coalescence
|
||||
|
||||
La clé est exactement `(network, signature, commitment)`.
|
||||
|
||||
Un `RawTransactionIngestHydrationCoordinator` privé possède :
|
||||
|
||||
```text
|
||||
BTreeMap pending
|
||||
JoinSet hydration
|
||||
max_in_flight = settings.persistence_concurrency()
|
||||
max_pending_signals = MAX_RAW_TRANSACTION_INGEST_ADMISSION_QUEUE_CAPACITY
|
||||
```
|
||||
|
||||
Des signaux Transaction/Status/Block identiques partagent donc un seul `getTransaction` in-flight. À la complétion, la réponse HTTP observée est finalisée séparément pour chaque signal afin de conserver family/filter/observed_at et donc des provenances distinctes.
|
||||
|
||||
Aucun cache terminé n'est conservé. La saturation applique de la backpressure au stream et ne provoque aucun drop silencieux.
|
||||
|
||||
## Hydration/admission
|
||||
|
||||
Le fetch reste strictement :
|
||||
|
||||
```text
|
||||
get_transaction_observed
|
||||
base64
|
||||
confirmed | finalized
|
||||
maxSupportedTransactionVersion = 0
|
||||
```
|
||||
|
||||
La finalisation conserve tous les guards `pre.004` : network, source route, slot, transaction index, signature wire et provenance composite depuis le winner HTTP réel. `null` ne produit aucun ingress.
|
||||
|
||||
Les ingresses disponibles passent uniquement par le sender central créé par `RawTransactionAdmission::new`; la persistence Normal reste inchangée.
|
||||
|
||||
## Continuité
|
||||
|
||||
`BlockMeta` et `Slot` sont réellement reçus/projetés dans le source task, mais restent continuity-only. Aucune frontier n'est maintenue et aucun gap n'est interprété dans cette tranche.
|
||||
|
||||
Le snapshot reconnect/replay de Transport n'est pas encore consommé par le Worker ; cette responsabilité reste `pre.008`.
|
||||
|
||||
## API / dépendances
|
||||
|
||||
```text
|
||||
aucun nouvel export public
|
||||
aucun nouveau module
|
||||
aucune nouvelle dépendance Cargo
|
||||
Worker -> Transport reste l'unique edge live
|
||||
Worker -> Config/Backfill/Store backend reste interdit
|
||||
```
|
||||
|
||||
## Canaris ajoutés/ajustés
|
||||
|
||||
```text
|
||||
source runtime réellement supervisée par SourceTasks
|
||||
open_standard_subscribe/next_update/close présents
|
||||
coalescence key network/signature/commitment
|
||||
Transaction + Status identiques -> une pending key / une hydration task
|
||||
bounded pending/in-flight
|
||||
stop preemptible
|
||||
abort/join hydration
|
||||
aucun getBlock/get_block_observed
|
||||
aucun remote error/dead_error/secret
|
||||
public API et module inventory inchangés
|
||||
anciens canaris pre.003-pre.005 ajustés de offline -> private/Transport-only
|
||||
```
|
||||
|
||||
## Décisions prises
|
||||
|
||||
```text
|
||||
coalescence productive dans le Worker, retry réseau reste Transport
|
||||
concurrence hydration bornée par le budget de concurrence runtime déjà validé
|
||||
pending total borné par la borne maximale d'admission publiée
|
||||
fan-out après fetch partagé, avant admission
|
||||
source close via Transport uniquement
|
||||
frontier/reconnect/replay non anticipés
|
||||
```
|
||||
|
||||
## Questions ouvertes
|
||||
|
||||
Aucune question ouverte ne bloque `pre.006`.
|
||||
|
||||
Restent réservés :
|
||||
|
||||
```text
|
||||
processing frontier run-local : pre.007
|
||||
reconnect/from_slot/ReplayInfo : pre.008
|
||||
races/retry/backpressure final : pre.009
|
||||
cross-layer completeness/security : pre.010
|
||||
live opt-in : pre.011
|
||||
```
|
||||
|
||||
## Fichiers ajoutés
|
||||
|
||||
```text
|
||||
deltas/0.3.12/pre.006.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.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
|
||||
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas
|
||||
```
|
||||
|
||||
Des scanners statiques ciblés vérifient également le confinement Transport, l'absence de `get_block_observed`, l'absence de dépendances directes interdites, la clé de coalescence et l'inventaire public/module inchangé.
|
||||
|
||||
## Validations non exécutées dans l'environnement d'assemblage
|
||||
|
||||
`cargo`, `rustc` et `rustfmt` ne sont pas disponibles dans l'environnement d'assemblage. Aucun gate Cargo local n'est revendiqué.
|
||||
|
||||
## 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 processing frontier
|
||||
pas d'interprétation reconnect/replay Worker
|
||||
pas de from_slot Worker
|
||||
pas de ReplayInfo Worker
|
||||
pas de détection de gap de rétention
|
||||
pas de repair/backfill implicite
|
||||
pas de getBlock
|
||||
pas de nouveau backend/Config edge
|
||||
pas de smoke live revendiqué
|
||||
```
|
||||
Reference in New Issue
Block a user