v0.3.14-pre.001

This commit is contained in:
2026-09-11 19:37:36 +02:00
parent 9785cda39d
commit 2ca56dbaf4
4 changed files with 1874 additions and 2 deletions

218
deltas/0.3.14/pre.001.md Normal file
View File

@@ -0,0 +1,218 @@
<!-- file: deltas/0.3.14/pre.001.md -->
<!-- version: 5 -->
# Delta `0.3.14-pre.001` — audit / brainstorming / sizing gap repair
## Base requise
```text
v0.3.13
workspace.package.version = 0.3.13
deltas/0.3.13/rel.001.md présent
```
Archive opérateur auditée :
```text
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 :
```text
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
```text
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 :
```text
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
```text
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
```text
Cargo.toml
```
## Fichiers supprimés
```text
aucun
```
## Version Cargo
```text
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
```text
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 :
```text
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 :
```text
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
```text
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 :
```text
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 :
```text
ksp-general-0.3.14-pre.001.zip
```
Contenu attendu, exactement quatre fichiers :
```text
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
```bash
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`.