v0.2.7-pre.001
This commit is contained in:
245
deltas/0.2.7/pre.001.md
Normal file
245
deltas/0.2.7/pre.001.md
Normal file
@@ -0,0 +1,245 @@
|
||||
<!-- file: deltas/0.2.7/pre.001.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.2.7-pre.001` — audit WebSocket Solana, threat model, dependencies et sizing
|
||||
|
||||
## Base requise
|
||||
|
||||
Release stable attendue et auditée :
|
||||
|
||||
```text
|
||||
v0.2.6
|
||||
workspace.package.version = 0.2.6 avant ouverture
|
||||
```
|
||||
|
||||
L'archive Gitea fournie contient `deltas/0.2.6/rel.001.md` et annonce `0.2.7 — WebSocket Solana standard` comme prochaine release. Elle est utilisée comme autorité primaire.
|
||||
|
||||
## Type de livraison
|
||||
|
||||
```text
|
||||
ksp-general-0.2.7-pre.001.zip
|
||||
```
|
||||
|
||||
L'archive d'échange est un delta applicable depuis la racine de `v0.2.6` et contient uniquement les fichiers ajoutés/modifiés par cette tranche.
|
||||
|
||||
## Objet
|
||||
|
||||
`pre.001` reste volontairement un gate de lecture/audit/conception. Aucun client WebSocket, session runtime, wrapper subscribe ou dependency réseau nouvelle n'est encore ajouté.
|
||||
|
||||
Le gate :
|
||||
|
||||
- relit les règles, architecture, plans, validations et contrats réels requis ;
|
||||
- vérifie la stabilité `v0.2.6` et l'héritage HTTP/Wallet Desk ;
|
||||
- réaudite `ksp-onchain-transport-lib` et l'adapter Config actuel ;
|
||||
- constate que `std.transport` V1 est strictement HTTP et décide un V2 explicite HTTP+WS avec backward V1 ;
|
||||
- audite l'archive bot3 comme référence historique seulement ;
|
||||
- réaudite la documentation Solana WebSocket officielle du 2026-08-22 et cross-checke Agave `v3.1.8` sur les ambiguïtés ;
|
||||
- documente notamment `accountSubscribe.minContextSlot` comme option partagée mais ignorée en PubSub, et `vote.timestamp` comme `Option<i64>` ;
|
||||
- compte exactement **18 méthodes = 9 subscribe + 9 unsubscribe** ;
|
||||
- classe `block`, `slotsUpdates` et `vote` comme paires unstable ;
|
||||
- crée la matrice compliance initiale `010` ;
|
||||
- audite les crates candidates et retient `tokio-tungstenite 0.30.0` + `futures-util 0.3.34` pour une tranche ultérieure ;
|
||||
- fixe le modèle actor/session, IDs locaux, state machines, reconnect/resubscribe, continuity gaps, backpressure et shutdown ;
|
||||
- fixe les exigences de redaction URL/credentials et de bornes de ressources ;
|
||||
- regranularise la release jusqu'à un forecast nominal `pre.014` sans imposer ce numéro comme deadline.
|
||||
|
||||
## Décisions principales
|
||||
|
||||
### Cardinalité
|
||||
|
||||
```text
|
||||
endpoint -> N sessions physiques explicites -> N subscriptions par session
|
||||
aucun pool/scheduler automatique en 0.2.7
|
||||
```
|
||||
|
||||
### Identités
|
||||
|
||||
```text
|
||||
WsSessionId stable local KSP
|
||||
WsSubscriptionId stable local KSP
|
||||
remote id éphémère et interne, remappé après reconnect
|
||||
```
|
||||
|
||||
### Reconnect / resubscribe
|
||||
|
||||
```text
|
||||
budget fini
|
||||
backoff exponentiel borné
|
||||
pas de jitter en 0.2.7
|
||||
policy Never | ActiveSubscriptions
|
||||
ordre de restore déterministe par ID local
|
||||
continuity gap explicite après toute reconnexion
|
||||
aucune garantie lossless / aucun backfill HTTP Transport
|
||||
```
|
||||
|
||||
### Backpressure
|
||||
|
||||
```text
|
||||
command queue bounded
|
||||
notification queue bounded par subscription
|
||||
overflow -> subscription Failed explicite + best-effort unsubscribe
|
||||
aucun drop silencieux
|
||||
les autres subscriptions restent actives
|
||||
```
|
||||
|
||||
### Config
|
||||
|
||||
```text
|
||||
std.transport V1 reste strict et lisible
|
||||
std.transport V2 = HTTP existant + ws_defaults + profiles[].ws_endpoints
|
||||
Config -> Transport uniquement
|
||||
```
|
||||
|
||||
### Dependencies
|
||||
|
||||
```text
|
||||
tokio-tungstenite ^0.30, default-features=false, connect + rustls-tls-webpki-roots
|
||||
futures-util ^0.3, default-features=false, std + sink
|
||||
```
|
||||
|
||||
Ces dependencies sont **planifiées seulement** ; le graphe n'est pas modifié dans `pre.001`.
|
||||
|
||||
## Prévision souple recalibrée
|
||||
|
||||
```text
|
||||
pre.001 audit + matrice + threat model + dependencies + sizing
|
||||
pre.002 settings/IDs/states/snapshots/redaction
|
||||
pre.003 std.transport V2 + adapter Config
|
||||
pre.004 actor session physique + deps WS + local server
|
||||
pre.005 limits/control/cancellation/shutdown
|
||||
pre.006 registry + generic subscribe/unsubscribe + channels typed
|
||||
pre.007 reconnect/resubscribe/gap/races
|
||||
pre.008 backpressure/limits/leaks adversarial
|
||||
pre.009 account/program/logs
|
||||
pre.010 signature/slot/root
|
||||
pre.011 block/slotsUpdates/vote unstable
|
||||
pre.012 compliance 18/18 + Config composition + HTTP regression
|
||||
pre.013 smoke live + README/USAGE + cargo trees
|
||||
pre.014 workspace final + docs/compliance + prompt 0.2.8
|
||||
rel.001 publication stable
|
||||
```
|
||||
|
||||
Le sizing reste positif : la release n'est pas scindée fonctionnellement, mais le forecast initial `pre.008` est volontairement décompressé.
|
||||
|
||||
## Fichiers ajoutés
|
||||
|
||||
```text
|
||||
docs/plans/014-V0_2_7_ONCHAIN_WEBSOCKET_PLAN.md
|
||||
docs/validation/010-V0_2_7_ONCHAIN_WEBSOCKET.md
|
||||
deltas/0.2.7/pre.001.md
|
||||
```
|
||||
|
||||
## Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
docs/000-README.md
|
||||
docs/plans/000-README.md
|
||||
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
|
||||
docs/validation/000-README.md
|
||||
```
|
||||
|
||||
## Fichiers volontairement inchangés
|
||||
|
||||
```text
|
||||
CHANGELOG.md
|
||||
ROADMAP.md
|
||||
.env.example
|
||||
config/**
|
||||
crates/**
|
||||
docs/architecture/**
|
||||
crates/ksp-onchain-transport-lib/README.md
|
||||
crates/ksp-onchain-transport-lib/USAGE.md
|
||||
```
|
||||
|
||||
`ROADMAP.md` reste global et possède déjà l'entrée `0.2.7`. README/USAGE Transport ne sont pas modifiés avant qu'une surface runtime WebSocket existe réellement.
|
||||
|
||||
## Version technique
|
||||
|
||||
Conformément au workflow non-fix :
|
||||
|
||||
```text
|
||||
workspace.package.version = 0.2.7-pre.1
|
||||
commit = v0.2.7-pre.001
|
||||
aucun tag prerelease
|
||||
```
|
||||
|
||||
## Audit officiel WebSocket
|
||||
|
||||
Index :
|
||||
|
||||
```text
|
||||
https://solana.com/docs/rpc/websocket
|
||||
```
|
||||
|
||||
Inventaire exact au 2026-08-22 :
|
||||
|
||||
```text
|
||||
accountSubscribe/accountUnsubscribe
|
||||
blockSubscribe/blockUnsubscribe unstable pair
|
||||
logsSubscribe/logsUnsubscribe
|
||||
programSubscribe/programUnsubscribe
|
||||
rootSubscribe/rootUnsubscribe
|
||||
signatureSubscribe/signatureUnsubscribe
|
||||
slotSubscribe/slotUnsubscribe
|
||||
slotsUpdatesSubscribe/slotsUpdatesUnsubscribe unstable pair
|
||||
voteSubscribe/voteUnsubscribe unstable pair
|
||||
```
|
||||
|
||||
Aucune méthode de cet index n'est marquée Deprecated.
|
||||
|
||||
## Audit bot3
|
||||
|
||||
Référence inspectée :
|
||||
|
||||
```text
|
||||
ks-onchain-transport/src/standard_ws.rs
|
||||
ks-onchain-transport/src/ws_client.rs
|
||||
ks-onchain-transport/src/ws_pool.rs
|
||||
ks-onchain-transport/src/ws_session.rs
|
||||
```
|
||||
|
||||
Repris comme concepts : session multiplexée, ID local/remote séparé, reconnect/resubscribe borné. Rejetés : Transport -> Config, tracing direct, scheduler/pool, unsubscribe public par remote ID et broadcast data comme contrat principal.
|
||||
|
||||
## Validations exécutées avant modification
|
||||
|
||||
```text
|
||||
archive stable v0.2.6 extraite/auditée OK
|
||||
documents internes obligatoires relus OK
|
||||
inventory Transport + Config OK
|
||||
archive bot3 auditée OK
|
||||
documentation Solana WebSocket actuelle auditée OK
|
||||
dependencies Rust candidates auditée OK
|
||||
python3 scripts/audit_rust_workspace_rules.py OK
|
||||
```
|
||||
|
||||
Sortie audit Python :
|
||||
|
||||
```text
|
||||
General Rust rule audit: clean
|
||||
Rust export completeness audit: 0 candidate(s)
|
||||
KSP workspace Rust rule audit: clean
|
||||
```
|
||||
|
||||
## Validations tentées mais impossibles dans le sandbox
|
||||
|
||||
Le binaire `cargo` n'est pas installé. Tentatives avant modification :
|
||||
|
||||
```text
|
||||
cargo fmt --all code 127
|
||||
cargo check --workspace code 127
|
||||
cargo clippy --workspace --all-targets code 127
|
||||
```
|
||||
|
||||
Aucune de ces commandes n'est déclarée réussie.
|
||||
|
||||
## Validation opérateur requise avant commit
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
python3 scripts/audit_rust_workspace_rules.py
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets
|
||||
```
|
||||
|
||||
Aucun test Transport, Config, workspace ou smoke live n'est déclaré vert dans ce sandbox tant qu'il n'a pas été effectivement exécuté par l'opérateur. Aucun build Tauri n'est requis pour `0.2.7-pre.001`.
|
||||
Reference in New Issue
Block a user