Files
2026-09-11 19:37:36 +02:00

7.4 KiB
Raw Permalink Blame History

Delta 0.3.14-pre.001 — audit / brainstorming / sizing gap repair

Base requise

v0.3.13
workspace.package.version = 0.3.13
deltas/0.3.13/rel.001.md présent

Archive opérateur auditée :

khadhroony-solana-project-v0.3.13.zip
SHA-256 253fa7ef5e0a6b2721da66fc3ea8dc7695d991d3a00bcc7d34396d9a32b65245

L'archive ne contient pas .git; l'identité interne stable est contrôlée mais l'objet du tag Git ne peut pas être comparé localement.

Objet

Exécuter le gate pre.001 imposé par prompts/033-V0_3_14_START_PROMPT.md avant tout codage de repair :

lecture complète des règles et du handoff 0.3.13
audit archive/base stable
audit Worker/Transport/frontier/replay/continuity
audit externe courant Solana/Yellowstone/providers
matrice des cinq familles live
modèle gap/range/coverage run-local
sémantique repaired/unresolved
health candidate
threat model
smokes accessibles
Cargo/features cible
sizing et décision maintien/rescission
plan 035 + validation 031

Aucun moteur de repair, failover/degraded runtime, modification Transport/Config ou adapter EARLY n'est implémenté.

Décisions

reconnect != replay_attempt != replay_covered != repaired
replay accepté ne prouve pas la coverage
transaction-only source ne prouve pas l'absence d'événements manquants
repair final qualifié au niveau slot/range
skipped seulement après discovery slots réussie
getBlock null sur slot produit reste unresolved
getTransaction null n'est pas une preuve d'inexistence
Common RAW/admission/ksp-store-lib restent le chemin unique
retry/reconnect restent Transport-owned
required/redundant est une relation de coverage dynamique, pas un flag provider
processing frontier != continuity frontier
pool HTTP d'hydration != capability de scan : getTransaction seul est garanti pour Yellowstone/Logs/Helius
les façades WS doivent exposer une observation latest-value de leur snapshot avant le repair ; aucun nouveau socket/actor
range gap inclusif pour ne pas perdre la fin d'un slot déjà partiellement observé ; aucun slot dérivé d'un timestamp
TargetCoverage = réunion conservative des scopes configurés ; source perdue non respawnée par Worker
FullLedgerTransactions et ExactSourceScope sont distingués ; aucune équivalence cross-family implicite
getBlocksWithLimit ne ferme une plage que si la fenêtre cible est explicitement prouvée complète
scan full-block interdit s'il élargirait silencieusement un run uniquement filtré
EARLY hors scope 0.3.14
aucune nouvelle dépendance
Config inchangé en pre.001 ; modification future seulement sur besoin démontré
0.3.14 maintenue sans rescission sous le scope des cinq familles existantes

Forecast recalibré : pre.002 -> pre.016, avec une tranche WS continuity dédiée, replay Yellowstone et coverage redondante séparés, puis HTTP/hydration/reconciliation/health/fairness/observability/races/gates/docs/publication. Cette extension remplace le forecast initial pre.002 -> pre.014 afin de respecter les slices 1520 minutes.

Bornes cibles à matérialiser dans les tranches techniques :

MAX_OPEN_REPAIR_GAPS = 64
MAX_REPAIR_RANGE_SLOTS = 4096
MAX_REPAIR_DISCOVERY_WINDOW_SLOTS = 512
MAX_REPAIR_BLOCK_FETCH_IN_FLIGHT = 4
MAX_REPAIR_ACTIVE_GAPS = 1

Audit externe — points structurants

Le proto Yellowstone utilisé expose from_slot et SubscribeReplayInfo/first_available. yellowstone-grpc-proto 12.7.0 est courant au moment de l'audit.

Le changelog upstream du 22 juillet 2026 documente un bug corrigé où un replay blocks pouvait accepter from_slot, ne rejouer aucun block, puis reprendre au head live avec un gap. La preuve KSP ne peut donc pas être « request accepted ».

PublicNode expose actuellement Solana Mainnet/Testnet RPC/WS/Yellowstone et archive data, mais sa profondeur de replay/first_available n'est pas suffisamment documentée pour être revendiquée.

OrbitFlare expose Yellowstone et Devnet gRPC sur ses tiers courants ; un exemple récent utilise from_slot, mais la profondeur/first_available de l'endpoint KSP reste à prouver par smoke.

Helius documente LaserStream gRPC avec replay jusqu'à 24 h, mais cette surface est distincte du transactionSubscribe WSS stable et n'est pas ajoutée à 0.3.14.

QuickNode documente un fromSlot provider-specific jusqu'à 3000 slots ; cette comparaison confirme qu'une profondeur de replay ne peut pas être généralisée entre providers.

Fichiers ajoutés

docs/plans/035-V0_3_14_MULTI_SOURCE_GAP_REPAIR_HARDENING_PLAN.md
docs/validation/031-V0_3_14_MULTI_SOURCE_GAP_REPAIR_HARDENING.md
deltas/0.3.14/pre.001.md

Fichiers modifiés

Cargo.toml

Fichiers supprimés

aucun

Version Cargo

header : 565 -> 566
workspace.package.version : 0.3.13 -> 0.3.14-pre.1

Aucune dépendance, feature ou autre ligne fonctionnelle du manifest racine n'est changée.

Surfaces explicitement inchangées

crates/**
config/**
.env.example
README.md
RULES.md
ROADMAP.md
CHANGELOG.md
docs/architecture/**
prompts/**
deltas/0.3.13/**

Validations base exécutées

Localement avant modification :

unzip -t : PASS
archive safety : PASS
workspace/crate inventory : 21/21
General Rust rule audit : clean
Rust export completeness audit : 0 candidate(s)
KSP workspace Rust rule audit : clean
Markdown table audit : clean (340 tables / 855 files)
489 définitions de règles / 489 IDs uniques / 0 doublon

Le journal opérateur fourni pour la stable contient :

cargo fmt/check : terminé sans erreur visible
cargo check --workspace : terminé sans erreur visible
cargo clippy --workspace --all-targets --all-features -- -D warnings : terminé sans erreur visible
cargo test --workspace --all-targets --all-features : 1 850 PASS / 0 failed / 15 ignored
cargo tree Worker direct/features : produit
cargo tree --duplicates : produit

Cette preuve concerne 0.3.13, pas le bump 0.3.14-pre.1.

Validations post-modification

General Rust rule audit : clean
Rust export completeness audit : 0 candidate(s)
KSP workspace Rust rule audit : clean
Markdown table audit : clean (340 tables / 858 files)
rule definitions : 489 / 489 uniques / 0 doublon
comparaison stable -> worktree : 3 ajouts / 1 modification / 0 suppression
Cargo fmt/check : NON EXÉCUTÉ LOCAL — cargo absent du sandbox

Le scripts/__pycache__ recréé par les audits Python est supprimé avant packaging et ne fait pas partie de la livraison.

Archive de livraison attendue :

ksp-general-0.3.14-pre.001.zip

Archive déchange

Conformément à VER-ARCHIVE-001, VER-ARCHIVE-004 et VER-ARCHIVE-005, la livraison est une archive general minimale :

ksp-general-0.3.14-pre.001.zip

Contenu attendu, exactement quatre fichiers :

Cargo.toml
docs/plans/035-V0_3_14_MULTI_SOURCE_GAP_REPAIR_HARDENING_PLAN.md
docs/validation/031-V0_3_14_MULTI_SOURCE_GAP_REPAIR_HARDENING.md
deltas/0.3.14/pre.001.md

Aucun fichier inchangé de la stable, cache, lockfile, secret, sortie de compilation ou artefact daudit nest inclus.

Gate opérateur après application

cargo fmt --all -- --check
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.3.14
cargo check --workspace

Si ce gate est propre, pre.002 peut matérialiser uniquement les contrats gap/range/coverage prévus par le plan 035.