v0.3.5-pre.002

This commit is contained in:
2026-08-31 10:36:10 +02:00
parent 75e8030b07
commit 0dd722ffca
8 changed files with 516 additions and 90 deletions

View File

@@ -1,11 +1,11 @@
<!-- file: docs/validation/022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md -->
<!-- version: 2 -->
<!-- version: 3 -->
# Validation `0.3.5` — Interface passive acquisition events
## 1. Portée
Ce document est ouvert par `0.3.5-pre.001` et corrigé par `0.3.5-pre.001-fix.001`. Le fix enregistre les corrections sémantiques du gate ainsi que le gate Cargo réellement rejoué par l'opérateur sur `0.3.5-pre.1`.
Ce document est ouvert par `0.3.5-pre.001`, corrigé par `0.3.5-pre.001-fix.001` puis enrichi par `0.3.5-pre.002`. `pre.002` matérialise uniquement la famille `SlotLifecycleEvent` admise par le gate corrigé, sans avancer `TransactionExecutionEvent`.
Base :
@@ -17,7 +17,7 @@ workspace.package.version = 0.3.4
Version de travail :
```text
0.3.5-pre.1
0.3.5-pre.2
```
## 2. Gate d'entrée `v0.3.4`
@@ -161,22 +161,22 @@ Yellowstone gRPC -------------+
## 10. Threat gates
| Gate | Attendu `0.3.5` | Statut `pre.001` |
| ------------------------------------ | ------------------------------------------------- | ---------------- |
| mega enum | absent | PLAN PASS |
| protocol/provider enum leakage | absent | PLAN PASS |
| timestamp semantics conflated | absent | PLAN PASS |
| root/finalized label confusion | évitée par le stage KSP `Rooted` | PLAN PASS |
| optimistic/confirmed label confusion | évitée par le stage KSP `OptimisticallyConfirmed` | PLAN PASS |
| dead diagnostic in shared API | absent | PLAN PASS |
| RAW Store duplication | absent | PLAN PASS |
| event persistence | absent | PLAN PASS |
| event bus/runtime | absent | PLAN PASS |
| network id duplicated from Store | absent | PLAN PASS |
| cross-network use | composition doit conserver son scope réseau | À CANARIER |
| public enum evolution | `SlotLifecycleStage` doit être non-exhaustive | À IMPLÉMENTER |
| Core-only graph | aucune dependency nouvelle | PASS opérateur |
| external consumer | type consommable depuis crate externe | À IMPLÉMENTER |
| Gate | Attendu `0.3.5` | Statut courant |
| ------------------------------------ | ------------------------------------------------- | ------------------ |
| mega enum | absent | PLAN PASS |
| protocol/provider enum leakage | absent | PLAN PASS |
| timestamp semantics conflated | absent | PLAN PASS |
| root/finalized label confusion | évitée par le stage KSP `Rooted` | PLAN PASS |
| optimistic/confirmed label confusion | évitée par le stage KSP `OptimisticallyConfirmed` | PLAN PASS |
| dead diagnostic in shared API | absent | PLAN PASS |
| RAW Store duplication | absent | PLAN PASS |
| event persistence | absent | PLAN PASS |
| event bus/runtime | absent | PLAN PASS |
| network id duplicated from Store | absent | PLAN PASS |
| cross-network use | composition doit conserver son scope réseau | À CANARIER |
| public enum evolution | `SlotLifecycleStage` doit être non-exhaustive | IMPLÉMENTÉ pre.002 |
| Core-only graph | aucune dependency nouvelle | PASS opérateur |
| external consumer | type consommable depuis crate externe | CANARI pre.002 |
## 11. Fichiers de `pre.001`
@@ -260,3 +260,129 @@ Helius transactionSubscribe et Yellowstone Entry restent des DTOs Transport
un futur fait provider-neutral produit par une extension provider peut appartenir à Interface après gate
aucun fichier Rust/Transport/Store/Cargo n'est modifié par le fix
```
## 15. Gate opérateur post-`pre.001-fix.001`
Avant l'ouverture de `pre.002`, l'opérateur a rejoué les audits demandés sur l'état corrigé :
```text
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/0.3.5
```
Résultat fourni : **PASS**.
```text
General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
KSP workspace Rust rule audit: clean
Markdown table audit: clean (240 table(s), 138 file(s))
```
Ce résultat constitue le gate d'entrée immédiat de `0.3.5-pre.002`.
## 16. Implémentation `0.3.5-pre.002`
`pre.002` ajoute exactement une famille passive provider-neutral à `ksp-interface-lib` :
```text
SlotLifecycleStage
Processed
FirstShredReceived
Completed
CreatedBank
Dead
OptimisticallyConfirmed
Rooted
SlotLifecycleEvent
new(slot, stage)
slot()
stage()
```
Propriétés de représentation matérialisées :
```text
SlotLifecycleStage -> #[non_exhaustive] + Clone + Copy + Debug + Eq + PartialEq
SlotLifecycleEvent -> champs privés + Clone + Copy + Debug + Eq + PartialEq
slot -> u64 conservé exactement, y compris u64::MAX
validation -> aucune admission faillible
error code -> aucun nouvel error code
serde/codec -> absent
runtime/logging -> absent
Transport/Store -> aucune dépendance ni conversion
```
Le graphe Cargo reste inchangé pour `ksp-interface-lib` : son manifest n'est pas modifié et sa seule dépendance normale demeure `ksp-core-lib`.
Canaris ajoutés/ajustés :
```text
unit_tests/slot_lifecycle.rs
-> 7 stages distincts
-> traits Copy/Eq attendus
-> domaine u64 complet
-> Debug borné et provider-neutral
tests/slot_lifecycle_public_api.rs
-> construction et getters depuis crate root
-> match downstream avec wildcard imposé par #[non_exhaustive]
tests/release_completeness.rs
-> inventaire crate-root mis à jour à 8 reexports
-> inventaire de modules mis à jour avec slot_lifecycle uniquement
-> absence de serde/tracing/Transport/Store dans la racine Interface
```
`TransactionExecutionEvent` reste **non implémenté** et réservé au gate `pre.003`.
## 17. Fichiers de `pre.002`
Modifiés :
```text
Cargo.toml
crates/ksp-interface-lib/src/lib.rs
crates/ksp-interface-lib/tests/release_completeness.rs
docs/validation/022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md
```
Ajoutés :
```text
crates/ksp-interface-lib/src/slot_lifecycle.rs
crates/ksp-interface-lib/unit_tests/slot_lifecycle.rs
crates/ksp-interface-lib/tests/slot_lifecycle_public_api.rs
deltas/0.3.5/pre.002.md
```
Explicitement inchangés :
```text
crates/ksp-interface-lib/Cargo.toml
crates/ksp-onchain-transport-lib/**
crates/ksp-store-api/**
crates/ksp-store-lib/**
crates/ksp-store-postgres-lib/**
README.md
ROADMAP.md
CHANGELOG.md
```
## 18. Gate opérateur demandé pour `pre.002`
Après application de l'overlay :
```text
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/0.3.5
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-interface-lib
cargo test -p ksp-program-api
```
Les validations Cargo de `pre.002` restent **à exécuter par l'opérateur** ; elles ne sont pas déclarées réussies par l'environnement d'assemblage.