Files
khadhroony-solana-project/deltas/0.3.5/pre.005.md
2026-08-31 11:17:09 +02:00

139 lines
3.8 KiB
Markdown

<!-- file: deltas/0.3.5/pre.005.md -->
<!-- version: 1 -->
# Delta `0.3.5-pre.005` — hardening et complétude Interface
## Base requise
```text
0.3.5-pre.4
```
Le gate opérateur de `pre.004` est entièrement propre : audits Rust/Markdown, `cargo check --workspace`, Clippy, tests `ksp-interface-lib` et `ksp-program-api` passent.
## Version
La tranche ajoute/modifie des sources Rust de test/canari. La version workspace devient :
```text
0.3.5-pre.5
```
## Mission
Fermer le hardening fonctionnel de `0.3.5` sans ajouter de troisième famille Interface ni modifier les contrats de production admis :
```text
SlotLifecycleEvent / SlotLifecycleStage
TransactionExecutionEvent / TransactionExecutionOutcome / TransactionSignature
```
## Hardening adversarial
Le nouveau `tests/security_hardening.rs` vérifie :
- conservation byte-exact d'une signature hostile de 64 octets ;
- redaction de la signature dans son `Debug` et dans celui de `TransactionExecutionEvent` ;
- conservation de `u64::MAX` sans narrowing ;
- structure minimale exacte des deux events ;
- absence de collection/payload/timestamp/provider/endpoint/filter/network dans les contrats acquisition ;
- absence de second RAW ou de famille reportée exportée silencieusement ;
- non-régression des bornes `ProgramInstruction` historiques.
## Graphe et dépendances
`tests/dependency_boundary.rs` ajoute un canari final imposant :
```text
une seule section [dependencies]
exactement une référence ksp-core-lib
aucune [features]
aucune [dev-dependencies]
aucune [build-dependencies]
```
Le manifeste `ksp-interface-lib` reste inchangé et Core-only.
## Candidats reportés
Aucun candidat reporté n'est promu par hardening :
```text
TransactionLogEvent -> idée différée
TransactionCommitmentEvent -> reporté
VoteEvent -> reporté
LedgerEntryEvent -> reporté
Account/Program RAW event -> rejet Interface
Transaction complète -> rejet Interface
Block event -> rejet Interface
Persisted-data available -> Store API owner
```
`TransactionLogEvent` devra être transféré vers TODO/IDEAS durable pendant `pre.007` s'il reste hors scope.
## Fichiers
Modifiés :
```text
Cargo.toml
crates/ksp-interface-lib/tests/dependency_boundary.rs
docs/validation/022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md
```
Ajoutés :
```text
crates/ksp-interface-lib/tests/security_hardening.rs
deltas/0.3.5/pre.005.md
```
Explicitement inchangés :
```text
crates/ksp-interface-lib/Cargo.toml
crates/ksp-interface-lib/src/**
crates/ksp-interface-lib/unit_tests/**
crates/ksp-onchain-transport-lib/**
crates/ksp-store-api/**
crates/ksp-store-lib/**
crates/ksp-store-postgres-lib/**
crates/ksp-program-api/**
README.md
ROADMAP.md
CHANGELOG.md
```
## Validations exécutées dans l'environnement d'assemblage
```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
```
## Validations non exécutées dans l'environnement d'assemblage
`cargo` n'est pas installé dans le sandbox d'assemblage. Restent donc à exécuter côté opérateur :
```text
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-interface-lib
cargo test -p ksp-program-api
```
## Décisions
- deux familles acquisition exactement restent admises ;
- aucun contrat production n'est modifié ;
- aucun nouveau bound métier n'est inventé ;
- la signature reste une primitive passive fixe de 64 octets sans codec ;
- aucune metadata source/provider n'entre dans Interface ;
- aucun second RAW n'est créé ;
- Program instruction foundation reste inchangée.
## Questions ouvertes
Aucune question fonctionnelle bloquante pour `pre.006`. La seule idée différée explicitement à conserver durablement est `TransactionLogEvent`.