Files
khadhroony-solana-project/docs/validation/022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md

15 KiB
Raw Blame History

Validation 0.3.5 — Interface passive acquisition events

1. Portée

Ce document est ouvert par 0.3.5-pre.001 et corrigé par 0.3.5-pre.001-fix.001. Le fix enregistre les corrections sémantiques du gate ainsi que le gate Cargo réellement rejoué par l'opérateur sur 0.3.5-pre.1.

Base :

v0.3.4
workspace.package.version = 0.3.4

Version de travail :

0.3.5-pre.1

2. Gate d'entrée v0.3.4

Le log opérateur fourni avec l'archive indique un gate stable v0.3.4 propre : audits Rust/Markdown, cargo check, Clippy, tests ciblés des crates, cargo test --workspace, ksp-store-lib --no-default-features et graphes Store ont été exécutés sans échec visible ; les smokes réseau restent explicitement ignorés/opt-in.

Cette preuve est l'entrée de 0.3.5. Elle n'est pas réétiquetée comme validation exécutée dans l'environnement d'assemblage de pre.001.

3. Gate de lecture pre.001

Contrôle Résultat Preuve / décision
règles globales relues PASS familles KSP-API/TRANSPORT/STORE/NOTIFY/PROC/REL et DEP applicables relues
architecture durable relue PASS Interface passif, Transport protocol/runtime, Store persistant, composition owner des conversions
fondation Interface stable relue PASS surface Program petite ; dépendance normale Core-only
Store API RAW relu PASS RawTransaction* + RawAccount* restent Store-owned
Store/PostgreSQL 0.3.20.3.4 relu PASS RAW physique 10/10 fermé ; aucune rétention account
surfaces HTTP/WS/gRPC/Helius relues PASS status/log/slot/vote/account/transaction/block/Entry inventoriés
documentation Solana courante auditée PASS slotSubscribe, slotsUpdatesSubscribe, status/log/vote/account/program, getTransaction/getBlock
Yellowstone upstream courant audité PASS SlotStatus et familles SubscribeUpdate courantes
Helius courant audité PASS standard WSS préserve wire Solana ; Enhanced transactionSubscribe reste extension provider
producer/consumer inventory PASS lifecycle slot 7 stages admis ; TransactionExecutionEvent rouvert comme candidat actif
threat model PASS mega enum, Option soup, Store duplication, mapping lifecycle explicite et provider promotion couverts
sizing release PASS 8 prereleases prévues avant rel.001 ; second candidat soumis à gate dédié

4. Matrice de décision par famille

Famille Décision Owner Motif déterminant
slot lifecycle intersection ADMIS Interface 7 faits compacts normalisés ; détails protocol/provider restent Transport
transaction execution CANDIDAT ACTIF Interface si gate passe intersection candidate slot + signature + outcome sur Solana/Yellowstone/Helius
logs realtime IDÉE DIFFÉRÉE Interface si futur gate payload variable/bornes/consumer non démontrés ; ne pas mélanger avec execution
signature commitment/snapshot REPORTÉ Transport HTTP snapshot != WS one-shot commitment ; distinct de l'exécution
vote REPORTÉ Transport gossip pré-consensus != transaction qualifiée is_vote
account/program REJET Interface Store/Transport risque de doublon RawAccountState/observation ou wrapper Transport
transaction REJET Interface Store/Transport RawTransaction/observation déjà persistants
block REJET Interface Transport conteneur/payload d'acquisition ; aucun besoin passif transversal démontré
Yellowstone Entry REPORTÉ Transport DTO mono-producer aujourd'hui ; un futur fait transversal KSP serait réaudité pour Interface
persisted-data available notification REJET Interface Store API ownership normatif KSP-NOTIFY-001..006
Helius Enhanced transaction PRODUCTEUR CANDIDAT Transport DTO / Interface fact DTO provider-specific ; projection possible seulement vers un fait commun admis

5. Intersection lifecycle retenue

Stage Interface prévu Producer Solana standard Producer Yellowstone Verdict Détails exclus du contrat commun
Processed slotSubscribe Processed PASS WS parent/root ; Yellowstone filters/created_at/parent
FirstShredReceived slotsUpdates::FirstShredReceived FirstShredReceived PASS timestamps/metadata source
Completed slotsUpdates::Completed Completed PASS timestamps/metadata source
CreatedBank slotsUpdates::CreatedBank CreatedBank PASS parent reste dans le DTO Transport riche
Dead slotsUpdates::Dead Dead PASS diagnostic err/dead_error et timestamp restent Transport
OptimisticallyConfirmed slotsUpdates::OptimisticConfirmation Confirmed PASS nom KSP conserve l'optimistic confirmation ; delivery/metadata restent Transport
Rooted rootSubscribe / slotsUpdates::Root Finalized PASS nom KSP conserve le fait root ; Finalized reste un label Yellowstone source
slotsUpdates::Frozen FAIL pas d'intersection

6. Validation anti-Option-soup

Les modèles suivants sont explicitement non admis par le gate :

TransactionStatusObservation {
    confirmations?: ...,
    confirmation_status?: ...,
    received?: ...,
    is_vote?: ...,
    transaction_index?: ...,
    logs?: ...,
    ...
}

SlotLifecycleEvent {
    parent?: ...,
    root?: ...,
    timestamp?: ...,
    dead_error?: ...,
    provider?: ...,
    ...
}

La surface admise reste conceptuellement :

SlotLifecycleEvent { slot, stage }

Le candidat séparé, non encore admis, reste :

TransactionExecutionEvent { slot, signature, outcome }

7. Validation anti-duplication Store

Modèle Store stable Action 0.3.5 Justification
RawTransaction inchangé payload durable/replayable
RawTransactionObservation inchangé provenance persistante
RawAccountState inchangé état account durable
RawAccountObservation inchangé observation persistante
pagination/cursors RAW inchangés contrats de navigation Store
retention/tombstone transaction inchangés lifecycle de persistence Store
notification after commit non implémentée ici ownership Store API réservé par KSP-NOTIFY-*

Canari conceptuel : aucun futur fichier source Interface de 0.3.5 ne doit importer ksp_store_api, ksp_store_lib ou copier leurs modèles.

8. Validation dependency/ownership

État de l'archive stable inspecté :

crates/ksp-interface-lib/Cargo.toml
    runtime dependency = ksp-core-lib seulement

Cible 0.3.5 :

ksp-interface-lib -> ksp-core-lib
ksp-interface-lib -X-> ksp-onchain-transport-lib
ksp-interface-lib -X-> ksp-store-api
ksp-interface-lib -X-> ksp-store-lib
ksp-interface-lib -X-> ksp-program-api
ksp-interface-lib -X-> serde/tracing/tokio/channel runtime additions

Le gate opérateur de pre.001 confirme cargo check --workspace, Clippy et les tests ksp-interface-lib. Les graphes cargo tree restent réservés au gate technique final de la release.

9. Consumer concret retenu

Consumer proche documenté par l'architecture : futur worker RAW live / composition d'acquisition.

Usage possible sans dépendance protocol-specific :

Solana standard WS -----------+
                              +-> converter composition -> SlotLifecycleEvent -> réaction lifecycle du consumer
Yellowstone gRPC -------------+

0.3.6 backfill n'est pas forcé d'utiliser ce type ; il reste une composition historique Transport + Store.

10. Threat gates

Gate Attendu 0.3.5 Statut pre.001
mega enum absent PLAN PASS
protocol/provider enum leakage absent PLAN PASS
timestamp semantics conflated absent PLAN PASS
root/finalized label confusion évitée par le stage KSP Rooted PLAN PASS
optimistic/confirmed label confusion évitée par le stage KSP OptimisticallyConfirmed PLAN PASS
dead diagnostic in shared API absent PLAN PASS
RAW Store duplication absent PLAN PASS
event persistence absent PLAN PASS
event bus/runtime absent PLAN PASS
network id duplicated from Store absent PLAN PASS
cross-network use composition doit conserver son scope réseau À CANARIER
public enum evolution SlotLifecycleStage doit être non-exhaustive À IMPLÉMENTER
Core-only graph aucune dependency nouvelle PASS opérateur
external consumer type consommable depuis crate externe À IMPLÉMENTER

11. Fichiers de pre.001

Ajoutés :

docs/plans/026-V0_3_5_INTERFACE_ACQUISITION_EVENTS_PLAN.md
docs/validation/022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md
deltas/0.3.5/pre.001.md

Modifié :

Cargo.toml

Aucun autre fichier ne doit changer dans cet overlay.

12. Validations statiques de l'overlay initial

L'overlay pre.001 avait exécuté les audits disponibles 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/0.3.5
-> Markdown table audit: clean (251 table(s), 137 file(s))

13. Gate opérateur pre.001 reçu avant fix.001

L'opérateur a rejoué depuis un cargo clean :

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/0.3.5
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-interface-lib

Résultat : PASS intégral.

Preuves synthétiques :

General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
KSP workspace Rust rule audit: clean
Markdown table audit: clean (251 table(s), 137 file(s))
cargo check --workspace -> PASS
cargo clippy --workspace --all-targets -> PASS
ksp-interface-lib unit tests -> 10 passed
ksp-interface-lib dependency_boundary -> 4 passed
ksp-interface-lib external_consumer -> 1 passed
ksp-interface-lib public_api -> 5 passed
ksp-interface-lib release_completeness -> 3 passed
doc-tests -> 0 failed

pre.001-fix.001 est documentation-only ; il ne modifie ni Cargo ni Rust. L'opérateur doit néanmoins rejouer les deux audits Markdown/Rust après application du fix pour confirmer l'overlay final.

14. Exit gate pre.001-fix.001

Le gate corrigé impose désormais :

workspace.package.version = 0.3.5-pre.1 inchangée
SlotLifecycle admis avec 7 stages
stages = Processed / FirstShredReceived / Completed / CreatedBank / Dead / OptimisticallyConfirmed / Rooted
Frozen reste hors intersection
TransactionExecutionEvent = candidat actif mais non encore admis
TransactionLogEvent = idée différée, distincte de l'exécution
getSignatureStatuses/signatureSubscribe = snapshot/commitment Transport, non fusionnés avec execution
Helius transactionSubscribe et Yellowstone Entry restent des DTOs Transport
un futur fait provider-neutral produit par une extension provider peut appartenir à Interface après gate
aucun fichier Rust/Transport/Store/Cargo n'est modifié par le fix