v0.3.11-pre.001
This commit is contained in:
393
deltas/0.3.11/pre.001.md
Normal file
393
deltas/0.3.11/pre.001.md
Normal file
@@ -0,0 +1,393 @@
|
||||
<!-- 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
|
||||
```
|
||||
Reference in New Issue
Block a user