8.3 KiB
Delta 0.3.15-pre.002 — capability WebSocket typed par endpoint
Base requise
0.3.15-pre.001-fix.001 appliquée
workspace.package.version = 0.3.15-pre.1
deltas/0.3.15/pre.001-fix.001.md présent
Gate de la base
Le gate opérateur communiqué après pre.001-fix.001 est propre :
cargo fmt --all -- --check : PASS
General Rust rule audit : clean
Rust export completeness audit : 0 candidate(s)
KSP workspace Rust rule audit : clean
Markdown table audit : clean (318 table(s), 185 file(s))
cargo check --workspace : PASS
Ce gate qualifie la base directe de pre.002 avant toute modification Transport.
Objectif
Implémenter strictement la tranche pre.002 du plan 036 :
ajouter une déclaration WebSocket typed exacte par subscription au niveau Transport
réutiliser WsSubscriptionKind comme identité de capability
conserver la compatibilité des WsEndpointSettings existants
faire de l'absence de déclaration un état fail-closed pour toute preuve de capability
valider les déclarations explicites sans inférence par provider
borner les capabilities à la surface réellement portée par WsProtocolKind
exposer la preuve via la façade crate-root déjà existante
documenter l'usage version-neutral
ajouter les tests unitaires/public API/release completeness
Cette tranche ne mappe encore aucun champ Config et ne modifie aucun constructeur Worker. Ces responsabilités restent respectivement pre.003 et pre.004.
Contrat WsEndpointSettings
WsEndpointSettings conserve son constructeur historique new(...) sans argument supplémentaire afin de ne pas forcer artificiellement Config à évoluer dans la même tranche.
Un endpoint possède désormais l'état privé :
subscription_capabilities: Option<Vec<WsSubscriptionKind>>
Sémantique :
None = capabilities non déclarées ; compatibilité legacy ; aucune preuve positive
Some(vec) = déclaration explicite des seules familles annoncées pour cet endpoint
Le builder public :
with_subscription_capabilities(Vec<WsSubscriptionKind>)
permet d'attacher la déclaration exacte sans introduire de second enum ni de second registre de méthodes.
Les getters publics :
subscription_capabilities() -> Option<&[WsSubscriptionKind]>
supports_subscription(WsSubscriptionKind) -> bool
restent accessibles via WsEndpointSettings, déjà réexporté depuis la racine de crate.
supports_subscription(...) est volontairement fail-closed :
capability non déclarée -> false
capability incompatible avec le protocole -> false même avant validate()
capability explicitement déclarée et protocol-compatible -> true
Validation Transport
WsTransportSettings::validate() rejette maintenant une déclaration explicite :
vide
dupliquée
incompatible avec le WsProtocolKind de l'endpoint
Les erreurs réutilisent ERROR_CODE_INVALID_SETTINGS et n'exposent que :
field
subscription_kind stable
protocol stable
Aucune URL, credential, source key ou payload n'est ajouté aux contextes d'erreur.
Partition protocolaire
La validation est protocol-owned et ne branche jamais sur provider.
SolanaStandard admet les neuf familles standard actuelles :
Account
Block
Logs
Program
Root
Signature
Slot
SlotsUpdates
Vote
HeliusLaserStream admet la surface déjà portée par sa façade typed :
Account
Logs
Program
Root
Signature
Slot
SlotsUpdates
HeliusTransaction
Il n'admet donc pas Block ni Vote.
Cette partition est écrite positivement. Une future variante de WsSubscriptionKind ne devient donc pas implicitement compatible avec un protocole existant.
Absence d'inférence provider
Aucune règle du type :
provider == helius -> capability X
provider == publicnode -> capability Y
n'est ajoutée.
Le provider reste un descriptor ouvert. La preuve de capability est attachée explicitement à l'endpoint et devra être alimentée par Config en pre.003.
Documentation d'usage
ksp-onchain-transport-lib/USAGE.md montre maintenant la déclaration typed sur un endpoint standard et documente les deux propriétés importantes :
absence de déclaration != support implicite
validation explicite des listes vide/dupliquée/protocol-incompatible
Le guide reste version-neutral et ne sert pas de journal de gate.
Tests ajoutés
Unitaires ws_settings :
legacy undeclared reste structurally valide mais fail-closed
capabilities standard exactes et typed
liste explicite vide rejetée
capability dupliquée rejetée
HeliusTransaction rejeté sous SolanaStandard
Block rejeté sous HeliusLaserStream
Logs + HeliusTransaction admis sous HeliusLaserStream
Block/Vote restent non supportés sous HeliusLaserStream
supports_subscription reste false sur capability protocol-incompatible avant validate
Public API :
builder/getter/support check consommables depuis la crate root
aucun nouveau module public requis
Release completeness :
état capability porté par WsEndpointSettings
WsSubscriptionKind réutilisé directement
partition protocolaire présente
absence de branche provider-name pour attribuer des capabilities
Fichiers ajoutés
deltas/0.3.15/pre.002.md
Fichiers modifiés
Cargo.toml
crates/ksp-onchain-transport-lib/USAGE.md
crates/ksp-onchain-transport-lib/src/ws_settings.rs
crates/ksp-onchain-transport-lib/unit_tests/ws_settings.rs
crates/ksp-onchain-transport-lib/tests/public_api.rs
crates/ksp-onchain-transport-lib/tests/release_completeness.rs
Fichiers supprimés
aucun
Version Cargo
Cette tranche modifie le contrat/runtime settings Transport. Conformément à la policy de versioning :
header Cargo.toml : 594 -> 595
workspace.package.version : 0.3.15-pre.1 -> 0.3.15-pre.2
Versions des fichiers modifiés :
ksp-onchain-transport-lib/USAGE.md : 26 -> 27
ksp-onchain-transport-lib/src/ws_settings.rs : 4 -> 5
ksp-onchain-transport-lib/unit_tests/ws_settings.rs : 2 -> 3
ksp-onchain-transport-lib/tests/public_api.rs : 54 -> 55
ksp-onchain-transport-lib/tests/release_completeness.rs : 46 -> 47
Frontières préservées
aucun changement Config/schema/composite
aucun changement Worker
aucun changement Store
aucune crate Desk ajoutée
aucun Start/Stop Worker applicatif
aucun I/O réseau supplémentaire
aucune nouvelle dépendance
aucune nouvelle feature
aucun provider SDK
aucune inférence capability par provider name
aucun nouveau type public nécessitant une réexportation lib.rs
Audits statiques d'assemblage
Après modification et ajout du delta :
General Rust rule audit : clean
Rust export completeness audit : 0 candidate(s)
KSP workspace Rust rule audit : clean
Markdown table audit : clean (318 table(s), 186 file(s))
Gates Cargo non exécutés dans l'environnement d'assemblage
L'environnement d'assemblage ne fournit pas Cargo/Rustfmt. Aucun faux PASS n'est revendiqué pour :
cargo fmt --all -- --check
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p ksp-onchain-transport-lib --all-targets --all-features
Ils doivent être exécutés par l'opérateur après application du delta.
Archive d'échange
Livraison attendue selon VER-ARCHIVE-004 :
ksp-general-0.3.15-pre.002.zip
Contenu exact :
Cargo.toml
crates/ksp-onchain-transport-lib/USAGE.md
crates/ksp-onchain-transport-lib/src/ws_settings.rs
crates/ksp-onchain-transport-lib/unit_tests/ws_settings.rs
crates/ksp-onchain-transport-lib/tests/public_api.rs
crates/ksp-onchain-transport-lib/tests/release_completeness.rs
deltas/0.3.15/pre.002.md
Aucun fichier stable inchangé, lockfile, cache, sortie de build ou artefact temporaire n'est inclus.
Gate opérateur après application
cargo fmt --all
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/0.3.15
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p ksp-onchain-transport-lib --all-targets --all-features
Si ce gate est propre, pre.003 mappe cette capability depuis Config et prépare le composite/profils Raw Transaction Ingest Desk, sans frontend.