v0.3.13-pre.004
This commit is contained in:
267
deltas/0.3.13/pre.004.md
Normal file
267
deltas/0.3.13/pre.004.md
Normal file
@@ -0,0 +1,267 @@
|
||||
<!-- file: deltas/0.3.13/pre.004.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta 0.3.13-pre.004 — Standard Solana blockSubscribe RAW-direct qualifié
|
||||
|
||||
## Base requise
|
||||
|
||||
```text
|
||||
delivery précédente : 0.3.13-pre.003-fix.003
|
||||
Cargo base : 0.3.13-pre.3.fix.3
|
||||
delta base : deltas/0.3.13/pre.003-fix.003.md
|
||||
archive delta base : ksp-general-0.3.13-pre.003-fix.003.zip
|
||||
```
|
||||
|
||||
Le gate opérateur reçu sur cette base est vert pour toutes les commandes exécutées : `cargo fmt`, `cargo fmt --check`, audits Rust/Markdown, `cargo check --workspace`, Clippy strict et toutes les suites de `ksp-worker-raw-transaction-ingest-lib` (`75` unit, `4` cross-layer, `10` dependency-boundary, `17` hardening, `11` public-api, `4` release-completeness, `0` doc-test). Cette exécution ne contenait pas le test Transport ni les commandes `cargo tree`; ils ne sont donc pas déclarés PASS pour ce gate précis.
|
||||
|
||||
## Objectif
|
||||
|
||||
Ajouter la deuxième source Solana Standard WebSocket de `0.3.13` sans dupliquer Transport :
|
||||
|
||||
```text
|
||||
Solana standard WS blockSubscribe
|
||||
-> Full + Base64 + maxSupportedTransactionVersion=1 + showRewards=false
|
||||
-> qualification explicite Legacy / V0 / V1
|
||||
-> Common RAW direct par transaction
|
||||
-> admission centrale Worker
|
||||
-> Store
|
||||
```
|
||||
|
||||
La source ne possède pas de fallback HTTP. Tout bloc ou transaction non qualifiable échoue explicitement et sûrement.
|
||||
|
||||
## Version
|
||||
|
||||
```text
|
||||
livraison : 0.3.13-pre.004
|
||||
workspace.package.version : 0.3.13-pre.4
|
||||
archive : ksp-general-0.3.13-pre.004.zip
|
||||
```
|
||||
|
||||
`Cargo.toml` passe également de la version de fichier `545` à `546`.
|
||||
|
||||
## Source Standard Block
|
||||
|
||||
Nouvelle surface publique Worker :
|
||||
|
||||
```text
|
||||
RawTransactionIngestStandardBlockSource
|
||||
RawTransactionIngestRuntimeResources::from_standard_block_source
|
||||
RawTransactionIngestRuntimeResources::try_push_standard_block_source
|
||||
```
|
||||
|
||||
Construction caller-composed :
|
||||
|
||||
```text
|
||||
WsEndpointSettings kind solana_standard
|
||||
SolanaBlockSubscribeFilter
|
||||
SolanaCommitment Confirmed ou Finalized
|
||||
```
|
||||
|
||||
La construction est sans I/O. Elle valide le protocole, le commitment, le réseau et la représentation sûre provider/endpoint avant spawn.
|
||||
|
||||
Au runtime, la source réutilise exclusivement :
|
||||
|
||||
```text
|
||||
SolanaStandardWsSession::connect
|
||||
SolanaStandardWsSession::block_subscribe
|
||||
```
|
||||
|
||||
Configuration exacte :
|
||||
|
||||
```text
|
||||
encoding = Base64
|
||||
transactionDetails = Full
|
||||
maxSupportedTransactionVersion = 1
|
||||
showRewards = false
|
||||
```
|
||||
|
||||
Aucun client WebSocket direct, `getBlock`, `getTransaction`, `reqwest`, `tokio-tungstenite`, `tonic` ou SDK provider n'est ajouté au Worker.
|
||||
|
||||
## Qualification RAW-direct
|
||||
|
||||
La version est fail-closed :
|
||||
|
||||
```text
|
||||
Legacy -> RawTransactionVersion::Legacy
|
||||
0 -> RawTransactionVersion::Number(0)
|
||||
1 -> RawTransactionVersion::Number(1)
|
||||
>1 -> source.standard_block_transaction_version_unsupported
|
||||
omise/null -> source.standard_block_transaction_version_unqualified
|
||||
```
|
||||
|
||||
Le matériau direct conserve :
|
||||
|
||||
```text
|
||||
signature embarquée dans le wire Base64
|
||||
slot
|
||||
blockTime
|
||||
meta
|
||||
version qualifiée
|
||||
transactionIndex dans le bloc
|
||||
```
|
||||
|
||||
Les fixtures locales construisent et sérialisent des wires Legacy, V0 et V1 avec les types publics de `ksp-raw-transaction-lib`, puis vérifient le Common RAW canonique obtenu. La preuve V1 ne repose donc pas uniquement sur une étiquette `version=1`.
|
||||
|
||||
La parité historique `blockSubscribe` / `getBlock` Legacy reste déjà matérialisée dans `ksp-job-backfill-lib/tests/ws_raw_parity.rs`; `pre.004` rejoue localement les matérialisations Legacy/V0 et ajoute la qualification V1.
|
||||
|
||||
## block:null et formes ambiguës
|
||||
|
||||
Les cas suivants sont des fautes sûres avant progression de frontier :
|
||||
|
||||
```text
|
||||
context.slot différent du slot de notification
|
||||
notification err non null
|
||||
block null
|
||||
transactions omitted/null
|
||||
transaction non Base64
|
||||
version omise/null/>1
|
||||
signature embarquée invalide
|
||||
transaction index non représentable en u32
|
||||
```
|
||||
|
||||
`block: null` n'est jamais assimilé à un bloc vide ou à un slot traité. Le décodage Transport qui distingue `block:null` et `err` est conservé tel quel.
|
||||
|
||||
Pour un bloc non vide, le slot n'est enregistré settled qu'après l'admission réussie de toutes ses transactions. La voie RAW-direct n'incrémente pas `hydration_pending`; le processing frontier ne peut donc pas avancer transitoirement au milieu du traitement d'un même bloc et un stop/faute partiel ne devient jamais une progression.
|
||||
|
||||
## Identité logique et redaction
|
||||
|
||||
Le `source_key` Standard Block est dérivé de :
|
||||
|
||||
```text
|
||||
domain KSP live-source v1
|
||||
family = standard_block
|
||||
network
|
||||
safe provider identity
|
||||
safe endpoint identity
|
||||
commitment
|
||||
private block-filter fingerprint
|
||||
```
|
||||
|
||||
Les filtres `All` et `MentionsAccountOrProgram(pubkey)` sont distingués par empreinte privée. Le pubkey brut n'est pas recopié dans `Debug`, snapshot ou provenance textuelle.
|
||||
|
||||
Le bound global `1..32`, l'invariant réseau unique et le rejet transactionnel des doublons de `pre.002` s'appliquent à cette nouvelle famille.
|
||||
|
||||
## Activation runtime
|
||||
|
||||
Le contrat reste volontairement mono-source avant `pre.007` :
|
||||
|
||||
```text
|
||||
1 source Yellowstone : productif
|
||||
1 source Standard Logs : productif
|
||||
1 source Standard Block : productif
|
||||
2..32 sources : composition validable
|
||||
start 2..32 : runtime_resources.multi_source_activation_pending avant spawn
|
||||
```
|
||||
|
||||
Aucune source configurée n'est silencieusement ignorée.
|
||||
|
||||
## Preuves ajoutées
|
||||
|
||||
Unit tests Worker :
|
||||
|
||||
```text
|
||||
validation protocole/commitment Standard Block
|
||||
source_key stable et filter-sensitive
|
||||
redaction filtre/url/source-key
|
||||
qualification exacte Legacy/V0/V1
|
||||
rejet version omise/null/>1
|
||||
wires Legacy/V0/V1 -> Common RAW direct avec signature/version/index exacts
|
||||
rejet duplicate Standard Block identity
|
||||
```
|
||||
|
||||
Canaris externes :
|
||||
|
||||
```text
|
||||
public_api : construction/composition depuis crate root
|
||||
dependency_boundary : façade Transport seulement, sans fallback HTTP/direct network crate
|
||||
hardening : block:null, erreurs, version, encoding et redaction explicites
|
||||
release_completeness : export et canaris pre.004 obligatoires
|
||||
```
|
||||
|
||||
## Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/README.md
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/USAGE.md
|
||||
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/public_api.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/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md
|
||||
docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md
|
||||
```
|
||||
|
||||
## Fichiers ajoutés
|
||||
|
||||
```text
|
||||
deltas/0.3.13/pre.004.md
|
||||
```
|
||||
|
||||
## Fichiers supprimés
|
||||
|
||||
```text
|
||||
aucun
|
||||
```
|
||||
|
||||
## Non-claims
|
||||
|
||||
`pre.004` ne prétend pas :
|
||||
|
||||
```text
|
||||
Helius transactionSubscribe productif
|
||||
HTTP live block polling
|
||||
supervision simultanée de plusieurs sources
|
||||
fanout Store d'observations multi-source
|
||||
fallback HTTP getBlock/getTransaction pour Standard Block
|
||||
RAW-direct pour version >1 ou version ambiguë
|
||||
block:null considéré comme progression
|
||||
nouvelle dépendance externe
|
||||
```
|
||||
|
||||
## Validation dans l'environnement d'assemblage
|
||||
|
||||
Le toolchain Rust/Cargo/Rustfmt n'est pas disponible dans l'environnement d'assemblage. Les commandes Cargo post-`pre.004` restent donc `NON EXÉCUTÉ LOCAL`. Les audits statiques KSP, le scan des identifiants normatifs et le contrôle exhaustif du diff sont exécutés avant packaging et leurs résultats finaux sont consignés ci-dessous avant livraison.
|
||||
|
||||
## Gate opérateur requis avant pre.005
|
||||
|
||||
```bash
|
||||
cargo fmt --all -- --check
|
||||
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-onchain-transport-lib
|
||||
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
|
||||
```
|
||||
|
||||
`pre.005` ne doit pas commencer si ce gate révèle une anomalie.
|
||||
|
||||
## Résultats statiques finaux de l'assemblage
|
||||
|
||||
```text
|
||||
General Rust rule audit: clean
|
||||
Rust export completeness audit: 0 candidate(s)
|
||||
KSP workspace Rust rule audit: clean
|
||||
Markdown table audit: clean (340 tables, 835 files)
|
||||
Normative rule definitions: 489
|
||||
Unique normative IDs: 489
|
||||
Duplicates: 0
|
||||
```
|
||||
|
||||
Contrôle exhaustif avant packaging :
|
||||
|
||||
```text
|
||||
12 fichiers existants modifiés
|
||||
1 fichier ajouté
|
||||
0 fichier supprimé
|
||||
12/12 headers versionnés incrémentés exactement de +1
|
||||
Cargo.toml hors header : uniquement workspace.package.version 0.3.13-pre.3.fix.3 -> 0.3.13-pre.4
|
||||
aucune dépendance ajoutée, supprimée ou modifiée
|
||||
```
|
||||
Reference in New Issue
Block a user