v0.3.11-pre.003

This commit is contained in:
2026-09-08 09:31:23 +02:00
parent 984c327162
commit f1c383c392
11 changed files with 669 additions and 27 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/032-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION_PLAN.md -->
<!-- version: 2 -->
<!-- version: 3 -->
# Plan v0.3.11 — fondation runtime du Worker RawTransaction ingest
@@ -699,12 +699,14 @@ Budget cible : **1015 min**. Vérifier la stable, corriger les deux divergenc
Budget cible : **1015 min**. Créer la crate minimale, l'ajouter au workspace, installer uniquement les edges décidés et les tests de manifest/dependency boundary. Pas de runtime comportemental.
État après matérialisation : **implémenté, gate opérateur requis**. Le manifest porte exactement les sept edges décidés (`core`, `logging`, common RAW, façade Store sans backend par défaut, Worker API, `sha2`, Tokio `macros/rt/sync/time`) ; la crate-root reste sans API ni comportement runtime et un test externe verrouille le firewall.
État après matérialisation : **implémenté et gate opérateur validé**. Le manifest porte exactement les sept edges décidés (`core`, `logging`, common RAW, façade Store sans backend par défaut, Worker API, `sha2`, Tokio `macros/rt/sync/time`) ; la crate-root reste sans API ni comportement runtime et un test externe verrouille le firewall. Le gate communiqué le 8 septembre 2026 est vert sur `fmt`, audits, `check`, Clippy strict, tests de crate et les deux arbres Cargo.
### `pre.003` — identity + settings foundation
Budget cible : **1015 min**. Kind code, settings, defaults/bounds, validation network/worker identity et erreurs correspondantes. Aucun spawn.
État après matérialisation : **implémenté, gate opérateur requis**. Le kind stable vaut `raw_transaction_ingest`; les settings portent uniquement `network`, `worker_id`, queue, concurrence de persistence et drain timeout. Les identités restent validées par leurs types propriétaires, tandis que les trois bornes techniques sont verrouillées par un code d'erreur Worker stable et des tests unitaires/externes. Aucun `start`, spawn, channel, supervisor ou appel Store n'est introduit.
### `pre.004` — start/handle/lifecycle/terminal
Budget cible : **1520 min**. Start sur runtime caller-owned, handle public, stop idempotent, lifecycle générique, terminal future sans JoinHandle public. Harness runtime minimal.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/028-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION.md -->
<!-- version: 4 -->
<!-- version: 6 -->
# Validation v0.3.11 — fondation runtime du Worker RawTransaction ingest
@@ -509,7 +509,7 @@ 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), 776 file(s))
Markdown table audit: clean (340 table(s), 777 file(s))
contrôle TOML/statique : workspace 0.3.11-pre.2, 21 membres, Worker présent, 7 dépendances exactes, Store default-features=false, Tokio macros/rt/sync/time
comparaison byte-à-byte avec pre.001 : 4 fichiers ajoutés, 3 modifiés, 0 supprimé
@@ -532,3 +532,105 @@ cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
Critère de passage : le firewall exact reste vert et aucun backend Store, Job, Config, Transport/provider ou runtime comportemental prématuré n'apparaît.
## 14. Fermeture opérateur `pre.002` et matérialisation `pre.003`
### 14.1 Fermeture opérateur de `pre.002`
Le journal opérateur communiqué le 8 septembre 2026 ferme intégralement le gate demandé sur `0.3.11-pre.2` :
```text
cargo fmt --all : terminé sans erreur
python3 scripts/audit_rust_workspace_rules.py : clean, export completeness 0
python3 scripts/audit_markdown_tables.py ... : clean (340 tables, 776 files)
cargo check --workspace : terminé sans erreur
cargo clippy --workspace --all-targets --all-features -- -D warnings : terminé sans erreur
cargo test -p ksp-worker-raw-transaction-ingest-lib : 3 tests externes PASS, 0 échec
cargo tree -p ksp-worker-raw-transaction-ingest-lib --edges normal : firewall attendu
cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features : Tokio limité à macros/rt/sync/time
```
Les arbres confirment notamment `ksp-store-lib` sans backend PostgreSQL transitif et l'absence de Config, Job/Backfill, Transport, provider SDK, `futures-util`, `reqwest`, `tonic` ou Yellowstone dans la crate Worker. `pre.003` peut donc être ouverte.
### 14.2 Scope matérialisé dans `pre.003`
La tranche ajoute uniquement :
```text
RAW_TRANSACTION_INGEST_WORKER_KIND_CODE = "raw_transaction_ingest"
RawTransactionIngestSettings
ERROR_CODE_RAW_TRANSACTION_INGEST_SETTINGS_INVALID
constantes defaults/min/max pour queue, persistence concurrency et drain timeout
```
Le settings reste source-neutral et ne contient que :
```text
network: RawNetworkId
worker_id: WorkerId
admission_queue_capacity: usize
persistence_concurrency: usize
shutdown_drain_timeout: Duration
```
Les valeurs V1 sont exactement :
```text
queue : 1..=65_536, default 256
persistence concurrency : 1..=64, default 8
drain : 100 ms..=30 s, default 5 s
```
`RawNetworkId` reste construit/validé par `ksp-store-lib` et `WorkerId`/`WorkerKindCode` par `ksp-worker-api`. La crate concrète ne duplique pas leurs validateurs et n'introduit donc aucun nouveau format d'identité. Son erreur propre `worker_raw_transaction_ingest.settings_invalid` couvre seulement les bornes techniques qu'elle possède.
### 14.3 Sécurité de diagnostic
`Debug` de `RawTransactionIngestSettings` peut rendre le network sûr mais délègue l'identité Worker au `Debug` redacted de `WorkerId`. Le texte réel de `worker_id` n'est donc pas rendu. Les erreurs de bornes ajoutent uniquement le nom statique du champ invalide et aucune valeur caller-supplied.
### 14.4 Frontière runtime conservée
La tranche n'introduit aucun :
```text
RawTransactionIngestWorker
start/spawn
JoinHandle/JoinSet
mpsc/watch
supervisor
Store write
canonicalisation RAW
source live
Transport
```
Ces responsabilités restent respectivement dans `pre.004+`.
### 14.5 Preuves locales d'assemblage `pre.003`
Exécuté dans l'environnement d'assemblage après correction des écarts de forme détectés au premier passage :
```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), 776 file(s))
```
L'environnement d'assemblage ne fournit ni `cargo`, ni `rustc`, ni `rustfmt`. Aucun gate Cargo `pre.003` n'est déclaré PASS localement.
### 14.6 Gate opérateur demandé pour `pre.003`
```bash
cargo fmt --all
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
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p ksp-worker-raw-transaction-ingest-lib
cargo tree -p ksp-worker-raw-transaction-ingest-lib --edges normal
cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
```
Critère de passage : defaults/bornes/erreurs/identités sont verts, le dependency firewall reste inchangé et aucun comportement runtime de `pre.004` n'apparaît.