# Delta `0.3.11-pre.003` — identité Worker + settings bornés ## Base requise ```text 0.3.11-pre.002 workspace.package.version = 0.3.11-pre.2 ``` Le gate opérateur communiqué pour `pre.002` est entièrement vert : `cargo fmt`, audits Rust/Markdown, `cargo check --workspace`, Clippy strict, tests de la crate et arbres Cargo normal/features. Les 3 tests `pre.002` passent et le firewall de dépendances reste conforme. ## Objectif Matérialiser uniquement l'identité de la verticale Worker RAW transaction ingest et ses settings runtime techniques bornés. Aucun lifecycle, `start`, spawn, task, channel, supervisor, persistence Store, canonicalisation ou source live n'est introduit. ## Version Cette tranche est une prerelease non-fix : ```text workspace.package.version = 0.3.11-pre.3 ``` ## Identité Worker La verticale possède le code stable : ```text RAW_TRANSACTION_INGEST_WORKER_KIND_CODE = "raw_transaction_ingest" ``` La transformation de ce texte en `WorkerKindCode` reste sous validation de `ksp-worker-api`; aucun second validateur d'identité n'est créé dans la crate concrète. ## `RawTransactionIngestSettings` Surface exacte : ```text network: ksp_store_lib::RawNetworkId worker_id: ksp_worker_api::WorkerId admission_queue_capacity: usize persistence_concurrency: usize shutdown_drain_timeout: Duration ``` Les champs sont privés et exposés par getters. Deux constructions existent : paramètres explicites bornés et defaults V1 sur des identités déjà validées. Bornes exactes : ```text admission queue : 1..=65_536, default 256 persistence concurrency : 1..=64, default 8 shutdown drain : 100 ms..=30 s, default 5 s ``` Les bornes sont inclusives. Aucun champ historique, provider-specific, retry, replay, gap repair, source capability ou frontier n'est ajouté. ## Erreur settings La crate ouvre un seul code propre à cette tranche : ```text worker_raw_transaction_ingest.settings_invalid ``` Il couvre uniquement les limites techniques possédées par le Worker concret. Le contexte d'erreur contient seulement le nom statique du champ invalide : ```text admission_queue_capacity persistence_concurrency shutdown_drain_timeout ``` Aucune valeur caller-supplied n'est copiée dans le diagnostic. Les erreurs de `RawNetworkId`, `WorkerId` et `WorkerKindCode` restent celles de leurs crates propriétaires. ## Redaction `Debug` du settings rend le network logique mais conserve le `WorkerId(..)` redacted fourni par `ksp-worker-api`; le texte réel du Worker ID n'est pas rendu. ## Frontière runtime maintenue Toujours absents : ```text RawTransactionIngestWorker start/spawn JoinHandle/JoinSet mpsc/watch supervisor Store write common RAW conversion Transport source live/provider SDK ``` Le manifest de production est inchangé depuis `pre.002`. ## Tests ajoutés/étendus ```text unit_tests/settings.rs defaults exacts bornes min/max inclusives six cas hors bornes code/contexte d'erreur stable redaction Debug du WorkerId tests/public_api.rs kind + settings consommables depuis crate root validation network/Worker identity reste lower-layer-owned erreur de borne publique stable et sans echo d'identité tests/dependency_boundary.rs firewall pre.002 conservé crate-root pre.003 limité à identity/settings absence de comportement runtime prématuré ``` ## Fichiers ajoutés ```text crates/ksp-worker-raw-transaction-ingest-lib/src/error.rs crates/ksp-worker-raw-transaction-ingest-lib/src/identity.rs crates/ksp-worker-raw-transaction-ingest-lib/src/settings.rs crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/settings.rs crates/ksp-worker-raw-transaction-ingest-lib/tests/public_api.rs deltas/0.3.11/pre.003.md ``` ## Fichiers modifiés ```text Cargo.toml crates/ksp-worker-raw-transaction-ingest-lib/src/lib.rs crates/ksp-worker-raw-transaction-ingest-lib/tests/dependency_boundary.rs 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 ``` ## Fichiers supprimés Aucun. ## Validations exécutées dans l'environnement d'assemblage Premier passage : quatre écarts de forme détectés par l'audit Rust (rustdoc `pub(crate)`, ordre de constantes, ligne vide de fonction), puis un espacement Markdown documentaire détecté après ajout de la validation. Ils ont tous été corrigés avant livraison. Gate final local : ```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), 777 file(s)) contrôle statique runtime-boundary : clean comparaison byte-à-byte avec pre.002 : 6 fichiers ajoutés, 5 modifiés, 0 supprimé ``` L'environnement d'assemblage ne fournit ni `cargo`, ni `rustc`, ni `rustfmt`. Aucun gate Cargo n'est déclaré PASS localement. ## Gate opérateur demandé ```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 ``` ## Suite Après gate opérateur vert, `pre.004` introduit le `start` caller-runtime-owned, le handle concret, le lifecycle/terminal et le stop idempotent. Aucun supervisor complet ni persistence réelle ne doit être anticipé avant leurs tranches dédiées.