v0.3.15-pre.002

This commit is contained in:
2026-09-13 06:07:42 +02:00
parent 84ef8bb1f1
commit 8ea261d3a4
7 changed files with 532 additions and 9 deletions

316
deltas/0.3.15/pre.002.md Normal file
View File

@@ -0,0 +1,316 @@
<!-- file: deltas/0.3.15/pre.002.md -->
<!-- version: 1 -->
# Delta `0.3.15-pre.002` — capability WebSocket typed par endpoint
## Base requise
```text
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 :
```text
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` :
```text
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é :
```text
subscription_capabilities: Option<Vec<WsSubscriptionKind>>
```
Sémantique :
```text
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 :
```text
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 :
```text
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 :
```text
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 :
```text
vide
dupliquée
incompatible avec le WsProtocolKind de l'endpoint
```
Les erreurs réutilisent `ERROR_CODE_INVALID_SETTINGS` et n'exposent que :
```text
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 :
```text
Account
Block
Logs
Program
Root
Signature
Slot
SlotsUpdates
Vote
```
`HeliusLaserStream` admet la surface déjà portée par sa façade typed :
```text
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 :
```text
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 :
```text
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` :
```text
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 :
```text
builder/getter/support check consommables depuis la crate root
aucun nouveau module public requis
```
Release completeness :
```text
é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
```text
deltas/0.3.15/pre.002.md
```
## Fichiers modifiés
```text
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
```text
aucun
```
## Version Cargo
Cette tranche modifie le contrat/runtime settings Transport. Conformément à la policy de versioning :
```text
header Cargo.toml : 594 -> 595
workspace.package.version : 0.3.15-pre.1 -> 0.3.15-pre.2
```
Versions des fichiers modifiés :
```text
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
```text
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 :
```text
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 :
```text
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` :
```text
ksp-general-0.3.15-pre.002.zip
```
Contenu exact :
```text
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
```bash
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.