Files
khadhroony-solana-project/deltas/0.3.11/pre.001.md
2026-09-08 08:57:07 +02:00

394 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- file: deltas/0.3.11/pre.001.md -->
<!-- version: 2 -->
# Delta 0.3.11-pre.001 — audit/sizing fondation Worker RawTransaction ingest
## Base
```text
archive : khadhroony-solana-project-v0.3.10.zip
SHA-256 : befafea61304aaea15c94db7c8b3525c58b7c1622bf880a9110373bcc0ae6ac0
ZIP bytes : 7993096
ZIP entries : 1901
unzip -t : PASS
workspace members : 20
workspace.package.version base : 0.3.10
stable delta : deltas/0.3.10/rel.001.md
```
Le ZIP a une racine unique et a été contrôlé sans entrée absolue, path traversal, symlink, `.git/`, `target/`, `node_modules/`, `Cargo.lock` ou `.env`.
Préconditions du prompt `030` confirmées :
```text
ksp-raw-transaction-lib présent et documenté
ksp-worker-api présent
ksp-job-backfill-lib présent et consommateur de ksp-raw-transaction-lib
ksp-worker-raw-transaction-ingest-lib absent
```
## Type de livraison
```text
ksp-general-0.3.11-pre.001.zip
```
Le type `general` est requis par le bump `Cargo.toml` de toute prerelease non-fix (`VER-ID-009`). L'archive d'échange contient uniquement les fichiers ajoutés/modifiés par cette tranche et son delta.
## Baseline exécutée avant modification
```text
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
Markdown table audit: clean (340 table(s), 772 file(s))
```
L'audit mécanique était vert mais la lecture humaine des règles a trouvé deux divergences normatives actives non détectées par les scripts.
## Objectif
Exécuter intégralement le gate d'ouverture demandé par `prompts/030-V0_3_11_START_PROMPT.md` : lecture/audit de la stable `v0.3.10`, contrôle renforcé des règles, inventaire Worker/Common RAW/Store/Backfill, fraîcheur des dépendances runtime, brainstorming public/private et supervisor, définition du harness déterministe, threat model, sizing et planification, sans commencer l'implémentation lourde du Worker.
## Réconciliation normative
### D1D4
Défauts hérités trouvés :
```text
KSP-DURABLE-002 : D2 encore nommé Core canonique
KSP-DURABLE-006 : instructions encore qualifiées de faits Core
DEP-STORE-004 : D2 encore nommé Core canonique
```
Les règles plus récentes et l'architecture `008` imposent déjà :
```text
D1 RAW
D2 STRUCTURAL
D3 DECODED
D4 DOMAIN
```
Correction : normalisation des trois règles actives. Les archives/deltas/plans historiques ne sont pas réécrits.
### Nom du Worker RAW
Les règles `KSP-WORKER-005/006/007/010` utilisaient encore :
```text
ksp-worker-raw-retriever
```
Le nom durable retenu par les architectures, ROADMAP, CHANGELOG, handoff `0.3.10` et prompt `030` est :
```text
ksp-worker-raw-transaction-ingest-lib
```
Correction : normalisation du nom dans ces quatre règles, sans changement de leur responsabilité fonctionnelle.
Un scan des règles actives après correction ne trouve plus `D2 Core canonique`, `faits Core distincts` ni `ksp-worker-raw-retriever`.
## Inventaire et décisions de fondation
### Frontières préservées
```text
ksp-worker-api reste runtime-neutral et générique
ksp-raw-transaction-lib reste source-neutral sans runtime/Transport/Config/Worker/Job/backend
Worker persistera via ksp-store-lib default-features=false
Store reste vérité de convergence (network, signature)
Backfill et Worker restent producteurs indépendants
aucun paramètre historique métier au start Worker
aucun edge Worker -> Config/Job/backend physique
```
### Surface publique minimale retenue
```text
RAW_TRANSACTION_INGEST_WORKER_KIND_CODE
RawTransactionIngestSettings
RawTransactionIngestWorker
RawTransactionIngestHandle
RawTransactionIngestSnapshot
RawTransactionIngestSnapshotSource / future associée
ErrorCodes statiques Worker
```
Settings de fondation :
```text
network
worker_id
admission_queue_capacity
persistence_concurrency
shutdown_drain_timeout
```
Bornes :
```text
admission queue : 1..=65_536, default 256
persistence concurrency : 1..=64, default 8
shutdown drain : 100 ms..=30 s, default 5 s
```
### Types reportés
Ne sont pas figés publiquement avant une vraie source :
```text
RawTransactionSourceId
SourceSettings
SourceCapability
SourceRole
ContinuityState
run/source frontiers
provider-specific settings
retry/replay/gap repair
```
### Runtime
```text
caller-owned active Tokio runtime
Worker-owned private supervisor/tasks
JoinHandle/JoinSet privés
start(settings, Arc<Store>) -> Handle
request_stop idempotent
wait_terminal async sans Tokio nominal public
mpsc admission borné
watch stop privé
watch snapshot latest-value
aucun unbounded channel
```
### Pipeline
```text
private deterministic ingress
-> ksp-raw-transaction-lib canonicalization
-> Worker-owned deterministic observation key/provenance
-> common RawTransactionAcquisition
-> ksp-store-lib atomic Normal persistence
-> explicit outcomes/counters
-> concrete/common latest-value snapshot
```
Aucun cache mémoire n'est utilisé comme vérité de correction ; Store décide new/idempotent/conflict.
### Fault/shutdown
```text
content conflict -> terminal fault, no overwrite, no winner
Store error -> terminal safe fault
source harness failure -> terminal safe fault
stop -> close new admissions + bounded drain admitted work
expiry drain -> abort private remaining tasks + join + terminal drain_timeout
terminal publié seulement après absence de tâche privée survivante
```
## Fraîcheur externe
Vérifié le 8 septembre 2026 :
```text
tokio latest stable = 1.53.1 ; workspace = ^1.53
futures-util latest stable = 0.3.34 ; workspace = ^0.3
sha2 latest stable = 0.11.0 ; workspace = ^0.11
```
Aucun bump workspace n'est requis.
Dépendances prévues pour la crate foundation lorsqu'elle est créée :
```text
ksp-core-lib
ksp-worker-api
ksp-raw-transaction-lib
ksp-store-lib default-features=false
ksp-logging-lib
sha2
tokio features macros,rt,sync,time
```
Non retenus en fondation :
```text
futures-util : pas d'usage nécessaire après choix JoinSet/mpsc/watch/select!
ksp-onchain-transport-lib : aucune source live en 0.3.11
ksp-config-lib : edge interdit
SDK provider : interdit/inutile
```
## Harness et threat model
Le plan `032` fixe un harness privé sans réseau couvrant :
```text
start/stop
source failure
queue saturation/backpressure
bounded persistence concurrency
new/idempotent/new observation
content conflict
Store failure
stop pendant admission/persistence
drain timeout
no orphan tasks
slow/no snapshot listener
latest-value concrete/common
redaction et absence de surface Job/Config/provider
```
## Sizing recalibré
Le forecast initial est scindé pour respecter le budget de 1520 minutes :
```text
pre.002 crate + dependency firewall
pre.003 identity/settings
pre.004 lifecycle/start/handle/terminal
pre.005 supervisor/task ownership + harness
pre.006 bounded admission + common RAW
pre.007 Store persistence/idempotence/conflict
pre.008 snapshots + Worker API projection
pre.009 shutdown/backpressure/fault hardening
pre.010 public/release/security hardening
pre.011 gate technique final
pre.012 réconciliation documentaire
pre.013 préparation publication
rel.001
```
Décision : `0.3.11` reste clôturable dans une seule session **à condition** de ne pas introduire source live, Transport productif, Config, migration Store ou continuity/gap repair. Toute tranche réellement trop grosse est scindée avant exécution.
## Fichiers ajoutés
```text
docs/plans/032-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION_PLAN.md
docs/validation/028-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION.md
deltas/0.3.11/pre.001.md
```
## Fichiers modifiés
```text
Cargo.toml
docs/rules/RULES_KSP.md
docs/rules/RULES_DEPENDENCIES.md
```
Versions :
```text
Cargo.toml : 505 -> 506
workspace.package.version : 0.3.10 -> 0.3.11-pre.1
RULES_KSP.md : 40 -> 41
RULES_DEPENDENCIES.md : 18 -> 19
```
Le bump Cargo est requis par `VER-ID-009` pour une prerelease non-fix, même sans modification Rust.
## Fichiers supprimés
```text
aucun
```
## Validation après modification
Audits statiques réellement exécutés sur le delta complet :
```text
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
Markdown table audit: clean (340 table(s), 775 file(s))
```
Un scan sémantique complémentaire des règles actives confirme l'absence des trois formulations obsolètes corrigées. La comparaison byte-à-byte contre la stable confirme exactement 3 fichiers ajoutés, 3 fichiers modifiés et aucun fichier supprimé.
## Preuve opérateur stable distincte
Le journal opérateur fourni pour `0.3.10` montre :
```text
cargo fmt --all -- --check : sans erreur
cargo check --workspace : sans erreur
cargo clippy --workspace --all-targets --all-features -- -D warnings : sans erreur
ksp-raw-transaction-lib : 26 tests verts
ksp-job-backfill-lib : 77 tests verts
cargo tree normal des deux crates : fourni
```
Cette preuve concerne la stable d'entrée ; elle ne devient pas une exécution locale de `0.3.11-pre.001`.
## Validations non exécutées localement
```text
cargo fmt --all -- --check
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test --workspace --all-targets --all-features
cargo tree --duplicates
```
Motif : `cargo` n'est pas installé dans l'environnement d'assemblage. `pre.001` ne contient aucun Rust Worker, mais l'opérateur doit rejouer les gates applicables après application du delta.
## Questions fermées
```text
settings techniques et bornes V1
public/private surface de fondation
absence de SourceCapability/Role publics avant 0.3.12
start + Arc<Store> + handle
terminal future runtime-neutral
supervisor/task ownership privé
mpsc/watch exacts
harness déterministe sans réseau
absence de frontier/timestamp public en fondation
Store conflict/failure policy
Tokio direct + features minimales retenues
absence de futures-util/Transport en foundation
sizing et maintien de la release
```
## Questions reportées
```text
premier contrat public SourceId/capability/role
Yellowstone source settings/adapters
source required/optional policy
retry/reconnect
run frontier/continuity
gap repair
hydration productive
WS/Helius/HTTP live
multi-provider coalescence
hot reconfiguration desired/effective
provider smokes
```
Aucune question reportée ne bloque `pre.002`.
## Non inclus
```text
aucune nouvelle crate Worker créée
aucun Rust modifié
aucun Transport/Config/Store code modifié
aucune migration
aucune source live
aucun CHANGELOG/ROADMAP modifié
aucun prompt 0.3.12 produit
```