v0.3.11-pre.010
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/032-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION_PLAN.md -->
|
||||
<!-- version: 9 -->
|
||||
<!-- version: 10 -->
|
||||
|
||||
# Plan v0.3.11 — fondation runtime du Worker RawTransaction ingest
|
||||
|
||||
@@ -744,12 +744,14 @@ Budget cible : **15–20 min**. `watch` latest-value, compteurs checked, common
|
||||
|
||||
Budget cible : **15–20 min**. Drain deadline, stop/fault ordering, saturation, source failure, Store slow/failure, abort+join au timeout, no orphan tasks. Scinder immédiatement si le gate réel dépasse le budget.
|
||||
|
||||
État après matérialisation : **implémenté, gate opérateur requis**. Les tâches source privées retournent désormais `ksp_core_lib::Result<()>` dans le `JoinSet` du supervisor ; une erreur source ou un `JoinError` devient `worker_raw_transaction_ingest.source_failed` et incrémente `source_failure_total` sans exposer de texte provider. Le shutdown possède une deadline stricte `shutdown_drain_timeout` ; au timeout, admission, persistences et sources sont fermées/abortées puis toutes rejointes avant `Faulted(worker_raw_transaction_ingest.drain_timeout)`. Le stop reste prioritaire dans le `select!`, mais un Store fault découvert pendant le drain n'est pas masqué par un stop antérieur ; un fault terminal déjà décidé n'est pas remplacé par un stop tardif. La saturation est instrumentée de façon source-neutral au dequeue d'une queue `mpsc` pleine via `backpressure_wait_total`, sans drop ni queue non bornée. Les tests déterministes couvrent source failure, stop/Store fault, saturation et timeout avec absence de tâches orphelines. Aucune source live, aucun Transport, aucun backend direct et aucune nouvelle dépendance/feature ne sont introduits.
|
||||
État après matérialisation : **implémenté et gate opérateur validé après `pre.009-fix.003`**. Les tâches source privées retournent désormais `ksp_core_lib::Result<()>` dans le `JoinSet` du supervisor ; une erreur source ou un `JoinError` devient `worker_raw_transaction_ingest.source_failed` et incrémente `source_failure_total` sans exposer de texte provider. Le shutdown possède une deadline stricte `shutdown_drain_timeout` ; au timeout, admission, persistences et sources sont fermées/abortées puis toutes rejointes avant `Faulted(worker_raw_transaction_ingest.drain_timeout)`. Le stop reste prioritaire dans le `select!`, mais un Store fault découvert pendant le drain n'est pas masqué par un stop antérieur ; un fault terminal déjà décidé n'est pas remplacé par un stop tardif. La saturation est instrumentée de façon source-neutral au dequeue d'une queue `mpsc` pleine via `backpressure_wait_total`, sans drop ni queue non bornée. Les correctifs `pre.009-fix.001` à `.003` ont uniquement réparé les nouveaux tests (signature de `receive`, annotation du `JoinSet`, `store_guard` et `implicit_return`) sans modifier le code de production ni les dépendances. Le gate communiqué le 8 septembre 2026 est vert sur `fmt`, audits, `check`, Clippy strict, 45 tests de crate et doc-tests. Aucun arbre Cargo n'a été requis car aucune dépendance/feature n'avait changé.
|
||||
|
||||
### `pre.010` — hardening public/release/security
|
||||
|
||||
Budget cible : **10–15 min**. Tests externes exacts : API root, dependencies, historical-surface absence, redaction, error codes, module inventory et scans Config/secret/backend.
|
||||
|
||||
État après matérialisation : **implémenté, gate opérateur requis**. Deux suites externes nouvelles ferment la tranche sans modifier le runtime : `hardening.rs` vérifie les sept codes d'erreur publics, la redaction du `WorkerId` et des valeurs invalides, la surface de dépendances exacte, l'usage `crate::Item`, l'absence de surface historique/Backfill/retriever, les scans Config/secret/backend/Transport et l'absence de dépendance retour depuis les couches basses ; `release_completeness.rs` verrouille l'inventaire exact des huit modules de production, les vingt-quatre exports publics crate-root et la présence des canaries externes attendues. Aucun fichier `src/`, aucune dépendance et aucune feature ne changent.
|
||||
|
||||
### `pre.011` — gate technique final
|
||||
|
||||
Budget cible : **10–15 min**. Workspace tests/all-features, Clippy strict, suites ciblées, arbres normal/features, duplicate tree. Aucun nouveau scope fonctionnel.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/028-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION.md -->
|
||||
<!-- version: 12 -->
|
||||
<!-- version: 13 -->
|
||||
|
||||
# Validation v0.3.11 — fondation runtime du Worker RawTransaction ingest
|
||||
|
||||
@@ -1404,3 +1404,114 @@ cargo test -p ksp-worker-raw-transaction-ingest-lib
|
||||
```
|
||||
|
||||
Critère de passage : races stop/fault déterministes, timeout borné sans tâche orpheline, saturation observable sans drop et frontières de dépendances inchangées.
|
||||
|
||||
## 21. `pre.010` — hardening public/release/security
|
||||
|
||||
### 21.1 Clôture opérateur de `pre.009-fix.003`
|
||||
|
||||
Le gate communiqué le 8 septembre 2026 est vert :
|
||||
|
||||
```text
|
||||
General Rust rule audit: clean
|
||||
Rust export completeness audit: 0 candidate(s)
|
||||
KSP workspace Rust rule audit: clean
|
||||
Markdown table audit: clean (340 table(s), 789 file(s))
|
||||
cargo check --workspace: PASS
|
||||
cargo clippy --workspace --all-targets --all-features -- -D warnings: PASS
|
||||
35 unit tests: PASS
|
||||
3 dependency-boundary tests: PASS
|
||||
7 public API tests: PASS
|
||||
doc-tests: PASS
|
||||
```
|
||||
|
||||
Les trois fixes `pre.009-fix.001` à `.003` ont uniquement corrigé les nouveaux tests ; aucun code de production, edge de dépendance ou feature n'a changé. Aucun `cargo tree` intermédiaire n'était requis.
|
||||
|
||||
### 21.2 Surface publique exacte
|
||||
|
||||
`pre.010` n'ajoute aucun symbole productif. La suite `release_completeness.rs` verrouille exactement les vingt-quatre exports publics crate-root déjà ouverts par `pre.003` à `pre.009` et interdit `pub mod`.
|
||||
|
||||
Inventaire productif exact verrouillé :
|
||||
|
||||
```text
|
||||
admission.rs
|
||||
error.rs
|
||||
identity.rs
|
||||
lib.rs
|
||||
persistence.rs
|
||||
runtime.rs
|
||||
settings.rs
|
||||
snapshot.rs
|
||||
```
|
||||
|
||||
Aucun nouveau module de production n'est introduit.
|
||||
|
||||
### 21.3 Hardening externe et redaction
|
||||
|
||||
La suite `hardening.rs` ajoute des preuves externes pour :
|
||||
|
||||
```text
|
||||
7 ErrorCode publics uniques et domain-scoped
|
||||
WorkerId redacted dans Debug
|
||||
settings invalides sans echo de valeur ni WorkerId
|
||||
manifest exact et backend-neutral
|
||||
crate::Item pour les impl partagées
|
||||
aucune surface historical/Backfill/checkpoint/discovery/hydration/retriever
|
||||
aucun Config productif
|
||||
aucun secret-like material productif
|
||||
aucun backend Store direct
|
||||
aucun Transport productif
|
||||
aucune dépendance retour depuis les couches basses vers le Worker concret
|
||||
aucun type Tokio/backend/live-source exposé par la crate-root
|
||||
```
|
||||
|
||||
Les scans secret ciblent uniquement des marqueurs à valeur de credential (`api_key`, `authorization`, `bearer`, `password`, `credential`, `secret`) et ne confondent pas les tokens de contrôle runtime avec des secrets.
|
||||
|
||||
### 21.4 Dépendances
|
||||
|
||||
Le manifest productif reste exactement :
|
||||
|
||||
```text
|
||||
ksp-core-lib
|
||||
ksp-logging-lib
|
||||
ksp-raw-transaction-lib
|
||||
ksp-store-lib (default-features = false)
|
||||
ksp-worker-api
|
||||
sha2
|
||||
tokio (macros, rt, sync, time)
|
||||
```
|
||||
|
||||
Aucun `[dev-dependencies]` ni `[build-dependencies]` n'est ajouté. Aucun arbre Cargo intermédiaire n'est requis puisque le manifest de la crate Worker est inchangé.
|
||||
|
||||
### 21.5 Frontière volontaire de `pre.010`
|
||||
|
||||
La tranche reste purement tests/release/security et n'introduit aucun :
|
||||
|
||||
```text
|
||||
source live
|
||||
Transport
|
||||
Config
|
||||
backend Store direct
|
||||
nouvelle API publique
|
||||
nouveau runtime behavior
|
||||
nouvelle dépendance/feature
|
||||
réconciliation README/USAGE
|
||||
publication metadata
|
||||
```
|
||||
|
||||
`pre.011` reste propriétaire du gate technique final workspace et des arbres Cargo.
|
||||
|
||||
### 21.6 Gate opérateur demandé pour `pre.010`
|
||||
|
||||
Aucune dépendance ni feature n'est modifiée ; le gate ciblé reste :
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Critère de passage : toutes les canaries public/release/security sont vertes sans modification de la surface productive.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user