Files
khadhroony-solana-project/docs/validation/022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md
2026-08-31 09:45:27 +02:00

14 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. Il enregistre uniquement des constats d'audit et des décisions de gate réellement effectués ; aucun test Cargo de 0.3.5 n'est déclaré PASS dans cette tranche tant qu'il n'a pas été rejoué par l'opérateur.

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 une intersection lifecycle slot justifiée ; autres familles non admises
threat model PASS mega enum, Option soup, Store duplication, timestamp/finality confusion et provider promotion couverts
sizing release PASS 7 prereleases prévues avant rel.001, une seule famille fonctionnelle

4. Matrice de décision par famille

Famille Décision Owner Motif déterminant
slot lifecycle intersection ADMIS Interface faits compacts exacts produits par Solana WS et Yellowstone ; pas de persistence
root/finality REPORTÉ Transport aucune équivalence normative exacte root <-> Finalized retenue
optimistic/confirmed REPORTÉ Transport aucune équivalence normative exacte retenue
logs realtime REPORTÉ Transport pas de seconde surface indépendante équivalente ; Yellowstone logs restent transaction/meta
transaction status REPORTÉ Transport HTTP snapshot != WS one-shot commitment != Yellowstone execution update
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 REJET Interface Transport surface protocolaire mono-producer
persisted-data available notification REJET Interface Store API ownership normatif KSP-NOTIFY-001..006
Helius Enhanced transaction REJET Interface Transport extension provider-specific

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
Frozen slotsUpdates::Frozen FAIL pas d'intersection
OptimisticConfirmation slotsUpdates::OptimisticConfirmation Confirmed FAIL noms/semantiques proches insuffisants sans équivalence normative exacte
Root rootSubscribe / slotsUpdates::Root Finalized FAIL aucune normalisation root/finalized inventée
Confirmed Confirmed FAIL producer standard exact absent
Finalized Finalized FAIL producer standard exact absent

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?: ...,
    ...
}

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

La surface visée reste conceptuellement :

SlotLifecycleEvent { slot, stage }

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 cargo tree ne peut pas être exécuté dans l'environnement d'assemblage actuel, où cargo est absent. Le gate opérateur est donc obligatoire sur l'overlay.

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 conflated absent PLAN PASS
optimistic/confirmed conflated absent 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 À REJOUER
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 exécutées dans l'environnement d'assemblage

Exécutables sans Cargo :

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

Le résultat réel est enregistré dans deltas/0.3.5/pre.001.md après exécution.

13. Validations opérateur requises

À appliquer sur le repository v0.3.4 après extraction de l'overlay :

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

Aucun cargo test -p ksp-program-api n'est requis par le contenu de pre.001, car aucun contrat public Interface n'est encore modifié. Il devient requis à partir de la première tranche qui change réellement la surface publique concernée.

14. Exit gate pre.001

pre.001 est prêt à livrer lorsque :

plan + validation + delta existent
workspace.package.version = 0.3.5-pre.1
une seule famille est admise : SlotLifecycle
stages admis = Processed / FirstShredReceived / Completed / CreatedBank / Dead
logs/status/vote/root/account/transaction/block/Entry/post-commit sont classés explicitement
aucun fichier Rust/Transport/Store n'est modifié
les audits statiques disponibles sont propres
les gates Cargo non exécutables sont explicitement laissés à l'opérateur