v0.2.9-pre.012
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md -->
|
||||
<!-- version: 24 -->
|
||||
<!-- version: 25 -->
|
||||
|
||||
# Validation `0.2.9` — Yellowstone gRPC standard + PublicNode
|
||||
|
||||
> **Statut courant : `pre.010-fix.001` est fermée sans warning. `pre.011` est candidate et doit prouver Config Transport V3, le mapping Config -> Yellowstone gRPC, la séparation protocol/provider et le profil PublicNode Mainnet. Ce document a été restructuré : les logs détaillés historiques vivent dans `deltas/0.2.9/`; cette matrice porte les exigences et le verdict courant.**
|
||||
**Statut courant : `pre.011` est fermée par gate opérateur complet sans warning. `pre.012` est la candidate de fermeture technique : réaudit upstream, smoke PublicNode Mainnet opt-in, graphes Cargo finaux, documentation, audit des tableaux Markdown et prompt `0.2.10 — OrbitFlare Yellowstone gRPC`. Les logs historiques détaillés restent dans `deltas/0.2.9/`.**
|
||||
|
||||
## 1. Autorités et baseline courante
|
||||
|
||||
@@ -18,7 +18,7 @@ deltas/0.2.9/* pour l'historique immuable et les décisions postérieures au pro
|
||||
upstream Yellowstone primaire
|
||||
```
|
||||
|
||||
Baseline opérateur immédiatement avant `pre.011` (`0.2.9-pre.010-fix.001`) :
|
||||
Baseline opérateur immédiatement avant `pre.012` (`0.2.9-pre.011`) :
|
||||
|
||||
| Gate | Résultat |
|
||||
|------------------------------------------|--------------------------|
|
||||
@@ -26,6 +26,9 @@ Baseline opérateur immédiatement avant `pre.011` (`0.2.9-pre.010-fix.001`) :
|
||||
| audit Rust workspace | PASS, 0 candidate export |
|
||||
| `cargo check --workspace` | PASS |
|
||||
| `cargo clippy --workspace --all-targets` | PASS sans warning |
|
||||
| Config unit | 113/113 PASS |
|
||||
| Config public API | 15/15 PASS |
|
||||
| Config ownership | 5/5 PASS |
|
||||
| Transport unit | 383/383 PASS |
|
||||
| Transport public API | 49/49 PASS |
|
||||
| Transport release completeness | 43/43 PASS |
|
||||
@@ -33,7 +36,7 @@ Baseline opérateur immédiatement avant `pre.011` (`0.2.9-pre.010-fix.001`) :
|
||||
| workspace dependency canary | 3/3 PASS |
|
||||
| `cargo test --workspace` | PASS |
|
||||
|
||||
Cette baseline est le seuil de non-régression de `pre.011` pour Transport.
|
||||
Cette baseline est le seuil de non-régression de `pre.012`.
|
||||
|
||||
## 2. Gate dépendances et licence
|
||||
|
||||
@@ -47,7 +50,7 @@ Cette baseline est le seuil de non-régression de `pre.011` pour Transport.
|
||||
| raw client Tonic public | aucun | **PASS** |
|
||||
| graph final | réinspection `pre.012` | **PENDING FINAL** |
|
||||
|
||||
Le graphe n'est pas modifié par `pre.011`; aucune nouvelle dépendance Cargo n'est introduite dans cette tranche.
|
||||
Le graphe de dépendances n'est pas modifié par `pre.012`; aucune nouvelle dépendance Cargo n'est introduite dans cette tranche.
|
||||
|
||||
## 3. Matrice service `Geyser`
|
||||
|
||||
@@ -215,17 +218,17 @@ state/error code safe
|
||||
|
||||
### 8.1 Schema et backward compatibility
|
||||
|
||||
Exigences candidate :
|
||||
Le gate opérateur `pre.011` ferme les exigences suivantes :
|
||||
|
||||
| Exigence | Preuve source actuelle | Verdict avant gate opérateur |
|
||||
|------------------------------------------|------------------------------------------|------------------------------|
|
||||
| schema `$id` V3 | `urn:ksp:schema:std.transport:v3` | **SOURCE OK** |
|
||||
| branches V1/V2 conservées | `documentV1`, `documentV2`, `documentV3` | **SOURCE OK** |
|
||||
| V1 HTTP-only | fixture historique | **PENDING TEST** |
|
||||
| V2 HTTP+WS | fixture historique | **PENDING TEST** |
|
||||
| V3 HTTP+WS+gRPC | fixture V3 + config committée | **PENDING TEST** |
|
||||
| `grpc_endpoints` optionnel par profil V3 | profiles génériques sans gRPC | **PENDING TEST** |
|
||||
| no `additionalProperties` relaxation | branches strictes | **SOURCE OK** |
|
||||
| Exigence | Preuve | Verdict |
|
||||
|------------------------------------------|-----------------------------------------|----------|
|
||||
| schema `$id` V3 | `urn:ksp:schema:std.transport:v3` | **PASS** |
|
||||
| branches V1/V2 conservées | fixtures V1, V2 et document committé | **PASS** |
|
||||
| V1 HTTP-only | `v1_transport_fixture...` | **PASS** |
|
||||
| V2 HTTP+WS | fixture V2 + compatibilité constructeur | **PASS** |
|
||||
| V3 HTTP+WS+gRPC | 113 tests Config | **PASS** |
|
||||
| `grpc_endpoints` optionnel par profil V3 | profil `devnet_public` sans gRPC | **PASS** |
|
||||
| propriétés inconnues refusées | branches schema strictes | **PASS** |
|
||||
|
||||
### 8.2 Mapping runtime
|
||||
|
||||
@@ -248,13 +251,13 @@ API :
|
||||
|---------------------------------|-------------------------------------|---------------|
|
||||
| `http_settings()` | inchangée | **OK** |
|
||||
| `ws_settings()` | V1 None, V2/V3 selon profil | **OK** |
|
||||
| `grpc_settings()` | V1/V2 None, V3 optionnel | **ADDED** |
|
||||
| `into_transport_settings()` | tuple historique HTTP + WS inchangé | **PRESERVED** |
|
||||
| `into_all_transport_settings()` | nouveau tuple HTTP + WS + gRPC | **ADDED** |
|
||||
| `grpc_settings()` | V1/V2 None, V3 optionnel | **PASS** |
|
||||
| `into_transport_settings()` | tuple historique HTTP + WS inchangé | **PASS** |
|
||||
| `into_all_transport_settings()` | nouveau tuple HTTP + WS + gRPC | **PASS** |
|
||||
|
||||
### 8.3 Provenance et secrets
|
||||
|
||||
Règles candidate :
|
||||
Règles validées :
|
||||
|
||||
```text
|
||||
metadata publique + provenance KSP_SECRET_* -> reject
|
||||
@@ -266,11 +269,11 @@ safe_value -> secret segment ********
|
||||
Transport Debug -> URL/metadata secret absents
|
||||
```
|
||||
|
||||
Le test V3 doit démontrer le cas valide et les deux croisements invalides sans exposer les canaris.
|
||||
Les tests V3 démontrent le cas valide et les deux croisements invalides sans exposer les canaris.
|
||||
|
||||
### 8.4 PublicNode Mainnet
|
||||
|
||||
Profil committé attendu :
|
||||
Profil committé et validé :
|
||||
|
||||
```text
|
||||
profile_id = publicnode_mainnet
|
||||
@@ -281,31 +284,32 @@ url = https://solana-yellowstone-grpc.publicnode.com:443 # provider affi
|
||||
metadata = aucune
|
||||
```
|
||||
|
||||
Le mapping doit produire un endpoint TLS Yellowstone standard et `Debug` ne doit pas exposer l'URL.
|
||||
Le mapping produit un endpoint TLS Yellowstone standard ; le test `committed_v3_publicnode_mainnet_maps_provider_neutral_yellowstone_grpc` passe et `Debug` ne doit pas exposer l'URL.
|
||||
|
||||
### 8.5 PublicNode Testnet
|
||||
|
||||
Verdict `pre.011` : **DEFERRED, NOT GUESSED**.
|
||||
Verdict final documentaire : **EXTERNAL BLOCK, NOT GUESSED**.
|
||||
|
||||
La page publique réauditée le 2026-08-24 expose une capacité Solana Testnet gRPC, mais l'hostname exact n'a pas été obtenu depuis une source suffisamment autoritative/indexable. Aucun profil Testnet n'est committé avant confirmation.
|
||||
|
||||
`pre.012` doit soit :
|
||||
Le réaudit officiel du 2026-08-24 confirme une capacité Solana Testnet gRPC chez PublicNode, mais l'hostname exact n'a pas été obtenu depuis une source PublicNode suffisamment autoritative. Aucun profil, aucun hostname déduit et aucun smoke Testnet ne sont versionnés.
|
||||
|
||||
```text
|
||||
confirmer hostname + réussir le smoke -> PASS
|
||||
ou documenter l'impossibilité externe -> EXTERNAL BLOCK, sans endpoint inventé
|
||||
capacité Testnet gRPC confirmée
|
||||
hostname exact non confirmé
|
||||
profil KSP absent
|
||||
smoke KSP absent
|
||||
raison interdiction d'inventer un endpoint provider
|
||||
```
|
||||
|
||||
## 9. Provider-neutrality
|
||||
|
||||
| Point | Verdict |
|
||||
|-----------------------------------------------|----------------------|
|
||||
| type public `PublicNodeGrpc*` sans divergence | absent, **PASS** |
|
||||
| protocol standard encodé comme provider | non, **PASS** |
|
||||
| provider descriptif séparé | oui, **PASS source** |
|
||||
| auth PublicNode hardcodée dans Transport | non, **PASS** |
|
||||
| Helius/OrbitFlare runtime gRPC dans `0.2.9` | non, **PASS** |
|
||||
| provider extensions dans N2 | aucune, **PASS** |
|
||||
| Point | Verdict |
|
||||
|-----------------------------------------------|------------------|
|
||||
| type public `PublicNodeGrpc*` sans divergence | absent, **PASS** |
|
||||
| protocol standard encodé comme provider | non, **PASS** |
|
||||
| provider descriptif séparé | oui, **PASS** |
|
||||
| auth PublicNode hardcodée dans Transport | non, **PASS** |
|
||||
| Helius/OrbitFlare runtime gRPC dans `0.2.9` | non, **PASS** |
|
||||
| provider extensions dans N2 | aucune, **PASS** |
|
||||
|
||||
## 10. Non-régressions obligatoires
|
||||
|
||||
@@ -322,7 +326,7 @@ Transport -> std::env KSP_* interdit
|
||||
tracing direct Transport interdit
|
||||
```
|
||||
|
||||
`pre.011` ne modifie pas Transport runtime ; son seuil est donc au minimum la baseline `pre.010-fix.001`.
|
||||
`pre.012` ne modifie pas le runtime Transport ; elle ajoute uniquement un smoke live ignoré par défaut et de la documentation/audit. Son seuil de non-régression est la baseline `pre.011`.
|
||||
|
||||
## 11. Historique des gates fermé
|
||||
|
||||
@@ -340,84 +344,79 @@ Les détails de commandes, warnings corrigés et fichiers exacts restent dans le
|
||||
| `pre.008` + `fix.001` | Blocks fermé |
|
||||
| `pre.009` + `fix.001` | bidi/backpressure fermé |
|
||||
| `pre.010` + `fix.001` | reconnect/replay fermé sans warning |
|
||||
| `pre.011` | Config V3/PublicNode mapping fermé |
|
||||
|
||||
Cette table remplace les anciens appendices numérotés successivement `19.x`, `20`, `21`, etc. qui rendaient le document ambigu.
|
||||
|
||||
## 12. Gate opérateur `pre.011`
|
||||
## 12. Gate opérateur `pre.012`
|
||||
|
||||
Commandes requises :
|
||||
### 12.1 Preuves source déjà matérialisées
|
||||
|
||||
| Exigence | État candidate |
|
||||
|----------------------------------------------|----------------------|
|
||||
| réaudit `master` Yellowstone | **PASS SOURCE** |
|
||||
| service `Geyser` et wire N2 inchangés | **PASS SOURCE** |
|
||||
| licence proto Apache-2.0 toujours déclarée | **PASS SOURCE** |
|
||||
| PublicNode Mainnet endpoint officiel | **PASS SOURCE** |
|
||||
| PublicNode Testnet hostname exact | **EXTERNAL BLOCK** |
|
||||
| smoke Mainnet programmatique sans credential | **ADDED, NOT RUN** |
|
||||
| README/USAGE Yellowstone + Config V3 | **SOURCE OK** |
|
||||
| règles tableaux Markdown | **ADDED** |
|
||||
| audit mécanique tableaux | **ADDED** |
|
||||
| prompt `0.2.10` OrbitFlare | **ADDED** |
|
||||
| graphes Cargo finaux | **PENDING OPERATOR** |
|
||||
| workspace final | **PENDING OPERATOR** |
|
||||
|
||||
Le réaudit `master` distingue explicitement le plugin courant du dernier tag GitHub indexé : `master` déclare `yellowstone-grpc-geyser 15.1.2`, `yellowstone-grpc-client 13.3.0`, `yellowstone-grpc-proto 12.6.0` et Agave `4.2.0`, alors que la page des releases indexée expose encore `v14.2.2+solana.4.1.0` comme dernière release publiée. Aucun numéro n'est fusionné artificiellement.
|
||||
|
||||
### 12.2 Commandes requises
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
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.2.9
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets
|
||||
cargo test -p ksp-config-lib
|
||||
cargo test -p ksp-config-lib --test public_api
|
||||
cargo test -p ksp-config-lib --test ownership
|
||||
cargo test -p ksp-onchain-transport-lib
|
||||
cargo test -p ksp-core-lib --test workspace_dependencies
|
||||
cargo test --workspace
|
||||
```
|
||||
|
||||
Résultats attendus si aucun fix n'est requis :
|
||||
|
||||
```text
|
||||
audit Rust clean / 0 export candidate
|
||||
check/clippy PASS sans warning
|
||||
Config unit baseline 110 + 3 nouveaux tests V3 = 113 attendus
|
||||
Config public API 15 attendus, canari enrichi
|
||||
Config ownership 5 attendus
|
||||
Transport unit >= 383 sans régression
|
||||
Transport public API >= 49 sans régression
|
||||
Transport completeness >= 43 sans régression
|
||||
Transport doctests 4 sans régression
|
||||
workspace dependencies 3 sans régression
|
||||
cargo test --workspace PASS
|
||||
```
|
||||
|
||||
Ces nombres sont des attentes de candidate, pas un résultat déclaré avant exécution opérateur.
|
||||
|
||||
## 13. Gate `pre.012` et clôture stable
|
||||
|
||||
### 13.1 Live PublicNode
|
||||
|
||||
Mainnet minimal :
|
||||
|
||||
```text
|
||||
opt-in seulement
|
||||
settings Transport programmatic
|
||||
aucun secret
|
||||
connexion TLS
|
||||
unary simple et/ou Subscribe borné selon smoke retenu
|
||||
close borné
|
||||
aucune dépendance Config ajoutée au test Transport pur
|
||||
```
|
||||
|
||||
Testnet seulement après endpoint exact confirmé.
|
||||
|
||||
### 13.2 Compliance finale
|
||||
|
||||
```text
|
||||
réaudit upstream release/proto
|
||||
cargo tree Transport
|
||||
cargo tree Transport --duplicates
|
||||
cargo tree -p ksp-onchain-transport-lib
|
||||
cargo tree -p ksp-onchain-transport-lib --duplicates
|
||||
cargo tree --duplicates
|
||||
HTTP 52 + 14
|
||||
Standard WS 18/18
|
||||
Helius WS
|
||||
public API crate-root
|
||||
release completeness
|
||||
Config V1/V2/V3
|
||||
security/redaction
|
||||
README/USAGE
|
||||
prompt release suivante
|
||||
workspace complet
|
||||
```
|
||||
|
||||
Smoke live séparé :
|
||||
|
||||
```bash
|
||||
cargo test -p ksp-onchain-transport-lib --test yellowstone_publicnode_smoke -- --ignored --nocapture
|
||||
```
|
||||
|
||||
Une commande non exécutée n'est jamais déclarée réussie. Le smoke peut révéler un incident externe ; ce résultat doit être consigné sans transformer un échec réseau/provider en défaut local fictif.
|
||||
|
||||
## 13. Compliance finale et verdict stable
|
||||
|
||||
### 13.1 Inventaires à préserver
|
||||
|
||||
```text
|
||||
HTTP current typed 52/52
|
||||
HTTP historical 14/14 Deprecated/Removed
|
||||
Standard WebSocket 9 familles / 18 opérations
|
||||
Helius LaserStream WebSocket 7 familles standard + transaction + slotsUpdates
|
||||
Yellowstone unary 7/7
|
||||
Yellowstone Subscribe standard N2 + 9 updates
|
||||
Config Transport V1/V2/V3 backward-readable
|
||||
```
|
||||
|
||||
### 13.2 Documentation et règles
|
||||
|
||||
Le format des tableaux Markdown devient normatif dans `RULES_DOCUMENTATION.md` : aucun pipe littéral ou échappé dans une cellule, colonnes alignées sur le contenu le plus large, une seule marge d'espace autour du contenu maximal, et séparateurs dimensionnés exactement. Le canari `scripts/audit_markdown_tables.py` vérifie mécaniquement les fichiers Markdown modifiés hors blocs de code.
|
||||
|
||||
Le nettoyage `pre.012` a également normalisé les neuf documents modifiables qui présentaient encore des écarts connus. Le scan de préparation sur les documents KSP, crates et deltas `0.2.9` est vert sur 87 tableaux dans 116 fichiers. Les seuls écarts trouvés par un scan de tout le repository appartiennent à d'anciens deltas `0.1.4` immuables ; ils ne sont pas réécrits uniquement pour du formatage.
|
||||
|
||||
### 13.3 Verdict stable
|
||||
|
||||
`0.2.9` peut devenir stable seulement si tous les éléments suivants sont vrais :
|
||||
`0.2.9` peut devenir stable lorsque le gate opérateur `pre.012` confirme tous les points locaux suivants :
|
||||
|
||||
```text
|
||||
standard vs extension explicitement classifié
|
||||
@@ -428,10 +427,14 @@ resource/backpressure/lifecycle verts
|
||||
reconnect/replay sans promesse lossless
|
||||
Config V3 backward V1/V2
|
||||
provider/protocol distincts
|
||||
PublicNode Mainnet validé ou incident externe précisément documenté
|
||||
PublicNode Mainnet smoke exécuté avec résultat consigné
|
||||
Testnet jamais inventé
|
||||
HTTP/WS/Helius non régressés
|
||||
dependency firewall vert
|
||||
cargo graphs inspectés
|
||||
README/USAGE finaux
|
||||
prompt 0.2.10 prêt
|
||||
workspace final vert
|
||||
```
|
||||
|
||||
Le bloc Testnet n'est pas un faux FAIL local : l'existence du service est confirmée, mais l'endpoint exact reste indisponible dans la source officielle consultée. Il est donc fermé comme limite externe documentée, sans profil ni smoke inventé.
|
||||
|
||||
Reference in New Issue
Block a user