v0.2.8-pre.001-fix.001
This commit is contained in:
269
deltas/0.2.8/pre.001-fix.001.md
Normal file
269
deltas/0.2.8/pre.001-fix.001.md
Normal file
@@ -0,0 +1,269 @@
|
||||
<!-- file: deltas/0.2.8/pre.001-fix.001.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.2.8-pre.001-fix.001` — séparation des façades WebSocket et forecast visible
|
||||
|
||||
## 1. Base requise
|
||||
|
||||
Ce correctif s'applique exclusivement après :
|
||||
|
||||
```text
|
||||
0.2.8-pre.001
|
||||
workspace.package.version = 0.2.8-pre.1
|
||||
```
|
||||
|
||||
Il corrige le **plan et la matrice de validation** de `pre.001` avant toute implémentation de `pre.002`.
|
||||
|
||||
Le correctif est documentaire uniquement. Conformément à `VER-ID-008` :
|
||||
|
||||
```text
|
||||
livraison = 0.2.8-pre.001-fix.001
|
||||
workspace.package.version = 0.2.8-pre.1 # inchangé
|
||||
commit attendu = v0.2.8-pre.001-fix.001
|
||||
```
|
||||
|
||||
## 2. Motif du fix
|
||||
|
||||
Le plan initial faisait porter à un `WsSession` public commun toute la surface WebSocket, puis utilisait une capability matrix pour rejeter avant I/O les méthodes standard non supportées par Helius.
|
||||
|
||||
Après revue du code réel `v0.2.7`, cette forme est jugée trop permissive au niveau API : les neuf wrappers standard sont directement implémentés sur `WsSession`. Un endpoint Helius aurait donc pu être représenté par un type exposant publiquement `block_subscribe`, `slots_updates_subscribe` et `vote_subscribe`, même si ces appels étaient ensuite rejetés.
|
||||
|
||||
Décision corrigée :
|
||||
|
||||
```text
|
||||
séparer les façades publiques par protocole
|
||||
partager intégralement le moteur physique/lifecycle
|
||||
rendre les méthodes provider non supportées absentes de la façade Helius
|
||||
conserver une validation interne defense-in-depth
|
||||
```
|
||||
|
||||
## 3. Architecture corrigée
|
||||
|
||||
Cible :
|
||||
|
||||
```text
|
||||
WsSession
|
||||
moteur physique partagé
|
||||
actor/socket/reconnect/queues
|
||||
│
|
||||
┌────────────┴────────────┐
|
||||
▼ ▼
|
||||
SolanaStandardWsSession HeliusLaserStreamWsSession
|
||||
9 familles 6 standard communes
|
||||
+ transaction
|
||||
+ heartbeat policy
|
||||
```
|
||||
|
||||
### Surface standard
|
||||
|
||||
```text
|
||||
Account
|
||||
Block
|
||||
Logs
|
||||
Program
|
||||
Root
|
||||
Signature
|
||||
Slot
|
||||
SlotsUpdates
|
||||
Vote
|
||||
```
|
||||
|
||||
### Surface Helius
|
||||
|
||||
```text
|
||||
Account
|
||||
Logs
|
||||
Program
|
||||
Root
|
||||
Signature
|
||||
Slot
|
||||
HeliusTransaction
|
||||
```
|
||||
|
||||
Absents de la façade Helius :
|
||||
|
||||
```text
|
||||
Block
|
||||
SlotsUpdates
|
||||
Vote
|
||||
```
|
||||
|
||||
Les DTOs standard réellement identiques restent partagés. Les DTOs Helius sont créés uniquement pour les contrats provider-specific (`transactionSubscribe`, `tokenAccounts`, notification transaction, etc.).
|
||||
|
||||
`WsSession` reste compatible avec la surface standard publiée en `0.2.7`. La façade Helius ne doit fournir aucun escape hatch public (`inner`/`into_inner`) qui permettrait de récupérer un handle générique et de contourner sa surface.
|
||||
|
||||
## 4. Capability matrix — rôle corrigé
|
||||
|
||||
La capability matrix n'est plus la première barrière publique. Elle devient une protection interne :
|
||||
|
||||
```text
|
||||
API/façade correcte
|
||||
-> méthodes impossibles absentes
|
||||
-> validation descriptor/constructor avant I/O
|
||||
-> actor commun
|
||||
```
|
||||
|
||||
Matrice interne conservée :
|
||||
|
||||
```text
|
||||
SolanaStandard:
|
||||
Account Block Logs Program Root Signature Slot SlotsUpdates Vote -> allowed
|
||||
HeliusTransaction -> rejected
|
||||
|
||||
HeliusLaserStream:
|
||||
Account Logs Program Root Signature Slot HeliusTransaction -> allowed
|
||||
Block SlotsUpdates Vote -> rejected
|
||||
```
|
||||
|
||||
## 5. Gate Cargo désormais fermé
|
||||
|
||||
Les commandes manquantes de `pre.001` ont été fournies par l'opérateur :
|
||||
|
||||
```bash
|
||||
cargo tree -p ksp-onchain-transport-lib
|
||||
cargo tree -p ksp-onchain-transport-lib --duplicates
|
||||
```
|
||||
|
||||
Résolution observée :
|
||||
|
||||
```text
|
||||
futures-util 0.3.34
|
||||
tokio 1.53.1
|
||||
tokio-tungstenite 0.30.0
|
||||
reqwest 0.13.4
|
||||
new Helius SDK aucun
|
||||
```
|
||||
|
||||
Doublons ciblés :
|
||||
|
||||
```text
|
||||
syn 2.0.119 / 3.0.3
|
||||
webpki-roots 0.26.11 / 1.0.9
|
||||
```
|
||||
|
||||
Ils sont transitifs dans le graphe actuel et ne bloquent pas le gate.
|
||||
|
||||
**Verdict : gate `pre.001` positif après ce fix documentaire.**
|
||||
|
||||
## 6. Forecast souple recalibré
|
||||
|
||||
Le forecast revient à `pre.001 -> pre.011` parce que la séparation de façade mérite une tranche propre et que les six wrappers standard supportés par Helius doivent être validés séparément de la mécanique de connexion commune.
|
||||
|
||||
```text
|
||||
pre.001 audit/sizing/matrice/dependencies
|
||||
pre.001-fix.001 architecture de façades + gate Cargo + forecast visible
|
||||
|
||||
pre.002 socle protocolaire : protocol kind + façades + connexion physique partagée
|
||||
pre.003 6 familles standard Helius + absence typée Block/SlotsUpdates/Vote
|
||||
pre.004 Config V2 helius_laserstream + secret strategy
|
||||
pre.005 transactionSubscribe/unsubscribe request/filter/options/tokenAccounts
|
||||
pre.006 transactionNotification + reconnect/resubscribe/unsubscribe races
|
||||
pre.007 heartbeat/idle lifecycle
|
||||
pre.008 adversarial provider/security/backpressure
|
||||
pre.009 compliance + standard WS 18/18 + HTTP 52/14 + Config/API canaries
|
||||
pre.010 live smoke opt-in si sûr + README/USAGE + dependency audit
|
||||
pre.011 workspace final + fermeture docs/matrix/indexes + prompt 0.2.9
|
||||
rel.001 stable
|
||||
```
|
||||
|
||||
Chaque tranche vise nominalement 15–20 minutes. Le plan contient désormais un tableau immédiatement visible avec objectif, preuves, budget et critères de split pour chaque tranche.
|
||||
|
||||
`pre.011` n'est pas une deadline ; `pre.012+` ou des fixes sont ajoutés si nécessaire.
|
||||
|
||||
## 7. Fichiers ajoutés
|
||||
|
||||
```text
|
||||
deltas/0.2.8/pre.001-fix.001.md
|
||||
```
|
||||
|
||||
## 8. Fichiers modifiés
|
||||
|
||||
```text
|
||||
docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md
|
||||
docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md
|
||||
```
|
||||
|
||||
## 9. Fichiers volontairement inchangés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
ROADMAP.md
|
||||
CHANGELOG.md
|
||||
.env.example
|
||||
config/**
|
||||
crates/**
|
||||
docs/000-README.md
|
||||
docs/plans/000-README.md
|
||||
docs/validation/000-README.md
|
||||
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
|
||||
deltas/0.2.8/pre.001.md
|
||||
```
|
||||
|
||||
Le delta `pre.001` publié reste immutable ; ce fix ne le réécrit pas.
|
||||
|
||||
## 10. Validations et preuves
|
||||
|
||||
### Réellement fournies par l'opérateur avant ce fix
|
||||
|
||||
```text
|
||||
baseline v0.2.7 : fmt/audit/check/clippy/test workspace = OK
|
||||
cargo tree transport = exécuté
|
||||
cargo tree transport --duplicates = exécuté
|
||||
```
|
||||
|
||||
### Réellement exécutées dans l'environnement de préparation du fix
|
||||
|
||||
```text
|
||||
inspection du code public WsSession/WsSubscriptionKind/WsSessionSnapshot = OK
|
||||
lecture VERSION_WORKFLOW.md pour VER-ID-008 = OK
|
||||
contrôle overlay documentaire = OK
|
||||
```
|
||||
|
||||
L'audit Rust workspace est réexécuté sur le workspace reconstitué après application de l'overlay lorsque le script est disponible.
|
||||
|
||||
### Non exécutées pour ce fix documentaire
|
||||
|
||||
```text
|
||||
cargo fmt --all
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets
|
||||
cargo test --workspace
|
||||
```
|
||||
|
||||
Motif : aucun code/build/runtime/config n'est modifié par ce correctif et l'environnement de préparation ne fournit pas Cargo.
|
||||
|
||||
## 11. Décisions prises
|
||||
|
||||
```text
|
||||
façades publiques séparées par protocole
|
||||
moteur WsSession actor unique partagé
|
||||
SolanaStandardWsSession = 9 familles standard
|
||||
HeliusLaserStreamWsSession = 6 familles standard + transaction
|
||||
Block/SlotsUpdates/Vote absents de la façade Helius
|
||||
capability matrix conservée defense-in-depth
|
||||
DTOs communs réutilisés si wire identique
|
||||
DTOs Helius dédiés seulement aux divergences
|
||||
pas d'escape hatch Helius vers raw WsSession
|
||||
forecast visible et recalibré jusqu'à pre.011
|
||||
Cargo pre.1 inchangé car fix documentaire
|
||||
```
|
||||
|
||||
## 12. Questions ouvertes laissées à `pre.002+`
|
||||
|
||||
```text
|
||||
forme interne minimale pour partager la connexion physique sans dupliquer l'actor
|
||||
forme exacte des constructeurs des deux façades
|
||||
extension minimale de WsSubscriptionKind/snapshot pour HeliusTransaction
|
||||
forme typed des différents transactionDetails insuffisamment documentés
|
||||
wire éventuel futur de enhanced/filtered accountSubscribe
|
||||
```
|
||||
|
||||
Ces questions ne remettent pas en cause la frontière décidée : **surface publique séparée, moteur physique partagé**.
|
||||
|
||||
## 13. Prochaine tranche
|
||||
|
||||
```text
|
||||
0.2.8-pre.002
|
||||
```
|
||||
|
||||
Mission : matérialiser uniquement le socle protocolaire et les façades/constructeurs autour du moteur `WsSession` existant. Ne pas commencer `transactionSubscribe` ni Config Helius dans cette tranche.
|
||||
Reference in New Issue
Block a user