v0.2.8-pre.002-fix.001
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md -->
|
||||
<!-- version: 6 -->
|
||||
<!-- version: 7 -->
|
||||
|
||||
# Validation `0.2.8` — Helius LaserStream WebSocket
|
||||
|
||||
> **Statut : `0.2.8-pre.002` implémente le socle des deux façades protocolaires sur le moteur `WsSession` unique.** Le protocol kind Helius LaserStream WebSocket, les guards de constructeur, la compatibilité standard historique et l'absence d'escape hatch Helius sont matérialisés. Les six subscriptions standard supportées par Helius restent volontairement ouvertes pour `pre.003`.
|
||||
> **Statut : `pre.002` testé avec succès sauf Clippy ; `pre.002-fix.001` préparé.** La matrice conserve les critères et preuves exécutées ; le forecast détaillé reste exclusivement dans le plan actif afin que ce fichier ne devienne pas un second plan.
|
||||
|
||||
## 1. Références
|
||||
|
||||
@@ -14,6 +14,8 @@ base stable v0.2.7 / deltas/0.2.7/rel.001.md
|
||||
pre.001 deltas/0.2.8/pre.001.md
|
||||
fix architecture deltas/0.2.8/pre.001-fix.001.md
|
||||
fix forecast/nomenclature deltas/0.2.8/pre.001-fix.002.md
|
||||
pre.002 deltas/0.2.8/pre.002.md
|
||||
pre.002 Clippy/docs fix deltas/0.2.8/pre.002-fix.001.md
|
||||
validation standard WS docs/validation/010-V0_2_7_ONCHAIN_WEBSOCKET.md
|
||||
HTTP compliance docs/validation/007-V0_2_4_HTTP_FINAL_COMPLIANCE.md
|
||||
KSP-TRANSPORT-007 docs/validation/005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md
|
||||
@@ -21,8 +23,7 @@ KSP-TRANSPORT-007 docs/validation/005-V0_2_3_KSP_TRANSPORT_007_RETRO_AU
|
||||
|
||||
Audit Helius initial : **2026-08-23**.
|
||||
|
||||
## 2. Gate `pre.001` et dependency graph
|
||||
|
||||
## 2. Gate `pre.001` fermé
|
||||
Baseline opérateur acquise :
|
||||
|
||||
```text
|
||||
@@ -58,6 +59,35 @@ webpki-roots 0.26.11 / 1.0.9
|
||||
|
||||
Verdict : doublons transitifs, aucune nouvelle dépendance Helius, aucune anomalie bloquante du gate.
|
||||
|
||||
### 2.1 Checklist de fermeture `pre.001`
|
||||
|
||||
```text
|
||||
[x] base stable inspectée
|
||||
[x] baseline opérateur disponible
|
||||
[x] sources Helius courantes relues
|
||||
[x] terminologie/endpoints/auth clarifiés
|
||||
[x] surface standard supportée/non supportée inventoriée
|
||||
[x] transactionSubscribe/unsubscribe inventoriés
|
||||
[x] tokenAccounts inventorié
|
||||
[x] notifyOn classé deprecated/no-op
|
||||
[x] divergence slotsUpdates enregistrée et arbitrée explicitement
|
||||
[x] architecture corrigée : surfaces protocolaires séparées
|
||||
[x] moteur WsSession/actor unique préservé
|
||||
[x] stratégie de compatibilité WsSession 0.2.7 définie
|
||||
[x] heartbeat ownership décidé
|
||||
[x] Config shape décidée
|
||||
[x] credential strategy décidée
|
||||
[x] aucune nouvelle dépendance justifiée
|
||||
[x] forecast recalibré au format compact historique et fixes groupés sous `pre.001`
|
||||
[x] namespace `helius_laserstream` explicitement WebSocket-owned
|
||||
[x] futur LaserStream gRPC maintenu distinct et hors contrat WS
|
||||
[x] cargo tree direct exécuté par opérateur
|
||||
[x] cargo tree duplicates exécuté par opérateur
|
||||
[x] doublons ciblés analysés comme transitifs/non bloquants
|
||||
```
|
||||
|
||||
Verdict : **gate `0.2.8-pre.001` positif ; `pre.002` testé par l’opérateur avec un unique échec Clippy ciblé, corrigé par `pre.002-fix.001`.**
|
||||
|
||||
## 3. Matrice provider normative
|
||||
|
||||
| Capability | Standard KSP | Helius doc actuelle | Décision `0.2.8` | Surface Helius attendue | Preuve finale attendue |
|
||||
@@ -116,7 +146,7 @@ Verdict : doublons transitifs, aucune nouvelle dépendance Helius, aucune anomal
|
||||
| secret | query URL derrière `WsEndpointUrl` | redaction canaries | décidé |
|
||||
| new Rust dependency | aucune | manifest/tree audit | décidé |
|
||||
|
||||
## 5. `transactionSubscribe` à couvrir
|
||||
## 5. Contrat `transactionSubscribe` à valider
|
||||
|
||||
### 5.1 Filter
|
||||
|
||||
@@ -156,12 +186,12 @@ fallback borné si une forme officielle reste insuffisamment explicitée
|
||||
aucun payload brut dans logs/snapshots
|
||||
```
|
||||
|
||||
## 6. Validation lifecycle/provider à construire
|
||||
## 6. Validation lifecycle/provider
|
||||
|
||||
```text
|
||||
[x] un seul actor/socket implementation path dans le code `pre.002`
|
||||
[ ] SolanaStandardWsSession public et constructible — canary ajoutée, exécution opérateur requise
|
||||
[ ] HeliusLaserStreamWsSession public et constructible — canary ajoutée, exécution opérateur requise
|
||||
[x] SolanaStandardWsSession public et constructible — test Transport opérateur vert
|
||||
[x] HeliusLaserStreamWsSession public et constructible — test Transport opérateur vert
|
||||
[x] `helius_laserstream` reste possédé par le namespace WebSocket
|
||||
[x] aucune API/Config gRPC n'est anticipée ou aliasée sur le contrat WS
|
||||
[x] WsSession historique reste public et son constructeur devient explicitement standard-only
|
||||
@@ -170,7 +200,7 @@ aucun payload brut dans logs/snapshots
|
||||
[x] Helius facade n'expose pas voteSubscribe en `pre.002`
|
||||
[x] SolanaStandard facade n'expose pas transactionSubscribe
|
||||
[x] Helius facade n'expose aucun escape hatch vers le handle générique
|
||||
[ ] protocol mismatch rejeté avant I/O — fixtures ajoutées, exécution opérateur requise
|
||||
[x] protocol mismatch rejeté avant I/O — fixture opérateur verte
|
||||
[ ] 6 familles standard Helius utilisent le wire standard exact — `pre.003`
|
||||
[ ] transaction subscribe/ack exact
|
||||
[ ] transaction unsubscribe/result exact
|
||||
@@ -190,24 +220,24 @@ aucun payload brut dans logs/snapshots
|
||||
[ ] payload/filters/api-key absents de Debug/snapshots sûrs
|
||||
```
|
||||
|
||||
## 7. Non-régressions obligatoires
|
||||
## 7. Non-régressions
|
||||
|
||||
```text
|
||||
[ ] standard WebSocket 18/18 toujours comptabilisé pour SolanaStandard
|
||||
[ ] partition standard unstable 3/9 inchangée
|
||||
[ ] signature one-shot inchangée
|
||||
[ ] HTTP current 52/52 inchangé
|
||||
[ ] HTTP historical 14/14 inchangé
|
||||
[ ] KSP-TRANSPORT-007 inchangé
|
||||
[ ] Config V1 HTTP-only backward readable
|
||||
[ ] Config V2 solana_standard backward readable
|
||||
[ ] no Transport -> Config/Wallet/Store/Program/tracing direct
|
||||
[x] standard WebSocket 18/18 toujours comptabilisé pour SolanaStandard — release completeness vert
|
||||
[x] partition standard unstable 3/9 inchangée — tests hérités verts
|
||||
[x] signature one-shot inchangée — tests hérités verts
|
||||
[x] HTTP current 52/52 inchangé — workspace/release completeness verts
|
||||
[x] HTTP historical 14/14 inchangé — workspace/release completeness verts
|
||||
[x] KSP-TRANSPORT-007 inchangé — tests Transport/workspace verts
|
||||
[x] Config V1 HTTP-only backward readable — tests Config workspace verts
|
||||
[x] Config V2 solana_standard backward readable — tests Config workspace verts
|
||||
[x] no Transport -> Config/Wallet/Store/Program/tracing direct — audits/tests ownership verts
|
||||
```
|
||||
|
||||
## 8. Security/redaction
|
||||
## 8. Sécurité/redaction
|
||||
|
||||
```text
|
||||
[ ] api-key absente de Debug WsEndpointUrl
|
||||
[x] api-key absente de Debug WsEndpointUrl — canaries héritées + pre.002 vert
|
||||
[ ] api-key absente de Debug settings/session/subscription
|
||||
[ ] api-key absente des KspError safe contexts
|
||||
[ ] URL complète absente des snapshots
|
||||
@@ -215,7 +245,7 @@ aucun payload brut dans logs/snapshots
|
||||
[ ] raw transaction payload absent des logs/snapshots
|
||||
[ ] large filter addresses non loggées
|
||||
[ ] provider error payload arbitraire non copié dans context
|
||||
[ ] façade Helius ne permet pas de contourner les capabilities par exposition du inner
|
||||
[x] façade Helius ne permet pas de contourner les capabilities par exposition du inner — source + doctest compile_fail verts
|
||||
```
|
||||
|
||||
## 9. Smoke live
|
||||
@@ -224,59 +254,7 @@ Statut initial : **non exécuté**.
|
||||
|
||||
Contrat cible : opt-in, Config résout l'api-key, Transport ne lit pas l'environnement. Aucun secret n'est versionné ou affiché. Un échec lié au plan/credential provider doit rester distinguable d'une panne du moteur.
|
||||
|
||||
## 10. Forecast courant
|
||||
|
||||
Le plan est la source normative du forecast. La validation reprend la même forme compacte et groupe les fixes sous leur prerelease :
|
||||
|
||||
```text
|
||||
pre.001 DONE — audit/sizing/matrice/dependencies
|
||||
fix.001 DONE — façades séparées + gate Cargo fermé
|
||||
fix.002 DONE — forecast compact + namespace LaserStream WS/gRPC
|
||||
pre.002 PREPARED — socle protocolaire/façades/connect partagé
|
||||
pre.003 6 familles Helius communes + absence 3 unsupported
|
||||
pre.004 Config V2 + secrets
|
||||
pre.005 transaction request/unsubscribe
|
||||
pre.006 transaction notification + lifecycle
|
||||
pre.007 heartbeat Helius WebSocket
|
||||
pre.008 adversarial/security/backpressure
|
||||
pre.009 compliance/non-regression
|
||||
pre.010 live smoke/docs/dependency graph
|
||||
pre.011 final workspace/prompt 0.2.9
|
||||
rel.001 stable
|
||||
```
|
||||
|
||||
Le forecast reste souple ; les fixes ne sont pas comptés comme des prereleases planifiées supplémentaires et le numéro final n'est jamais un critère de clôture.
|
||||
|
||||
## 11. Gate initial après `pre.001-fix.002`
|
||||
|
||||
```text
|
||||
[x] base stable inspectée
|
||||
[x] baseline opérateur disponible
|
||||
[x] sources Helius courantes relues
|
||||
[x] terminologie/endpoints/auth clarifiés
|
||||
[x] surface standard supportée/non supportée inventoriée
|
||||
[x] transactionSubscribe/unsubscribe inventoriés
|
||||
[x] tokenAccounts inventorié
|
||||
[x] notifyOn classé deprecated/no-op
|
||||
[x] divergence slotsUpdates enregistrée et arbitrée explicitement
|
||||
[x] architecture corrigée : surfaces protocolaires séparées
|
||||
[x] moteur WsSession/actor unique préservé
|
||||
[x] stratégie de compatibilité WsSession 0.2.7 définie
|
||||
[x] heartbeat ownership décidé
|
||||
[x] Config shape décidée
|
||||
[x] credential strategy décidée
|
||||
[x] aucune nouvelle dépendance justifiée
|
||||
[x] forecast recalibré au format compact historique et fixes groupés sous `pre.001`
|
||||
[x] namespace `helius_laserstream` explicitement WebSocket-owned
|
||||
[x] futur LaserStream gRPC maintenu distinct et hors contrat WS
|
||||
[x] cargo tree direct exécuté par opérateur
|
||||
[x] cargo tree duplicates exécuté par opérateur
|
||||
[x] doublons ciblés analysés comme transitifs/non bloquants
|
||||
```
|
||||
|
||||
Verdict : **gate `0.2.8-pre.001` positif ; socle `pre.002` matérialisé, validations compilées opérateur encore requises avant commit.**
|
||||
|
||||
## 12. Preuve spécifique `pre.002`
|
||||
## 10. Preuve `pre.002` et fix Clippy
|
||||
|
||||
Surface introduite :
|
||||
|
||||
@@ -296,20 +274,49 @@ Canaries ajoutées/prévues dans la livraison :
|
||||
[x] façade Helius publique + lifecycle partagé
|
||||
[x] generic WsSession::connect rejette Helius avant I/O
|
||||
[x] chaque façade rejette le mauvais protocol kind avant I/O
|
||||
[ ] les deux façades ouvrent/ferment une connexion contre un peer local via le même actor — test ajouté
|
||||
[ ] Debug Helius ne projette pas une query api-key canary — test ajouté
|
||||
[x] les deux façades ouvrent/ferment une connexion contre un peer local via le même actor — test opérateur vert
|
||||
[x] Debug Helius ne projette pas une query api-key canary — test opérateur vert
|
||||
[x] source de façade sans second spawn/socket/command actor
|
||||
[ ] compile-fail Helius blockSubscribe — doctest ajouté
|
||||
[ ] compile-fail Helius into_inner — doctest ajouté
|
||||
[x] compile-fail Helius blockSubscribe — doctest opérateur vert
|
||||
[x] compile-fail Helius into_inner — doctest opérateur vert
|
||||
[ ] six wrappers standard Helius — `pre.003`
|
||||
```
|
||||
|
||||
Validation du sandbox de préparation :
|
||||
Validation opérateur reçue pour `pre.002` :
|
||||
|
||||
```text
|
||||
python3 scripts/audit_rust_workspace_rules.py = clean
|
||||
cargo fmt/check/clippy/test = non exécutables dans le sandbox de préparation
|
||||
cargo fmt --all OK
|
||||
python3 scripts/audit_rust_workspace_rules.py clean
|
||||
cargo check --workspace OK
|
||||
cargo clippy --workspace --all-targets FAIL : 5 `implicit_return` dans unit_tests/ws_protocol_session.rs
|
||||
cargo test -p ksp-onchain-transport-lib OK
|
||||
cargo test --workspace OK
|
||||
```
|
||||
|
||||
Les gates compilés opérateur de `pre.002` restent requis avant commit.
|
||||
`pre.002-fix.001` ajoute les retours explicites exigés par la politique Clippy KSP et ne change aucun contrat runtime. Le fix doit être revalidé par le même checkpoint avant passage à `pre.003`.
|
||||
|
||||
## 11. Audit structurel des documents actifs
|
||||
|
||||
Contrats appliqués :
|
||||
|
||||
```text
|
||||
docs/plans/*.md = planification, décisions, audit de scope, forecast, stratégie de validation
|
||||
docs/validation/*.md = matrices, critères, états et preuves réellement exécutées
|
||||
deltas/0.2.8/*.md = journal immuable de chaque livraison
|
||||
```
|
||||
|
||||
Constats `pre.002-fix.001` :
|
||||
|
||||
```text
|
||||
[x] docs/plans est ordonné : 000-README puis 001..015 sans collision
|
||||
[x] docs/validation est ordonné : 000-README puis 001..011 sans collision
|
||||
[x] aucun nouveau répertoire documentaire n'est nécessaire pour Helius WebSocket
|
||||
[x] le plan 015 garde une seule responsabilité : organiser la release 0.2.8
|
||||
[x] la validation 011 garde une seule responsabilité : rapprocher critères et preuves 0.2.8
|
||||
[x] le delta du fix reste le seul journal détaillé de la livraison
|
||||
[x] le forecast détaillé n'est plus dupliqué dans la validation
|
||||
[x] les sections architecture auparavant séparées sont regroupées dans le plan
|
||||
[x] l'ordre du plan suit désormais : état/forecast -> sources/baseline -> héritage -> audit -> matrice -> architecture -> risques -> validation -> clôture
|
||||
```
|
||||
|
||||
Aucun split en fichiers supplémentaires n'est retenu : les plans historiques `0.2.5`–`0.2.7` sont de taille comparable ou supérieure, et le contenu du plan `015` reste entièrement centré sur une seule release. Le problème identifié était **l'ordre interne et la duplication de responsabilités**, pas la nécessité d'un nouveau type de document.
|
||||
|
||||
Reference in New Issue
Block a user