v0.2.10-pre.002-fix.001
This commit is contained in:
196
deltas/0.2.10/pre.002-fix.001.md
Normal file
196
deltas/0.2.10/pre.002-fix.001.md
Normal file
@@ -0,0 +1,196 @@
|
||||
<!-- file: deltas/0.2.10/pre.002-fix.001.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.2.10-pre.002-fix.001` — OrbitFlare License Key `x-token`
|
||||
|
||||
## 1. Base et identité
|
||||
|
||||
Base exacte :
|
||||
|
||||
```text
|
||||
0.2.10-pre.002 commité
|
||||
```
|
||||
|
||||
Le fix porte une correction runtime/configuration de l’auth provider. La version Cargo devient donc :
|
||||
|
||||
```text
|
||||
workspace.package.version = 0.2.10-pre.2.fix.1
|
||||
commit attendu = v0.2.10-pre.002-fix.001
|
||||
aucun tag prerelease
|
||||
```
|
||||
|
||||
## 2. Défaut démontré par le live `pre.002`
|
||||
|
||||
Le gate statique/workspace `pre.002` est vert. Le smoke live sans metadata a atteint OrbitFlare puis l’ouverture du stream a échoué de manière sûre :
|
||||
|
||||
```text
|
||||
grpc_operation = SubscribeOpen
|
||||
grpc_status = Unauthenticated
|
||||
grpc_code = The request does not have valid authentication credentials
|
||||
```
|
||||
|
||||
Le Dashboard opérateur montre un produit `Solana Free` avec License Key `ORBIT-*` et `API Key Mode Active`.
|
||||
|
||||
La référence Yellowstone OrbitFlare précise ensuite le contrat data-plane :
|
||||
|
||||
```text
|
||||
ORBITFLARE_LICENSE_KEY
|
||||
-> metadata gRPC x-token
|
||||
-> Yellowstone
|
||||
```
|
||||
|
||||
Le `X-ORBIT-KEY` et le Bearer Device Flow restent des credentials Customer API et ne sont pas utilisés par Transport Yellowstone.
|
||||
|
||||
## 3. Correction Config V3
|
||||
|
||||
`config/std.transport.json` conserve le même endpoint et ajoute uniquement la metadata secrète requise :
|
||||
|
||||
```text
|
||||
provider = orbitflare
|
||||
cluster = devnet
|
||||
protocol = solana_yellowstone
|
||||
url = http://devnet.rpc.orbitflare.com:10000
|
||||
metadata = []
|
||||
secret_metadata = x-token <- ${KSP_SECRET_ORBITFLARE_DEVNET_GRPC_X_TOKEN}
|
||||
```
|
||||
|
||||
Aucun format Config V4 n’est créé.
|
||||
|
||||
`.env.example` inventorie désormais :
|
||||
|
||||
```text
|
||||
KSP_SECRET_ORBITFLARE_DEVNET_GRPC_X_TOKEN
|
||||
```
|
||||
|
||||
La valeur locale attendue est la License Key `ORBIT-*`. Une `X-ORBIT-KEY` Customer API ne doit jamais être placée dans cette variable.
|
||||
|
||||
## 4. Preuve Config déterministe
|
||||
|
||||
Le test `committed_v3_orbitflare_devnet_profile_maps_provider_neutral_yellowstone_grpc_with_license_x_token` injecte un canari secret via `ConfigEnvironment` et prouve :
|
||||
|
||||
```text
|
||||
profil explicite orbitflare_devnet
|
||||
companions HTTP/WS Devnet inchangés
|
||||
endpoint Yellowstone OrbitFlare inchangé
|
||||
metadata key = x-token
|
||||
metadata classée secret
|
||||
validation Transport PASS
|
||||
URL provider absente du Debug
|
||||
canari secret absent du Debug
|
||||
X-ORBIT-KEY absent du Transport
|
||||
```
|
||||
|
||||
## 5. Smoke live corrigé
|
||||
|
||||
`yellowstone_orbitflare_smoke.rs` ne dépend toujours pas de Config et ne lit aucun environnement. Il suit le pattern de sécurité déjà utilisé par les smokes PublicNode :
|
||||
|
||||
```text
|
||||
une License Key lue sur stdin
|
||||
aucun secret en argument de ligne de commande
|
||||
YellowstoneGrpcMetadataEntry::secret("x-token", ...)
|
||||
reconnect max_retries = 0
|
||||
Subscribe slots confirmed
|
||||
fenêtre Slot + Ping = 45 s
|
||||
close borné
|
||||
```
|
||||
|
||||
Le smoke vérifie également que la License Key n’apparaît pas dans `Debug`.
|
||||
|
||||
Commande opérateur :
|
||||
|
||||
```bash
|
||||
read -rsp 'OrbitFlare License Key: ' ORBITFLARE_LICENSE_KEY; echo
|
||||
printf '%s\n' "$ORBITFLARE_LICENSE_KEY" | cargo test -p ksp-onchain-transport-lib --test yellowstone_orbitflare_smoke -- --ignored --nocapture
|
||||
unset ORBITFLARE_LICENSE_KEY
|
||||
```
|
||||
|
||||
## 6. Invariant architectural
|
||||
|
||||
Toujours inchangés :
|
||||
|
||||
```text
|
||||
src/grpc_settings.rs
|
||||
src/grpc_channel.rs
|
||||
src/grpc_unary.rs
|
||||
src/grpc_subscribe.rs
|
||||
src/grpc_stream.rs
|
||||
```
|
||||
|
||||
Le standard Yellowstone N2 reste inchangé. Aucun SDK OrbitFlare runtime n’est ajouté.
|
||||
|
||||
L’auth provider est entièrement composée par la surface metadata secrète déjà existante.
|
||||
|
||||
## 7. Heartbeat
|
||||
|
||||
Ce fix ne matérialise aucun heartbeat OrbitFlare.
|
||||
|
||||
Le rerun authentifié doit d’abord qualifier :
|
||||
|
||||
```text
|
||||
Slot non nul
|
||||
SubscribeUpdate::Ping serveur
|
||||
```
|
||||
|
||||
Si les deux sont observés, N1 répond déjà automatiquement au Ping standard et aucune couche provider heartbeat n’est requise.
|
||||
|
||||
Si le stream authentifié fonctionne mais n’émet aucun Ping serveur dans la fenêtre de caractérisation, `pre.003` devient une tranche provider-specific au-dessus de N1/N2. Il reste interdit d’ajouter un timer OrbitFlare au moteur gRPC.
|
||||
|
||||
## 8. Validation disponible dans l’environnement de génération
|
||||
|
||||
Exécuté :
|
||||
|
||||
```text
|
||||
python3 scripts/audit_rust_workspace_rules.py
|
||||
General Rust rule audit: clean
|
||||
Rust export completeness audit: 0 candidate(s)
|
||||
KSP workspace Rust rule audit: clean
|
||||
|
||||
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.2.10
|
||||
Markdown table audit: clean (99 table(s), 99 file(s))
|
||||
|
||||
config/std.transport.json
|
||||
JSON parse PASS
|
||||
JSON Schema validation PASS
|
||||
|
||||
comparaison N1 avec pre.002
|
||||
grpc_settings.rs inchangé
|
||||
grpc_channel.rs inchangé
|
||||
grpc_unary.rs inchangé
|
||||
grpc_subscribe.rs inchangé
|
||||
grpc_stream.rs inchangé
|
||||
```
|
||||
|
||||
Aucune commande Cargo n’est déclarée exécutée dans l’environnement de génération.
|
||||
|
||||
## 9. Gates opérateur
|
||||
|
||||
Après application du fix :
|
||||
|
||||
```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.10
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets
|
||||
cargo test -p ksp-config-lib
|
||||
cargo test -p ksp-onchain-transport-lib
|
||||
cargo test -p ksp-core-lib --test workspace_dependencies
|
||||
cargo test --workspace
|
||||
```
|
||||
|
||||
Puis exécuter le live authentifié décrit en section 5.
|
||||
|
||||
## 10. Fichiers ajoutés/modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
.env.example
|
||||
config/std.transport.json
|
||||
crates/ksp-config-lib/unit_tests/transport.rs
|
||||
crates/ksp-onchain-transport-lib/tests/yellowstone_orbitflare_smoke.rs
|
||||
docs/plans/017-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC_PLAN.md
|
||||
docs/validation/013-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC.md
|
||||
deltas/0.2.10/pre.002-fix.001.md
|
||||
```
|
||||
|
||||
Le delta commité `deltas/0.2.10/pre.002.md` reste immuable.
|
||||
Reference in New Issue
Block a user