394 lines
11 KiB
Markdown
394 lines
11 KiB
Markdown
<!-- 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
|
||
|
||
### D1–D4
|
||
|
||
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 15–20 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
|
||
```
|