# Delta `0.2.10-pre.001` — audit/sizing OrbitFlare Yellowstone gRPC ## 1. Base requise et vérifiée Archive autoritaire fournie : ```text khadhroony-solana-project-v0.2.9-full-from-gitea.zip ``` État vérifié : ```text workspace.package.version = 0.2.9 deltas/0.2.9/rel.001.md présent prompts/015-V0_2_10_START_PROMPT.md présent metadata .git absente de l'archive Gitea ``` Cette livraison ouvre : ```text workspace.package.version = 0.2.10-pre.1 commit attendu = v0.2.10-pre.001 aucun tag prerelease ``` ## 2. Objet `pre.001` exécute le gate documentaire obligatoire : ```text lecture base/règles/architecture baseline stable réaudit OrbitFlare actuel réaudit Yellowstone actuel auth control-plane/data-plane endpoints/network/security Free Devnet gRPC heartbeat capabilities/unary/replay limits/quotas architecture N1/N2 immuable threat model sizing et forecast ``` Aucun code provider lourd, SDK OrbitFlare, metadata secrète ou heartbeat supplémentaire n'est ajouté. ## 3. Baseline opérateur acquise Preuves fournies le 2026-08-25 sur `v0.2.9` : ```text cargo fmt --all OK python3 scripts/audit_rust_workspace_rules.py OK / clean python3 scripts/audit_markdown_tables.py OK / 87 tables / 261 files cargo check --workspace OK cargo clippy --workspace --all-targets OK cargo test --workspace OK cargo tree -p ksp-onchain-transport-lib --duplicates fourni ``` Transport pendant le workspace test : ```text 383 unit 49 public_api 43 release_completeness 4 doctests ``` Les live smokes restent opt-in/ignored par défaut. Le `cargo tree -p ksp-onchain-transport-lib` complet n'a pas encore été fourni et doit être rejoué avant commit. ## 4. Graphe de dépendances inspecté Versions utiles visibles : ```text yellowstone-grpc-proto 12.6.0 tonic 0.14.6 tonic-prost 0.14.6 prost 0.14.4 tokio 1.53.1 http 1.5.0 reqwest 0.13.4 ``` Aucune divergence Tonic/Prost/Yellowstone ne justifie une intervention. Les doublons restants sont sans impact matériel pour OrbitFlare. ## 5. Réaudit OrbitFlare du 2026-08-25 ### Free Devnet Le pricing actuel confirme : ```text Free 0 USD/mois RPC 10 RPS transactions 1 TPS gRPC Devnet only credit limits unlimited ``` Le CLI documente : ```text RPC Devnet = http://devnet.rpc.orbitflare.com gRPC Devnet = http://devnet.rpc.orbitflare.com:10000 ``` Objectif opérationnel fermé : utiliser OrbitFlare comme provider gRPC Devnet gratuit pour les tests KSP futurs, en complément de PublicNode Mainnet/Testnet. ### Auth Classification : ```text X-ORBIT-KEY Customer API only Bearer Customer API v2 RPC api_key HTTP RPC only account API key ne prouve pas une auth Yellowstone gRPC Dashboard token possible selon licence/service x-token mécanisme Yellowstone plausible si token gRPC distinct aucune metadata documentée par SDK Go pour endpoints régionaux ``` La clé de compte opérateur ne doit pas être fournie au dépôt ni injectée par supposition dans gRPC. ### Heartbeat OrbitFlare recommande un `SubscribeRequest::Ping` périodique. Yellowstone upstream envoie déjà un `SubscribeUpdate::Ping` périodique et KSP N1 répond automatiquement par un Ping standard sans modifier le dernier full request mémorisé. Décision : ```text aucun timer OrbitFlare ajouté au moteur aucun changement YellowstoneGrpcSessionSettings aucune modification grpc_stream.rs pre.002 doit observer le Ping serveur live OrbitFlare Devnet ``` Si ce Ping est observé, la policy standard N1 est suffisante. Sinon, une divergence provider doit être démontrée puis composée au-dessus de N1 sans le modifier. ### Limits ```text 50 connexions gRPC simultanées par IP sur shared subscriptions par connexion annoncées unlimited idle timeout environ 10 minutes RESOURCE_EXHAUSTED au dépassement backoff exponentiel conseillé ``` Ces valeurs restent provider-owned. ## 6. Réaudit Yellowstone actuel État observé : ```text release GitHub courante v15.1.2+solana.4.2.0 yellowstone-grpc-proto publié 12.6.0 ``` Aucune évolution matérielle ne remet en cause le standard N2 de `0.2.9`. Aucune dependency n'est modifiée. ## 7. Invariant architectural supersédant l'hypothèse initiale Décision opérateur explicite : ```text le moteur gRPC ne change jamais pour un provider le moteur WebSocket ne change jamais pour un provider les fonctionnalités provider se composent au-dessus du moteur ``` Pour `0.2.10` : ```text N1 moteur Yellowstone = IMMUTABLE N2 standard Solana = IMMUTABLE N3 OrbitFlare = profile/capability/facade seulement si besoin démontré ``` Le prompt `015` reste autoritatif sauf sur toute formulation qui permettrait de mettre une policy OrbitFlare directement dans le moteur partagé. ## 8. Config V3 La shape existante suffit : ```text profile_id = orbitflare_devnet provider = orbitflare cluster = devnet protocol = solana_yellowstone url = http://devnet.rpc.orbitflare.com:10000 metadata = [] secret_metadata = [] ``` Pas de V4. Pas de secret ajouté avant preuve live. Pas de champ heartbeat moteur. ## 9. Smoke prévu `pre.002` doit commencer par un canari standard N2 : ```text connect OrbitFlare Devnet Free sans metadata Subscribe slots confirmed recevoir Slot non nul observer SubscribeUpdate::Ping pendant une fenêtre bornée de caractérisation fermer proprement ``` Puis sonder séparément les unary et replay sans rendre le smoke minimal dépendant d'entitlements provider non garantis. ## 10. Forecast recalibré Chemin standard probable : ```text pre.001 audit/sizing pre.002 Config Devnet + characterization smoke standard N2 pre.003 gate technique/live final pre.004 réconciliation documentaire finale pre.005 publication minimale rel.001 stable ``` Chemin avec divergence provider démontrée : ```text pre.001 audit/sizing pre.002 Config Devnet + characterization smoke pre.003 provider overlay minimal au-dessus de N1/N2 pre.004 gate technique/live final pre.005 réconciliation documentaire finale pre.006 publication minimale rel.001 stable ``` ## 11. Fichiers ajoutés ```text 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.001.md ``` ## 12. Fichiers modifiés ```text Cargo.toml docs/000-README.md docs/plans/000-README.md docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md docs/validation/000-README.md ``` ## 13. Fichiers volontairement inchangés ```text ROADMAP.md CHANGELOG.md .env.example config/** crates/** docs/architecture/** crates/ksp-onchain-transport-lib/README.md crates/ksp-onchain-transport-lib/USAGE.md ``` Aucune implémentation provider ou Config runtime n'est introduite dans `pre.001`. ## 14. Sources externes réauditées ```text https://docs.orbitflare.com/llms.txt https://docs.orbitflare.com/cli https://docs.orbitflare.com/authentication https://docs.orbitflare.com/data-streaming/yellowstone https://docs.orbitflare.com/data-streaming/yellowstone-quickstart https://docs.orbitflare.com/sdk/go-grpc https://orbitflare.com/pricing https://orbitflare.com/products/rpc-nodes https://orbitflare.com/products/solana-grpc https://github.com/rpcpool/yellowstone-grpc https://github.com/rpcpool/yellowstone-grpc/releases https://github.com/rpcpool/yellowstone-grpc/blob/master/README.md https://github.com/rpcpool/yellowstone-grpc/blob/master/yellowstone-grpc-proto/proto/geyser.proto ``` ## 15. Validations de préparation Le sandbox a exécuté : ```text inspection archive/version/rel/prompt OK lecture code N1/N2/Config et docs 0.2.9 OK réaudit OrbitFlare/Yellowstone actuel OK inspection cargo tree --duplicates fourni par opérateur OK ``` Le sandbox ne dispose pas de Cargo ; aucun `cargo check/clippy/test/tree` post-overlay n'est déclaré réussi localement. ## 16. Validation opérateur attendue avant commit Comme `pre.001` change uniquement la version Cargo et la documentation : ```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 --workspace cargo tree -p ksp-onchain-transport-lib cargo tree -p ksp-onchain-transport-lib --duplicates ``` Attendu : aucun changement de dependency et aucun changement sous `crates/`.