v0.2.10-pre.002
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/plans/017-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC_PLAN.md -->
|
||||
<!-- version: 1 -->
|
||||
<!-- version: 2 -->
|
||||
|
||||
# Plan `0.2.10` — OrbitFlare Yellowstone gRPC
|
||||
|
||||
**Statut courant : `0.2.10-pre.001` ouvre la release par un audit provider actuel. Le gate d'architecture est positif avec une contrainte renforcée : le moteur gRPC N1 et le standard Yellowstone N2 livrés par `0.2.9` sont immuables pour cette release. OrbitFlare doit être composé au-dessus de ces couches ; aucune modification du moteur n'est autorisée pour satisfaire une policy provider.**
|
||||
**Statut courant : `0.2.10-pre.002` matérialise le profil Config V3 `orbitflare_devnet` et un smoke opt-in de caractérisation `Subscribe -> Slot + Ping` construit exclusivement sur le standard Yellowstone existant. Le moteur gRPC N1 et le standard N2 restent inchangés ; le verdict live Devnet est un gate opérateur de cette tranche.**
|
||||
|
||||
## 1. Base et autorité
|
||||
|
||||
@@ -158,21 +158,21 @@ Une façade OrbitFlare publique n'est créée que si un consumer KSP doit réell
|
||||
|
||||
Preuves fournies le 2026-08-25 :
|
||||
|
||||
| Gate | Résultat |
|
||||
|-------------------------------------------|----------------------------------|
|
||||
| `cargo fmt --all` | PASS |
|
||||
| audit Rust workspace | PASS, 0 candidate export |
|
||||
| audit Markdown tables | PASS, 87 tables et 261 files |
|
||||
| `cargo check --workspace` | PASS |
|
||||
| `cargo clippy --workspace --all-targets` | PASS |
|
||||
| `cargo test --workspace` | PASS |
|
||||
| Transport unit | 383 sur 383 PASS |
|
||||
| Transport public API | 49 sur 49 PASS |
|
||||
| Transport release completeness | 43 sur 43 PASS |
|
||||
| Config unit | 113 sur 113 PASS |
|
||||
| PublicNode Yellowstone live | ignored opt-in comme attendu |
|
||||
| `cargo tree --duplicates` Transport | fourni et inspecté |
|
||||
| `cargo tree -p ksp-onchain-transport-lib` | à rejouer avant commit `pre.001` |
|
||||
| Gate | Résultat |
|
||||
|-------------------------------------------|------------------------------------------|
|
||||
| `cargo fmt --all` | PASS |
|
||||
| audit Rust workspace | PASS, 0 candidate export |
|
||||
| audit Markdown tables | PASS, 97 tables et 233 files sur `pre.1` |
|
||||
| `cargo check --workspace` | PASS |
|
||||
| `cargo clippy --workspace --all-targets` | PASS |
|
||||
| `cargo test --workspace` | PASS |
|
||||
| Transport unit | 383 sur 383 PASS |
|
||||
| Transport public API | 49 sur 49 PASS |
|
||||
| Transport release completeness | 43 sur 43 PASS |
|
||||
| Config unit | 113 sur 113 PASS |
|
||||
| PublicNode Yellowstone live | ignored opt-in comme attendu |
|
||||
| `cargo tree --duplicates` Transport | fourni et inspecté |
|
||||
| `cargo tree -p ksp-onchain-transport-lib` | fourni sur `0.2.10-pre.1` |
|
||||
|
||||
Versions visibles dans le graphe fourni :
|
||||
|
||||
@@ -419,12 +419,24 @@ pas de heartbeat dans grpc_defaults
|
||||
pas de secret tant que le Devnet Free n'en exige pas
|
||||
```
|
||||
|
||||
Profil prévu :
|
||||
Profil matérialisé en `pre.002` :
|
||||
|
||||
```text
|
||||
orbitflare_devnet
|
||||
```
|
||||
|
||||
Le profil conserve les companions HTTP/WS Solana Devnet standards et ajoute exactement un endpoint gRPC :
|
||||
|
||||
```text
|
||||
name = orbitflare_solana_devnet_yellowstone
|
||||
provider = orbitflare
|
||||
cluster = devnet
|
||||
protocol = solana_yellowstone
|
||||
url = http://devnet.rpc.orbitflare.com:10000
|
||||
metadata = []
|
||||
secret = []
|
||||
```
|
||||
|
||||
Si le service opérateur réel impose ensuite un token gRPC :
|
||||
|
||||
```text
|
||||
@@ -437,7 +449,7 @@ Cette variable n'est ajoutée à `.env.example` qu'après preuve qu'un secret da
|
||||
|
||||
### 12.1 Premier canari
|
||||
|
||||
Le premier canari doit utiliser **le standard N2 existant directement** :
|
||||
`pre.002` ajoute `tests/yellowstone_orbitflare_smoke.rs`. Ce canari opt-in utilise **le standard N2 existant directement** et ne dépend pas de Config, conformément à la frontière Transport -> Config interdite :
|
||||
|
||||
```text
|
||||
endpoint = http://devnet.rpc.orbitflare.com:10000
|
||||
@@ -533,8 +545,8 @@ pre.001 audit actuel + architecture immuable N1/N2 + auth/endpoints + free Devn
|
||||
preuve : plan 017 + validation 013 + delta + baseline
|
||||
|
||||
pre.002 profil Config V3 OrbitFlare Devnet + smoke de caractérisation standard N2
|
||||
preuve : Subscribe -> Slot + observation Ping serveur si disponible + probes provider ciblés
|
||||
aucune modification moteur gRPC
|
||||
statique : profil sans metadata + canari Subscribe slots confirmed + fenêtre Ping 45 s + close borné
|
||||
live : Subscribe -> Slot + observation Ping serveur ; aucune modification moteur gRPC
|
||||
|
||||
pre.003 soit gate technique final si OrbitFlare reste 100 pourcent standard,
|
||||
soit tranche provider-specific minimale uniquement si pre.002 démontre une divergence réelle
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/rules/RULES_DOCUMENTATION.md -->
|
||||
<!-- version: 5 -->
|
||||
<!-- version: 6 -->
|
||||
|
||||
# Règles de documentation
|
||||
|
||||
@@ -41,6 +41,12 @@ Les règles `DOC-*` s'appliquent aux documents Markdown internes et à leur orga
|
||||
- **DOC-TABLE-005** — Lorsqu’une modification touche une ligne d’un tableau, le tableau entier est réaligné avant livraison. `python3 scripts/audit_markdown_tables.py <fichiers-markdown-modifiés>` est le canari mécanique recommandé pour les fichiers concernés ; les blocs de code fenced ne sont pas interprétés comme des tableaux.
|
||||
- **DOC-TABLE-006** — L’immuabilité des deltas déjà publiés prime sur un reformatage rétrospectif : un ancien fichier `deltas/` n’est jamais réécrit uniquement pour satisfaire une règle de présentation introduite ultérieurement. Tout nouveau delta et tout autre tableau modifiable créé ou touché doivent en revanche respecter immédiatement `DOC-TABLE-001` à `DOC-TABLE-005`.
|
||||
|
||||
## Espacement vertical Markdown
|
||||
|
||||
- **DOC-BLANK-001** — Hors bloc de code fenced, un document Markdown KSP ne contient jamais plus d’une ligne vide consécutive. Une ligne composée uniquement d’espaces ou de tabulations est considérée comme vide.
|
||||
- **DOC-BLANK-002** — `python3 scripts/audit_markdown_tables.py <fichiers-ou-répertoires>` contrôle aussi les lignes vides multiples. Lors d’un parcours récursif, les répertoires générés ou tiers tels que `node_modules`, `dist`, `target`, `.git`, `.idea`, `.venv` et `__pycache__` sont exclus afin que le résultat porte uniquement sur les Markdown KSP-owned. Les blocs de code fenced conservent librement leur espacement interne.
|
||||
- **DOC-BLANK-003** — Les deltas déjà publiés restent immuables et ne sont jamais réécrits uniquement pour satisfaire `DOC-BLANK-001`. Les audits de release portent sur le répertoire de delta actif et sur les autres Markdown modifiables ; un audit historique explicite peut donc signaler des écarts hérités sans autoriser leur correction rétroactive.
|
||||
|
||||
## Contenu et exactitude
|
||||
|
||||
- **DOC-CONTENT-001** — Une documentation décrit l'état réellement décidé ou validé et distingue explicitement les hypothèses, propositions, TODO et questions ouvertes.
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/validation/013-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC.md -->
|
||||
<!-- version: 1 -->
|
||||
<!-- version: 2 -->
|
||||
|
||||
# Validation `0.2.10` — OrbitFlare Yellowstone gRPC
|
||||
|
||||
**Statut courant : matrice ouverte par `0.2.10-pre.001`. Le gate d'architecture est positif. Le premier objectif live est le Devnet gratuit OrbitFlare via le standard Yellowstone KSP inchangé. Les verdicts provider non encore testés restent explicitement `PENDING` ou `UNKNOWN`.**
|
||||
**Statut courant : `0.2.10-pre.002` matérialise le profil Config V3 OrbitFlare Devnet et le smoke opt-in de caractérisation sur le standard Yellowstone KSP inchangé. Les preuves statiques sont fermées ; `connect`, `Subscribe`, `Slot` et `Ping` restent `PENDING` jusqu'au run live opérateur.**
|
||||
|
||||
## 1. Autorités
|
||||
|
||||
@@ -36,7 +36,7 @@ Yellowstone upstream actuel
|
||||
| Transport release completeness | 43 sur 43 PASS |
|
||||
| Config unit | 113 sur 113 PASS |
|
||||
| graph duplicates Transport | fourni, aucun conflit N1 visible |
|
||||
| graph complet Transport | PENDING avant commit |
|
||||
| graph complet Transport | fourni sur `0.2.10-pre.1` PASS |
|
||||
|
||||
## 3. Invariant architecture
|
||||
|
||||
@@ -99,7 +99,7 @@ KSP ne prétend pas qu'un canal gRPC plaintext bénéficie d'une sécurité TLS
|
||||
| aucune metadata gRPC | SDK Go OrbitFlare | **DOCUMENTED** |
|
||||
| auth Devnet Free réelle | smoke KSP à exécuter | **PENDING** |
|
||||
|
||||
Aucun secret opérateur n'est demandé pour `pre.001`.
|
||||
Aucun secret opérateur n’est demandé pour le premier smoke `pre.002` ; la tentative initiale est explicitement sans metadata.
|
||||
|
||||
## 7. Heartbeat
|
||||
|
||||
@@ -163,17 +163,17 @@ Ces valeurs restent provider-owned et ne deviennent pas des validations généri
|
||||
|
||||
## 11. Config V3
|
||||
|
||||
| Exigence | Verdict |
|
||||
|-------------------------------------|-------------|
|
||||
| nouveau format Config nécessaire | **NO** |
|
||||
| `provider = orbitflare` | **PLANNED** |
|
||||
| `protocol = solana_yellowstone` | **PASS** |
|
||||
| `cluster = devnet` | **PLANNED** |
|
||||
| Devnet URL publique | **PLANNED** |
|
||||
| secret metadata par défaut | **NO** |
|
||||
| `X-ORBIT-KEY` dans Transport Config | **FORBID** |
|
||||
| `x-token` si token gRPC prouvé | **DEFER** |
|
||||
| heartbeat dans `grpc_defaults` | **NO** |
|
||||
| Exigence | Verdict |
|
||||
|-------------------------------------|-----------------|
|
||||
| nouveau format Config nécessaire | **NO** |
|
||||
| `provider = orbitflare` | **PASS STATIC** |
|
||||
| `protocol = solana_yellowstone` | **PASS STATIC** |
|
||||
| `cluster = devnet` | **PASS STATIC** |
|
||||
| Devnet URL publique | **PASS STATIC** |
|
||||
| secret metadata par défaut | **NO / PASS** |
|
||||
| `X-ORBIT-KEY` dans Transport Config | **FORBID** |
|
||||
| `x-token` si token gRPC prouvé | **DEFER** |
|
||||
| heartbeat dans `grpc_defaults` | **NO** |
|
||||
|
||||
## 12. Smoke Devnet attendu
|
||||
|
||||
@@ -194,15 +194,15 @@ close borné
|
||||
|
||||
Verdicts actuels :
|
||||
|
||||
| Preuve | Verdict |
|
||||
|-----------------------------|-------------|
|
||||
| endpoint parsé par N1 | EXPECTED |
|
||||
| connect Devnet | **PENDING** |
|
||||
| Subscribe accepté | **PENDING** |
|
||||
| Slot reçu | **PENDING** |
|
||||
| server Ping reçu | **PENDING** |
|
||||
| auto reply KSP déterministe | **PASS** |
|
||||
| close borné | **PASS N1** |
|
||||
| Preuve | Verdict |
|
||||
|------------------------------|----------------------------|
|
||||
| endpoint parsé par Config/N1 | **PASS STATIC** |
|
||||
| connect Devnet | **PENDING** |
|
||||
| Subscribe accepté | **PENDING** |
|
||||
| Slot reçu | **PENDING** |
|
||||
| server Ping reçu | **PENDING** |
|
||||
| auto reply KSP déterministe | **PASS N1** |
|
||||
| close borné | **PASS N1 / LIVE PENDING** |
|
||||
|
||||
## 13. Provider overlay gate
|
||||
|
||||
@@ -246,7 +246,7 @@ ownership/close provider bornés
|
||||
| baseline fmt/audits/check/clippy | **PASS** |
|
||||
| workspace test | **PASS** |
|
||||
| graph duplicates | **PASS** |
|
||||
| graph complet Transport | **PENDING OPERATOR** |
|
||||
| graph complet Transport | **PASS** |
|
||||
| sources OrbitFlare actuelles | **PASS** |
|
||||
| sources Yellowstone actuelles | **PASS** |
|
||||
| Free Devnet gRPC confirmé | **PASS** |
|
||||
@@ -267,6 +267,47 @@ Verdict :
|
||||
|
||||
```text
|
||||
architecture/sizing gate = POSITIVE
|
||||
operator commit gate = PENDING full cargo tree + validations overlay
|
||||
live provider gate = reserved for pre.002+
|
||||
operator pre.001 gate = PASS
|
||||
pre.002 static gate = READY FOR OPERATOR VALIDATION
|
||||
live provider gate = PENDING pre.002 characterization
|
||||
```
|
||||
|
||||
## 16. Gate `pre.002` candidat
|
||||
|
||||
| Critère | Verdict |
|
||||
|-------------------------------------------|----------------------|
|
||||
| Cargo `0.2.10-pre.2` | **PASS STATIC** |
|
||||
| profil Config `orbitflare_devnet` | **PASS STATIC** |
|
||||
| endpoint gRPC sans metadata | **PASS STATIC** |
|
||||
| companions HTTP/WS Devnet préservés | **PASS STATIC** |
|
||||
| nouveau format Config | **NO** |
|
||||
| `.env.example` / secret OrbitFlare ajouté | **NO** |
|
||||
| moteur N1 modifié | **NO** |
|
||||
| standard N2 modifié | **NO** |
|
||||
| SDK OrbitFlare ajouté | **NO** |
|
||||
| smoke provider dans Transport | **PASS STATIC** |
|
||||
| reconnect du smoke | zéro retry |
|
||||
| fenêtre caractérisation | 45 secondes |
|
||||
| `Subscribe -> Slot` live | **PENDING OPERATOR** |
|
||||
| `SubscribeUpdate::Ping` live | **PENDING OPERATOR** |
|
||||
| close live | **PENDING OPERATOR** |
|
||||
| auth Devnet Free sans metadata | **PENDING OPERATOR** |
|
||||
|
||||
Commande live dédiée :
|
||||
|
||||
```bash
|
||||
cargo test -p ksp-onchain-transport-lib --test yellowstone_orbitflare_smoke -- --ignored --nocapture
|
||||
```
|
||||
|
||||
Le résultat live décide la suite :
|
||||
|
||||
```text
|
||||
Slot + Ping PASS
|
||||
-> OrbitFlare reste standard ; aucun provider heartbeat/facade
|
||||
|
||||
connection/auth failure
|
||||
-> classifier le service/licence réel avant toute metadata
|
||||
|
||||
Slot PASS mais Ping absent
|
||||
-> divergence heartbeat à prouver avant une couche provider-specific
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user