9.0 KiB
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
workspace.package.version = 0.2.9-pre.12
Base opérateur confirmée
pre.011 a été validée avec :
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 :
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 :
crates/ksp-onchain-transport-lib/tests/yellowstone_publicnode_smoke.rs
Le smoke :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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
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 :
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
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é :
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.