v0.2.9-pre.014
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/plans/016-V0_2_9_YELLOWSTONE_GRPC_PLAN.md -->
|
||||
<!-- version: 24 -->
|
||||
<!-- version: 25 -->
|
||||
|
||||
# Plan `0.2.9` — moteur Yellowstone gRPC + standard Solana + PublicNode
|
||||
|
||||
**Statut courant : `0.2.9-pre.012` a passé son gate déterministe local sans warning ; le smoke PublicNode live et les graphes Cargo finaux n'ont pas été exécutés dans le log opérateur fourni. `pre.012-fix.001` introduit une règle durable de séparation des dernières prereleases et recalibre la fermeture : `pre.013` technique/live, `pre.014` réconciliation documentaire, `pre.015` préparation de publication minimale, puis `rel.001`.**
|
||||
**Statut courant : le couloir technique `0.2.9-pre.013` est fermé par `pre.013-fix.004` : gates déterministes et workspace verts, graphes Cargo finaux inspectés, et smoke Yellowstone PublicNode authentifié exécuté avec succès sur Mainnet et Testnet (`2/2 PASS`). `pre.014` est la réconciliation documentaire finale ; seule `pre.015` restera ensuite pour le prompt `0.2.10`, `CHANGELOG.md` et `ROADMAP.md`, avant `rel.001`.**
|
||||
|
||||
## 1. Objet et autorité de la release
|
||||
|
||||
@@ -49,7 +49,7 @@ aucune promesse exactly-once/lossless non prouvée
|
||||
Config Transport V3 backward-readable V1/V2
|
||||
provider et protocol distincts dans Config
|
||||
première intégration PublicNode strictement standard
|
||||
smoke live opt-in sans credential versionné
|
||||
smoke live opt-in avec credential secret non versionné
|
||||
non-régressions HTTP, WebSocket standard et Helius WebSocket
|
||||
```
|
||||
|
||||
@@ -118,7 +118,7 @@ https://docs.rs/crate/yellowstone-grpc-proto/latest
|
||||
https://docs.rs/crate/yellowstone-grpc-client/latest
|
||||
```
|
||||
|
||||
Une réaudite finale est requise en `pre.012` si l'upstream a changé matériellement pendant la release.
|
||||
Le réaudit final a été exécuté en `pre.012`; aucun changement upstream matériel n’a remis en cause la surface retenue.
|
||||
|
||||
### 4.2 Licence
|
||||
|
||||
@@ -514,42 +514,43 @@ Le tuple historique n'est pas modifié silencieusement.
|
||||
|
||||
### 9.1 Mainnet
|
||||
|
||||
La surface publique réauditée le 2026-08-24 confirme Yellowstone gRPC Solana Mainnet et affiche le host/port :
|
||||
Endpoint retenu et validé en live :
|
||||
|
||||
```text
|
||||
solana-yellowstone-grpc.publicnode.com:443
|
||||
https://solana-yellowstone-grpc.publicnode.com:443
|
||||
```
|
||||
|
||||
Le wrapper KSP attend une URL `http/https`; Config matérialise donc le même endpoint TLS sous la forme `https://solana-yellowstone-grpc.publicnode.com:443`.
|
||||
|
||||
`pre.011` versionne donc un profil :
|
||||
Le profil committé est :
|
||||
|
||||
```text
|
||||
profile_id = publicnode_mainnet
|
||||
provider = publicnode
|
||||
cluster = mainnet-beta
|
||||
protocol = solana_yellowstone
|
||||
credential = aucun
|
||||
metadata = x-token secret via KSP_SECRET_PUBLICNODE_MAINNET_GRPC_X_TOKEN
|
||||
```
|
||||
|
||||
La partie HTTP/WS de ce profil reste standard Solana ; seul l'endpoint gRPC est PublicNode.
|
||||
Les tentatives sans metadata ont atteint le service mais ont reçu `PERMISSION_DENIED`. Le profil final fournit donc le personal token PublicNode comme metadata gRPC secrète `x-token`; Transport ne connaît ni le nom de variable KSP ni sa provenance.
|
||||
|
||||
### 9.2 Testnet
|
||||
|
||||
Le réaudit final du 2026-08-24 confirme que PublicNode annonce bien une capacité Solana Testnet gRPC. La surface officielle consultable ne fournit cependant toujours pas un hostname Testnet exact suffisamment autoritatif pour être versionné.
|
||||
|
||||
Décision finale `0.2.9` :
|
||||
L'endpoint exact confirmé par l'opérateur et validé en live est :
|
||||
|
||||
```text
|
||||
existence Testnet gRPC confirmée
|
||||
hostname Testnet exact non obtenu depuis une source autoritative
|
||||
hostname déduit ou tiers interdit
|
||||
profil Testnet committé non
|
||||
smoke Testnet non
|
||||
statut EXTERNAL BLOCK documentaire / NOT GUESSED
|
||||
https://solana-testnet-yellowstone-grpc.publicnode.com:443
|
||||
```
|
||||
|
||||
Ce bloc externe ne remet pas en cause la fondation Mainnet. Une release provider ultérieure peut matérialiser Testnet dès qu'une source PublicNode autoritative expose l'endpoint exact.
|
||||
Le profil committé est :
|
||||
|
||||
```text
|
||||
profile_id = publicnode_testnet
|
||||
provider = publicnode
|
||||
cluster = testnet
|
||||
protocol = solana_yellowstone
|
||||
metadata = x-token secret via KSP_SECRET_PUBLICNODE_TESTNET_GRPC_X_TOKEN
|
||||
```
|
||||
|
||||
Le smoke final prouve qu'un même personal token opérateur peut fonctionner sur Mainnet et Testnet. KSP conserve néanmoins deux variables de configuration distinctes afin de ne pas imposer une hypothèse de portée provider à long terme ; elles peuvent recevoir la même valeur. Cette séparation est une liberté de configuration KSP, pas une assertion que PublicNode délivre des tokens network-scoped.
|
||||
|
||||
## 10. Threat model et bornes
|
||||
|
||||
@@ -589,14 +590,14 @@ Config sensitivity gate avant construction de metadata secret
|
||||
Ordre de preuve :
|
||||
|
||||
```text
|
||||
Transport programmatic -> PublicNode Mainnet Yellowstone
|
||||
Transport programmatic -> PublicNode Testnet seulement si endpoint exact confirmé
|
||||
Config V3 -> Transport -> PublicNode via composition légitime, jamais un smoke réseau placé dans Config par facilité
|
||||
Transport programmatic -> PublicNode Mainnet Yellowstone + secret x-token fourni au harness
|
||||
Transport programmatic -> PublicNode Testnet Yellowstone + secret x-token fourni au harness
|
||||
Config V3 -> Transport -> PublicNode via secret_metadata, jamais un smoke réseau placé dans Config par facilité
|
||||
```
|
||||
|
||||
Un smoke Transport pur peut vivre dans `ksp-onchain-transport-lib/tests` puisqu'il construit ses settings programmatiquement.
|
||||
|
||||
Un smoke cross-crates Config -> Transport ne doit pas devenir une responsabilité durable de `ksp-config-lib`. S'il n'existe pas encore de surface d'intégration appropriée, la procédure reste opérateur/documentée en `pre.012`.
|
||||
Un smoke cross-crates Config -> Transport ne doit pas devenir une responsabilité durable de `ksp-config-lib`. S’il n’existe pas encore de surface d’intégration appropriée, la preuve live reste un smoke Transport programmatique avec secret fourni uniquement au harness opérateur.
|
||||
|
||||
Aucun secret provider n'est versionné.
|
||||
|
||||
@@ -604,24 +605,24 @@ Aucun secret provider n'est versionné.
|
||||
|
||||
Les preuves détaillées restent dans les fichiers `deltas/0.2.9/*.md`. Le plan ne duplique plus leurs journaux complets.
|
||||
|
||||
| Tranche | Objet | État consolidé |
|
||||
|-------------------|----------------------------------------------------------|----------------------------|
|
||||
| `pre.001` + fixes | audit upstream, licence, providers, architecture, sizing | **CLOSED** |
|
||||
| `pre.002` + fixes | dépendances, settings/errors, channel minimal | **CLOSED** |
|
||||
| `pre.003` + fix | TLS, metadata, fixture locale, 7 unary | **CLOSED** |
|
||||
| `pre.004` + fix | Subscribe foundation/common | **CLOSED** |
|
||||
| `pre.005` + fix | Accounts + Slots | **CLOSED** |
|
||||
| `pre.006` | namespace privé HTTP explicite | **CLOSED** |
|
||||
| `pre.007` | Transactions + transaction_status | **CLOSED** |
|
||||
| `pre.008` + fix | Blocks + block_meta + entry | **CLOSED** |
|
||||
| `pre.009` + fix | bidi, Ping/Pong, backpressure, half-close, shutdown | **CLOSED** |
|
||||
| `pre.010` + fix | reconnect, from_slot, ReplayInfo, gaps/duplicates | **CLOSED** |
|
||||
| `pre.011` | Config V3 + protocol/provider + PublicNode Mainnet | **CLOSED** |
|
||||
| `pre.012` | réaudit + smoke ajouté + docs préparatoires | **LOCAL GATE PASS** |
|
||||
| `pre.012-fix.001` | règles de séparation de fermeture + recalibrage | **ACTIVE DOCUMENTARY FIX** |
|
||||
| `pre.013` | gate technique/live PublicNode + graphes finaux | **PLANNED** |
|
||||
| `pre.014` | réconciliation documentaire finale | **PLANNED** |
|
||||
| `pre.015` | prompt + CHANGELOG + ROADMAP | **PLANNED** |
|
||||
| Tranche | Objet | État consolidé |
|
||||
|-------------------|----------------------------------------------------------|----------------------|
|
||||
| `pre.001` + fixes | audit upstream, licence, providers, architecture, sizing | **CLOSED** |
|
||||
| `pre.002` + fixes | dépendances, settings/errors, channel minimal | **CLOSED** |
|
||||
| `pre.003` + fix | TLS, metadata, fixture locale, 7 unary | **CLOSED** |
|
||||
| `pre.004` + fix | Subscribe foundation/common | **CLOSED** |
|
||||
| `pre.005` + fix | Accounts + Slots | **CLOSED** |
|
||||
| `pre.006` | namespace privé HTTP explicite | **CLOSED** |
|
||||
| `pre.007` | Transactions + transaction_status | **CLOSED** |
|
||||
| `pre.008` + fix | Blocks + block_meta + entry | **CLOSED** |
|
||||
| `pre.009` + fix | bidi, Ping/Pong, backpressure, half-close, shutdown | **CLOSED** |
|
||||
| `pre.010` + fix | reconnect, from_slot, ReplayInfo, gaps/duplicates | **CLOSED** |
|
||||
| `pre.011` | Config V3 + protocol/provider + PublicNode Mainnet | **CLOSED** |
|
||||
| `pre.012` | réaudit + smoke ajouté + docs préparatoires | **LOCAL GATE PASS** |
|
||||
| `pre.012-fix.001` | règles de séparation de fermeture + recalibrage | **CLOSED** |
|
||||
| `pre.013` + fixes | gate technique/live PublicNode + graphes finaux | **CLOSED** |
|
||||
| `pre.014` | réconciliation documentaire finale | **ACTIVE CANDIDATE** |
|
||||
| `pre.015` | prompt + CHANGELOG + ROADMAP | **PLANNED** |
|
||||
|
||||
Gate opérateur déterministe de `pre.012` reçu le 2026-08-24 :
|
||||
|
||||
@@ -643,34 +644,50 @@ PublicNode live smoke NOT RUN, test ignored
|
||||
cargo tree final NOT PROVIDED / NOT RUN in supplied log
|
||||
```
|
||||
|
||||
`pre.012` reste historiquement une tranche mixte créée avant l'adoption de la nouvelle règle. Son fix ne réécrit pas cette histoire : le prompt `0.2.10` déjà présent est désormais considéré comme un brouillon à finaliser seulement en `pre.015`, et les README/USAGE préparés seront réconciliés en `pre.014`.
|
||||
`pre.012` reste historiquement une tranche mixte créée avant l'adoption de la nouvelle règle. Son fix ne réécrit pas cette histoire : le prompt `0.2.10` déjà présent est désormais considéré comme un brouillon à finaliser seulement en `pre.015`, et les README/USAGE préparés sont réconciliés par la présente `pre.014`.
|
||||
|
||||
Gate technique final `pre.013-fix.004` reçu le 2026-08-24 :
|
||||
|
||||
```text
|
||||
fmt/audit Rust PASS sans warning
|
||||
Markdown tables PASS, 87 tableaux / 258 fichiers
|
||||
cargo check PASS
|
||||
cargo clippy --all-targets PASS sans warning
|
||||
Transport unit 383/383
|
||||
Transport public API 49/49
|
||||
Transport completeness 43/43
|
||||
Transport doctests 4/4
|
||||
cargo test --workspace PASS
|
||||
cargo graphs finaux inspectés, stack Yellowstone unique tonic/prost 0.14
|
||||
PublicNode Mainnet Subscribe + slot PASS
|
||||
PublicNode Testnet Subscribe + slot PASS
|
||||
live smoke total 2/2 PASS
|
||||
```
|
||||
|
||||
Les graphes inspectés avant `fix.004` restent valides : ce fix n'a modifié ni dépendance ni feature Cargo. La stack Yellowstone résolue est `yellowstone-grpc-proto 12.6.0`, `tonic/tonic-prost 0.14.6`, `prost/prost-types 0.14.4`, sans `yellowstone-grpc-client` runtime.
|
||||
|
||||
## 13. Forecast restant recalibré
|
||||
|
||||
### `pre.013` — gate technique/live final
|
||||
### `pre.013` — gate technique/live final — **CLOSED**
|
||||
|
||||
Payload autorisé :
|
||||
Le couloir technique a finalement nécessité quatre fixes : découverte de l'auth PublicNode, ajout Testnet, adaptation de la fermeture live, puis conformité Clippy du harness. Le résultat consolidé est :
|
||||
|
||||
```text
|
||||
workspace.package.version = 0.2.9-pre.13
|
||||
exécution du smoke PublicNode Mainnet déjà versionné
|
||||
cargo tree Transport direct
|
||||
cargo tree Transport --duplicates
|
||||
cargo tree --duplicates
|
||||
constat factuel de tout incident réseau/provider/TLS
|
||||
aucune réconciliation README/USAGE
|
||||
aucune finalisation prompt/CHANGELOG/ROADMAP
|
||||
workspace.package.version final du couloir = 0.2.9-pre.13.fix.4
|
||||
PublicNode Mainnet Subscribe + slot PASS
|
||||
PublicNode Testnet Subscribe + slot PASS
|
||||
secret wire metadata x-token
|
||||
secret versionné non
|
||||
harness deux lignes stdin, valeurs identiques autorisées
|
||||
close provider succès ou timeout KSP borné après slot reçu
|
||||
graphes Cargo inspectés
|
||||
clippy --all-targets PASS sans warning
|
||||
workspace PASS
|
||||
```
|
||||
|
||||
Commande live centrale :
|
||||
Les essais intermédiaires `PERMISSION_DENIED` sans credential sont conservés dans les deltas `pre.013-fix.001` à `fix.003`; ils ne sont pas réinterprétés comme une régression du moteur standard.
|
||||
|
||||
```bash
|
||||
cargo test -p ksp-onchain-transport-lib --test yellowstone_publicnode_smoke -- --ignored --nocapture
|
||||
```
|
||||
|
||||
Un échec local du smoke est corrigé dans `pre.013-fix.NNN`. Un incident externe est documenté comme tel. Un fix de `pre.013` ne contient pas de correction documentaire de clôture.
|
||||
|
||||
### `pre.014` — réconciliation documentaire finale
|
||||
### `pre.014` — réconciliation documentaire finale — **ACTIVE CANDIDATE**
|
||||
|
||||
Payload :
|
||||
|
||||
@@ -724,20 +741,7 @@ moteur Yellowstone + façade Solana standard + Config provider-neutral + premiè
|
||||
|
||||
## 15. Gates opérateur restants
|
||||
|
||||
Gate `pre.013` :
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
python3 scripts/audit_rust_workspace_rules.py
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets
|
||||
cargo tree -p ksp-onchain-transport-lib
|
||||
cargo tree -p ksp-onchain-transport-lib --duplicates
|
||||
cargo tree --duplicates
|
||||
cargo test -p ksp-onchain-transport-lib --test yellowstone_publicnode_smoke -- --ignored --nocapture
|
||||
```
|
||||
|
||||
Gate `pre.014` :
|
||||
Le gate `pre.013` est fermé. Gate `pre.014` :
|
||||
|
||||
```bash
|
||||
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.2.9
|
||||
@@ -760,8 +764,9 @@ bounds/backpressure/shutdown verts
|
||||
reconnect/replay documentés sans lossless implicite
|
||||
Config V3 backward V1/V2
|
||||
provider/protocol distincts
|
||||
PublicNode Mainnet live exécuté avec résultat consigné
|
||||
Testnet reporté factuellement si endpoint exact non confirmé
|
||||
PublicNode Mainnet live Subscribe + slot PASS
|
||||
PublicNode Testnet live Subscribe + slot PASS
|
||||
auth PublicNode x-token secret documentée sans secret versionné
|
||||
HTTP 52+14 non régressé
|
||||
Standard WS 18/18 non régressé
|
||||
Helius WS non régressé
|
||||
|
||||
Reference in New Issue
Block a user