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

11 KiB
Raw Blame History

Delta 0.3.11-pre.001 — audit/sizing fondation Worker RawTransaction ingest

Base

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 :

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

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

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 :

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à :

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 :

ksp-worker-raw-retriever

Le nom durable retenu par les architectures, ROADMAP, CHANGELOG, handoff 0.3.10 et prompt 030 est :

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

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

RAW_TRANSACTION_INGEST_WORKER_KIND_CODE
RawTransactionIngestSettings
RawTransactionIngestWorker
RawTransactionIngestHandle
RawTransactionIngestSnapshot
RawTransactionIngestSnapshotSource / future associée
ErrorCodes statiques Worker

Settings de fondation :

network
worker_id
admission_queue_capacity
persistence_concurrency
shutdown_drain_timeout

Bornes :

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 :

RawTransactionSourceId
SourceSettings
SourceCapability
SourceRole
ContinuityState
run/source frontiers
provider-specific settings
retry/replay/gap repair

Runtime

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

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

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 :

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 :

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 :

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 :

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 :

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

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

Cargo.toml
docs/rules/RULES_KSP.md
docs/rules/RULES_DEPENDENCIES.md

Versions :

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

aucun

Validation après modification

Audits statiques réellement exécutés sur le delta complet :

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 :

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

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

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

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

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