Files
khadhroony-solana-project/deltas/0.3.13/pre.001.md
2026-09-10 09:01:00 +02:00

8.3 KiB

Delta 0.3.13-pre.001 — audit règles et convergence live multi-source

Base requise

archive : khadhroony-solana-project-v0.3.12.zip
SHA-256 : 85c41eb9f8575ee58edd9863445cbc37b79ef59c4a7cf882679ff24dc8991bf5
ZIP bytes : 8260528
ZIP entries : 1981
workspace.package.version base : 0.3.12
stable delta : deltas/0.3.12/rel.001.md
prompt : prompts/032-V0_3_13_START_PROMPT.md

Objectif

Exécuter le gate pre.001 de 0.3.13 avant tout développement : vérifier l'archive stable et les règles, réauditer les surfaces WS standard/Helius/HTTP actuelles, fermer l'architecture de convergence multi-source, les bornes, la stratégie d'observations multiples, le content conflict, les owners retry/reconnect, les smokes et le sizing.

Aucune nouvelle source réseau productive n'est implémentée dans cette tranche.

Type de livraison

0.3.13-pre.001
Cargo : 0.3.13-pre.1
archive : ksp-general-0.3.13-pre.001.zip

Le type general est requis par la synchronisation de Cargo.toml pour une prerelease non-fix.

Vérification archive

Contrôlé :

unzip -t : PASS
absolute entries : 0
parent traversal : 0
duplicate ZIP entries : 0
symlink entries : 0
Cargo.lock : absent
rust-toolchain.toml : absent
package lockfiles : absents
.env : absent
crate manifests : 21
workspace members : 21
crates hors workspace : 0
members sans crate : 0
workspace edition : 2024

Audit règles

Les règles actives ont été relues depuis RULES.md et les neuf documents de docs/rules/.

Le script Rust stable reste vert, mais un contrôle supplémentaire d'unicité des identifiants normatifs a trouvé :

rule ids : 489
unique ids : 488
collision : KSP-CONFIG-018 x2

La preuve historique deltas/0.1.3/pre.014.md attribue explicitement KSP-CONFIG-018 à la règle d'inventaire .env.example. La règle desktop plus récente est donc renumérotée KSP-CONFIG-019 sans modification de sa sémantique.

Après correction :

rule ids : 489
unique ids : 489
duplicates : 0

Aucune autre contradiction normative active n'a été identifiée.

Audit architecture/dépendances

Confirmé :

Worker -> Transport autorisé et déjà productif
Worker -> Config interdit et absent
Worker -> Job Backfill interdit et absent
Worker -> backend Store physique interdit et absent
Worker -> reqwest/tonic/yellowstone proto direct absent
Transport -> Store absent
Transport -> Common RAW absent
ksp-store-lib reste la façade de persistence Worker
Common RAW reste propriétaire de la canonicalisation

solana-keypair dans ksp-wallet-lib est explicitement admis par DEP-SOL-004 et ne constitue pas une violation.

Audit WS / Helius / HTTP courant

Décisions :

logsSubscribe standard -> signature/slot -> getTransaction observed
blockSubscribe standard -> full/base64, maxSupportedTransactionVersion=1
Helius transactionSubscribe -> full/base64 -> getTransaction observed
Helius LaserStream WSS ne porte pas blockSubscribe
HTTP live -> getSlot + getBlocksWithLimit + getBlock observed

La documentation Solana courante demande la préparation maxSupportedTransactionVersion = 1 pour Transaction V1. V1 n'est pas encore actif sur les clusters publics au 10 septembre 2026, donc la voie blockSubscribe V1 reste deterministic-test-gated avant d'être déclarée RAW-direct.

Le pricing Helius courant place transactionSubscribe à partir du tier Developer ; ce fait reste une qualification de smoke, jamais une constante métier KSP.

Architecture multi-source fermée

Décisions principales :

sources simultanées, pas de first-provider-wins
source identity opaque SHA-256 et provider-neutral
1..32 sources runtime
collection validée avant tout spawn
coordinator global Worker avant hydration
coalescence (network, signature, commitment)
une hydration HTTP pour les références cross-source identiques
pending global <= admission_queue_capacity effective
hydratation in-flight <= persistence_concurrency
aucune queue Worker provider privée non bornée

Observation/persistence :

identité durable = network + signature
première observation = persist_raw_transaction_acquisition atomique
observations supplémentaires = record_raw_transaction_observation
même identité + même contenu = idempotence
même identité + contenu divergent = content conflict terminal

La capability Store d'observation additionnelle existe déjà ; aucun changement Store API n'est requis.

HTTP live polling

Contrat de plan retenu :

run start = getSlot(commitment)
aucun scan avant ce start slot
getBlocksWithLimit pour exclure naturellement skipped slots
getBlock observed pour chaque bloc listé
poll interval : 100 ms..30 s, default 1 s
blocks/cycle : 1..1024, default 128
timer/cadence : Worker
retry/rate-limit HTTP : Transport

Health et continuité

Le Worker conservera un inventaire de source privé et borné. La surface publique restera source-neutral avec des counts agrégés seulement.

Politique 0.3.13 conservative : une source configurée qui devient terminalement Failed faute le Worker, car l'équivalence de coverage des autres sources n'est pas prouvée. Le failover non-terminal et le repair appartiennent à 0.3.14.

Sizing retenu

pre.002 runtime resources multi-source
pre.003 standard logs + hydration
pre.004 standard blockSubscribe
pre.005 Helius transactionSubscribe
pre.006 HTTP live polling
pre.007 supervisor/source inventory
pre.008 convergence/observations multiples
pre.009 conflict/backpressure/fairness
pre.010 snapshots/health
pre.011 races/shutdown
pre.012 completeness/security
pre.013 gate technique/live
pre.014 réconciliation documentaire
pre.015 préparation publication
rel.001 stable

Décision : 0.3.13 est maintenue ; aucune rescission n'est nécessaire avant pre.002.

Fichiers ajoutés

docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md
docs/validation/030-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE.md
deltas/0.3.13/pre.001.md

Fichiers modifiés

Cargo.toml
docs/rules/RULES_KSP.md

Fichiers supprimés

aucun

Validations exécutées avant modification

python3 scripts/audit_rust_workspace_rules.py
PASS : General Rust rule audit clean
PASS : Rust export completeness audit 0 candidate
PASS : 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.3.12
PASS : Markdown table audit clean (306 tables, 199 files)

La preuve Cargo stable fournie par l'opérateur montre également fmt/check/clippy/tests Worker/trees verts sur 0.3.12; elle reste une preuve de la base et non une exécution locale de cette prerelease.

Validations exécutées après modification

python3 scripts/audit_rust_workspace_rules.py
PASS : General Rust rule audit clean
PASS : Rust export completeness audit 0 candidate
PASS : KSP workspace Rust rule audit clean

supplemental normative rule-id scan
PASS : 489 ids, 489 uniques, 0 duplicate

python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas
PASS : Markdown table audit clean (340 tables, 828 files)

Validations non exécutées localement

Le toolchain Cargo/Rustfmt n'est pas installé dans l'environnement d'assemblage :

cargo fmt --all -- --check
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p ksp-worker-raw-transaction-ingest-lib
cargo tree -p ksp-worker-raw-transaction-ingest-lib --edges normal
cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
cargo tree --duplicates

Statut : NON EXÉCUTÉ LOCAL, jamais PASS.

Décisions prises

corriger l'identifiant desktop en KSP-CONFIG-019
maintenir la release 0.3.13
aucune nouvelle dépendance externe
maxSupportedTransactionVersion=1 pour les nouvelles voies concernées
convergence/hydration globale Worker-owned
observation fanout via capability Store existante
source failure terminale conservative jusqu'au coverage/repair 0.3.14

Questions ouvertes

Reportées explicitement :

coverage équivalent entre sources
failover non-terminal
repair de gaps multi-source
sources EARLY
campagnes historiques multi-source
composition Desk 0.3.15