v0.3.13-pre.011
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/034-V0_3_13_MULTI_SOURCE_LIVE_CONVERGENCE_PLAN.md -->
|
||||
<!-- version: 11 -->
|
||||
<!-- version: 12 -->
|
||||
|
||||
# Plan v0.3.13 — WS standard / Helius / HTTP live + convergence multi-source RawTransaction
|
||||
|
||||
@@ -1479,3 +1479,80 @@ cargo test -p ksp-worker-raw-transaction-ingest-lib
|
||||
```
|
||||
|
||||
Aucun `cargo tree` n'est requis : `pre.010` ne modifie ni dépendance ni feature. Le Transport n'est pas modifié par cette tranche snapshot/health.
|
||||
|
||||
## 80. Gate opérateur pre.010 reçu
|
||||
|
||||
Le 10 septembre 2026, le gate intermédiaire communiqué pour `0.3.13-pre.010` est entièrement vert pour les commandes exécutées : fmt, audits Rust, Markdown `340/848`, workspace check, Clippy strict, puis Worker `100` unit + `4` cross-layer + `17` dependency-boundary + `24` hardening + `18` public-api + `4` release-completeness et `0` doc-test.
|
||||
|
||||
Le Transport n'était pas modifié par `pre.010` et n'a pas été rejoué. Aucun `cargo tree` n'était requis ni exécuté.
|
||||
|
||||
## 81. Races et shutdown pre.011
|
||||
|
||||
La fermeture `pre.011` conserve l'ownership déjà établi mais rend les transitions concurrentes explicitement fail-closed :
|
||||
|
||||
```text
|
||||
stop externe -> signal stop source avant passage Worker à Stopping
|
||||
source fault déjà observée -> conservée face au stop concurrent
|
||||
shutdown_drain_timeout expiré -> drain_timeout terminal prioritaire
|
||||
abort du wrapper multi-source -> drop du JoinSet interne -> abort des enfants imbriqués
|
||||
abort persistence -> join avant publication terminale
|
||||
leader hydration abandonné -> followers notifiés Failed + clé réouvrable
|
||||
publication hydration -> notification followers avant retrait de la clé sous le même mutex
|
||||
```
|
||||
|
||||
Le Worker ne publie donc pas son terminal avant la récupération des tâches qu'il possède. Une tâche persistence libérée après un `drain_timeout` ne peut pas réapparaître comme succès tardif ni modifier le dernier snapshot terminal.
|
||||
|
||||
## 82. Compteurs et inventaire fail-closed pre.011
|
||||
|
||||
L'inventaire multi-source n'utilise plus d'addition saturante pour agréger :
|
||||
|
||||
```text
|
||||
hydration_pending
|
||||
source_reconnect_total
|
||||
source_replay_attempt_total
|
||||
source_continuity_gap_total
|
||||
```
|
||||
|
||||
Chaque agrégat utilise `checked_add`; un overflow devient `worker_raw_transaction_ingest.counter_exhausted`. Une publication d'inventaire portant un index absent, une `source_key` incohérente ou une projection absente est rejetée par `runtime_invalid` au lieu d'être ignorée.
|
||||
|
||||
Si une source remonte précisément `counter_exhausted`, le supervisor conserve ce code terminal au lieu de le rabattre sur le code générique `source_failed`.
|
||||
|
||||
## 83. Preuves déterministes pre.011
|
||||
|
||||
Les preuves ajoutées couvrent au minimum :
|
||||
|
||||
```text
|
||||
mauvaise source_key -> runtime_invalid fail-closed
|
||||
index inventaire absent -> runtime_invalid fail-closed
|
||||
overflow hydration_pending agrégé -> counter_exhausted
|
||||
overflow reconnect agrégé -> counter_exhausted
|
||||
abort leader hydration -> follower Failed + clé libérée
|
||||
abort supervisor externe -> enfants source imbriqués abortés
|
||||
stop concurrent + source fault prête -> fault conservée + sibling rejoint
|
||||
counter_exhausted source -> terminal counter_exhausted non remappé
|
||||
shutdown drain timeout -> aucune persistence tardive après terminal
|
||||
ordre stop -> Stopping -> drain -> terminal verrouillé par canari
|
||||
publication hydration atomique notification-avant-remove verrouillée par canari
|
||||
```
|
||||
|
||||
Les canaris externes vérifient que ce durcissement reste privé au Worker, réutilise uniquement les façades existantes et n'ajoute aucune identité source/provider à l'API publique.
|
||||
|
||||
## 84. Frontière de tranche pre.011
|
||||
|
||||
`pre.011` ne change ni la politique de convergence, ni les quotas/fairness `pre.009`, ni la projection health `pre.010`. Il n'ajoute pas de failover, de scheduler, de retry Worker supplémentaire, de backend Store direct ou de client Transport secondaire.
|
||||
|
||||
La completeness/security exhaustive cross-layer appartient à `pre.012`; le gate technique complet, les graphes et les smokes accessibles appartiennent à `pre.013`.
|
||||
|
||||
## 85. Gate opérateur requis avant pre.012
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
cargo fmt --all -- --check
|
||||
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
|
||||
```
|
||||
|
||||
Aucun `cargo tree` n'est requis : `pre.011` ne modifie ni dépendance ni feature. Le Transport n'est pas modifié par cette tranche de hardening shutdown/races.
|
||||
|
||||
Reference in New Issue
Block a user