Files
khadhroony-solana-project/deltas/0.2.10/pre.002.md
2026-08-25 10:29:16 +02:00

7.8 KiB

Delta 0.2.10-pre.002 — OrbitFlare Devnet Config + characterization smoke

1. Base et version

Base de travail :

0.2.10-pre.001

Validation opérateur fournie sur cette base le 2026-08-25 :

cargo fmt --all                               PASS
python3 scripts/audit_rust_workspace_rules.py PASS
python3 scripts/audit_markdown_tables.py      PASS / 97 tables / 233 files
cargo check --workspace                       PASS
cargo clippy --workspace --all-targets        PASS
cargo test --workspace                        PASS
cargo tree -p ksp-onchain-transport-lib       fourni
cargo tree -p ksp-onchain-transport-lib --duplicates fourni

Le graphe confirme notamment :

yellowstone-grpc-proto 12.6.0
tonic                   0.14.6
tonic-prost             0.14.6
prost                    0.14.4
tokio                    1.53.1

Cette livraison passe à :

workspace.package.version = 0.2.10-pre.2
commit attendu            = v0.2.10-pre.002
aucun tag prerelease

2. Invariant architectural

Aucun moteur physique n'est modifié :

src/grpc_settings.rs   inchangé
src/grpc_channel.rs    inchangé
src/grpc_unary.rs      inchangé
src/grpc_subscribe.rs  inchangé
src/grpc_stream.rs     inchangé

Le standard Yellowstone N2 reste également inchangé.

OrbitFlare est matérialisé uniquement par :

Config provider profile
provider-neutral Yellowstone smoke
provider validation/documentation

Aucun SDK OrbitFlare, second client Tonic, proto provider, heartbeat moteur ou metadata secrète n'est ajouté.

3. Profil Config V3 orbitflare_devnet

config/std.transport.json ajoute un profil dédié :

profile_id = orbitflare_devnet

Il conserve les companions standards déjà utilisés sur Devnet :

HTTP = https://api.devnet.solana.com
WS   = wss://api.devnet.solana.com

et ajoute exactement un endpoint Yellowstone :

name            = orbitflare_solana_devnet_yellowstone
provider        = orbitflare
cluster         = devnet
protocol        = solana_yellowstone
url             = http://devnet.rpc.orbitflare.com:10000
metadata        = []
secret_metadata = []

Le format reste V3. .env.example n'est pas modifié et aucune API key de compte OrbitFlare n'est reclassifiée comme credential gRPC.

ksp-config-lib ajoute un test déterministe qui prouve :

sélection explicite orbitflare_devnet
companions HTTP/WS Devnet préservés
provider/cluster/protocol gRPC corrects
URL plaintext conservée telle quelle
aucune metadata inventée
Debug gRPC sans URL provider
absence de X-ORBIT-KEY dans Transport settings

4. Smoke OrbitFlare Devnet

Nouveau test opt-in :

crates/ksp-onchain-transport-lib/tests/yellowstone_orbitflare_smoke.rs

Le test utilise directement les API publiques Yellowstone existantes de Transport, sans dépendre de Config :

endpoint Devnet OrbitFlare sans metadata
reconnect max_retries = 0
Subscribe slots
commitment = confirmed
fenêtre de caractérisation = 45 s
preuve Slot non nul
preuve SubscribeUpdate::Ping serveur
close borné

Le Ping reçu reste traité par le moteur N1 déjà livré en 0.2.9, qui répond automatiquement sur le même stream. Le test n'ajoute aucune policy heartbeat.

Commande live :

cargo test -p ksp-onchain-transport-lib --test yellowstone_orbitflare_smoke -- --ignored --nocapture

Interprétation :

Slot + Ping PASS
    OrbitFlare reste standard ; aucune façade/policy provider heartbeat requise

connection/auth failure
    classifier le service/licence réel avant toute metadata

Slot PASS mais Ping absent
    qualifier une divergence heartbeat provider avant toute implémentation spécifique

5. Audit Markdown étendu

scripts/audit_markdown_tables.py passe en version 2 et contrôle désormais aussi l'équivalent structurel de :

\n\s*\n\s*\n

c'est-à-dire au moins deux lignes vides consécutives hors fenced code block.

Le contrôle :

considère une ligne whitespace-only comme vide
signale fichier + première ligne + longueur de la séquence
n'interprète pas les blancs internes aux ``` / ~~~ fenced blocks
ignore les répertoires générés ou tiers en parcours récursif

Répertoires récursifs exclus :

.git
.idea
.venv
__pycache__
dist
node_modules
target

Cette exclusion rend le résultat déterministe entre une archive Gitea propre et un checkout développeur contenant des node_modules. Le nombre de fichiers audités peut donc diminuer par rapport à l'ancien script sans signifier une perte de couverture KSP-owned.

Une seule séquence de deux lignes vides existait dans le scope KSP actif de l'archive : elle est supprimée dans crates/ksp-onchain-transport-lib/README.md.

docs/rules/RULES_DOCUMENTATION.md formalise DOC-BLANK-001 à DOC-BLANK-003, y compris l'immuabilité des anciens deltas publiés.

6. Documents de plan/validation

Le plan 017 et la validation 013 passent en version 2 pour enregistrer :

pre.001 operator gate fermé
profil orbitflare_devnet matérialisé
smoke de caractérisation matérialisé
N1/N2 inchangés
live Devnet encore PENDING

Aucun README/USAGE OrbitFlare durable n'est finalisé ici ; cette responsabilité reste réservée au couloir documentaire final.

7. Validation disponible dans l'environnement de génération

Exécuté sans Cargo :

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
    clean / 98 tables / 98 KSP-owned files

config/std.transport.json
    JSON parse PASS
    JSON Schema validation PASS

Le nouvel audit Markdown a aussi été caractérisé avec des fixtures temporaires :

deux lignes vides hors fence       FAIL attendu
plusieurs lignes vides dans fence  PASS attendu
node_modules récursif              ignoré attendu

Aucune commande Cargo n'est déclarée exécutée dans l'environnement de génération.

8. Gates opérateur pre.002

Exécuter :

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
cargo tree -p ksp-onchain-transport-lib
cargo tree -p ksp-onchain-transport-lib --duplicates

Puis le live dédié :

cargo test -p ksp-onchain-transport-lib --test yellowstone_orbitflare_smoke -- --ignored --nocapture

pre.002 ne ferme son gate provider que lorsque le résultat live est classifié. Un échec d'auth ou l'absence de Ping ne doit jamais être corrigé par modification du moteur N1.

9. Fichiers ajoutés/modifiés

Cargo.toml
config/std.transport.json
crates/ksp-config-lib/unit_tests/transport.rs
crates/ksp-onchain-transport-lib/README.md
crates/ksp-onchain-transport-lib/tests/yellowstone_orbitflare_smoke.rs
docs/plans/017-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC_PLAN.md
docs/rules/RULES_DOCUMENTATION.md
docs/validation/013-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC.md
scripts/audit_markdown_tables.py
deltas/0.2.10/pre.002.md

10. Suite conditionnelle

Si le live retourne Slot + Ping PASS :

pre.003 = gate technique/live final

Si une divergence provider réelle est démontrée :

pre.003 = tranche provider-specific minimale au-dessus de N1/N2
pre.004 = gate technique/live final

Le couloir documentaire final puis la prerelease de publication restent distincts dans les deux cas.