# Delta `0.2.9-pre.012` — fermeture technique Yellowstone + PublicNode + documentation ## Statut Candidate de fermeture technique `0.2.9` construite sur `0.2.9-pre.011`, dont le gate opérateur est entièrement vert. Cette tranche ne change pas la sémantique runtime Yellowstone fermée en `pre.010`. Elle ajoute le smoke live PublicNode Mainnet opt-in, ferme le réaudit documentaire final, synchronise README/USAGE, prépare le prompt `0.2.10 — OrbitFlare Yellowstone gRPC` et rend la mise en forme des tableaux Markdown normative et mécaniquement vérifiable. ## Version technique ```text workspace.package.version = 0.2.9-pre.12 ``` ## Base opérateur confirmée `pre.011` a été validée avec : ```text cargo fmt --all PASS scripts/audit_rust_workspace_rules.py PASS, 0 export candidate cargo check --workspace PASS cargo clippy --workspace --all-targets PASS sans warning Config unit 113/113 Config public API 15/15 Config ownership 5/5 Transport unit 383/383 Transport public API 49/49 Transport release completeness 43/43 Transport doctests 4/4 workspace dependencies 3/3 cargo test --workspace PASS ``` ## Réaudit Yellowstone final Le réaudit du 2026-08-24 distingue désormais explicitement les numéros de `master` et les releases GitHub publiées : ```text latest release GitHub indexée v14.2.2+solana.4.1.0 master yellowstone-grpc-geyser 15.1.2 master yellowstone-grpc-client 13.3.0 master yellowstone-grpc-proto 12.6.0 master Agave Geyser / storage 4.2.0 master Tonic / Prost 0.14.x ``` La surface N2 utilisée par KSP reste matériellement compatible : service `Geyser`, `Subscribe`, sept unary retenus, `SubscribeRequest` courant et neuf variantes `SubscribeUpdate`. `SubscribeDeshred` reste hors scope. La licence du subtree `yellowstone-grpc-proto` reste déclarée Apache-2.0 dans `LICENSING.md` upstream. ## PublicNode Mainnet Ajout d'un smoke Transport pur : ```text crates/ksp-onchain-transport-lib/tests/yellowstone_publicnode_smoke.rs ``` Le smoke : ```text est ignored par défaut construit ses settings programmatiquement n'utilise ni Config ni variable d'environnement n'utilise aucun credential cible https://solana-yellowstone-grpc.publicnode.com:443 ouvre le channel TLS Yellowstone standard appelle GetVersion appelle GetSlot avec commitment confirmed ``` Il ne crée aucune façade `PublicNodeGrpc*` et réutilise le contrat provider-neutral de `0.2.9`. ## PublicNode Testnet Le service Testnet gRPC est annoncé par PublicNode, mais l'hostname exact n'est toujours pas disponible dans une source PublicNode suffisamment autoritative et exploitable. Décision : ```text aucun hostname déduit aucun profil Testnet aucun smoke Testnet statut documentaire = EXTERNAL BLOCK / NOT GUESSED ``` Cette limite externe ne bloque pas la fondation Mainnet et ne doit pas être transformée en endpoint supposé. ## Règles des tableaux Markdown `docs/rules/RULES_DOCUMENTATION.md` formalise désormais : ```text pipe littéral ou échappé interdit dans le contenu d'une cellule pipe réservé aux séparateurs structurels largeur de colonne déterminée par le contenu le plus large tous les séparateurs verticaux alignés exactement un espace de marge autour du contenu le plus large cellules plus courtes complétées uniquement pour conserver l'alignement ligne séparatrice dimensionnée exactement à la colonne tableau entier réaligné lorsqu'une ligne est touchée ``` Ajout du canari : ```text scripts/audit_markdown_tables.py ``` Il audite les fichiers ou répertoires Markdown explicitement fournis, ignore les blocs de code fenced et rejette les tables qui ne respectent pas le contrat KSP. La version de `docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md` corrigée manuellement par l'opérateur avant le commit `pre.011` a été conservée comme base ; `pre.012` ne réintroduit pas l'ancien format. ## Normalisation documentaire rétroactive modifiable Le premier audit étendu de la nouvelle règle a révélé 26 écarts historiques dans neuf documents **modifiables** : principalement du padding antérieur au contrat actuel et un tableau HTTP utilisant des pipes échappés dans ses cellules. Ces documents ont été normalisés sans changer leurs décisions : ```text docs/formats/KSPWALLET_V1.md docs/formats/KSPWALLET_V2.md docs/plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md docs/plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md docs/plans/012-V0_2_5_WALLET_FOUNDATION_PLAN.md docs/plans/014-V0_2_7_ONCHAIN_WEBSOCKET_PLAN.md docs/validation/010-V0_2_7_ONCHAIN_WEBSOCKET.md docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md ``` Dans le plan HTTP `008`, les anciens `\|` utilisés pour exprimer une alternative ont été reformulés avec `/`, conformément à la nouvelle interdiction des pipes internes. Un scan du repository a encore signalé uniquement onze écarts de padding dans d'anciens deltas `0.1.4`. Ils ne sont **pas** modifiés : les deltas déjà publiés sont immuables. `DOC-TABLE-006` formalise cette priorité ; tous les nouveaux deltas restent soumis au format courant. ## Documentation Transport `README.md` et `USAGE.md` documentent maintenant la foundation Yellowstone complète : ```text settings/channel/unary/Subscribe reconnect/replay prudent Config V3 PublicNode Mainnet smoke live opt-in limite Testnet non inventée ``` ## Plan et validation Le plan `016` et la validation `012` restent structurés par état courant plutôt que par appendices successifs. Mises à jour principales : ```text pre.011 fermé par gate opérateur pre.012 active candidate récconciliation master vs release GitHub PublicNode Testnet fermé comme limite externe documentée smoke Mainnet ajouté mais non déclaré exécuté cargo tree final explicitement pending operator workspace final explicitement pending operator ``` ## Prompt suivant Ajout : ```text prompts/015-V0_2_10_START_PROMPT.md ``` La release suivante active est `0.2.10 — OrbitFlare Yellowstone gRPC`. Le prompt impose un `pre.001` audit/sizing avant code provider et cible notamment les questions ouvertes suivantes : ```text IP whitelist vs X_TOKEN vs control-plane X-ORBIT-KEY endpoints régionaux / Devnet / transport security support réel des unary/replay/from_slot heartbeat proactif recommandé par OrbitFlare réutilisation N1/N2 sans second actor/client Config V3 et secret ownership smoke architecture-safe ``` `0.2.11` reste Helius LaserStream gRPC. ## Fichiers ajoutés ou modifiés ```text Cargo.toml docs/rules/RULES_DOCUMENTATION.md scripts/audit_markdown_tables.py crates/ksp-onchain-transport-lib/tests/yellowstone_publicnode_smoke.rs crates/ksp-onchain-transport-lib/README.md crates/ksp-onchain-transport-lib/USAGE.md docs/formats/KSPWALLET_V1.md docs/formats/KSPWALLET_V2.md docs/plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md docs/plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md docs/plans/012-V0_2_5_WALLET_FOUNDATION_PLAN.md docs/plans/014-V0_2_7_ONCHAIN_WEBSOCKET_PLAN.md docs/validation/010-V0_2_7_ONCHAIN_WEBSOCKET.md docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md docs/plans/016-V0_2_9_YELLOWSTONE_GRPC_PLAN.md docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md prompts/000-README.md prompts/015-V0_2_10_START_PROMPT.md deltas/0.2.9/pre.012.md ``` ## Gate local disponible dans l'environnement de préparation Exécuté avant livraison de l'archive : ```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.9 Markdown table audit: clean (87 table(s), 116 file(s)) ``` Cargo et Rustfmt ne sont pas disponibles dans l'environnement de préparation ; aucune commande Cargo n'est donc déclarée réussie pour la candidate `pre.012`. ## Gate opérateur requis ```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-onchain-transport-lib cargo test -p ksp-core-lib --test workspace_dependencies cargo test --workspace cargo tree -p ksp-onchain-transport-lib cargo tree -p ksp-onchain-transport-lib --duplicates cargo tree --duplicates ``` Smoke live séparé : ```bash cargo test -p ksp-onchain-transport-lib --test yellowstone_publicnode_smoke -- --ignored --nocapture ``` Si tous les gates locaux sont verts et que le smoke Mainnet est consigné, `0.2.9` peut passer à sa tranche de publication stable. Un défaut découvert dans cette candidate crée `pre.012-fix.001` ; l'historique précédent reste immuable.