v0.2.13-pre.005
This commit is contained in:
213
deltas/0.2.13/pre.005.md
Normal file
213
deltas/0.2.13/pre.005.md
Normal file
@@ -0,0 +1,213 @@
|
||||
<!-- file: deltas/0.2.13/pre.005.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.2.13-pre.005` — hardening adversarial + consumer externe + complétude
|
||||
|
||||
## 1. Base requise
|
||||
|
||||
Cette tranche s'applique exclusivement sur :
|
||||
|
||||
```text
|
||||
v0.2.12
|
||||
+ 0.2.13-pre.001
|
||||
+ 0.2.13-pre.002
|
||||
+ 0.2.13-pre.003
|
||||
+ 0.2.13-pre.004
|
||||
```
|
||||
|
||||
Le gate opérateur fourni pour `pre.004` est intégralement vert :
|
||||
|
||||
```text
|
||||
cargo fmt --all PASS
|
||||
python3 scripts/audit_rust_workspace_rules.py PASS
|
||||
python3 scripts/audit_markdown_tables.py ... PASS
|
||||
cargo check --workspace PASS
|
||||
cargo clippy --workspace --all-targets PASS
|
||||
cargo test -p ksp-interface-lib PASS
|
||||
cargo test --workspace PASS
|
||||
cargo tree -p ksp-interface-lib --edges normal inspecté
|
||||
cargo tree --duplicates inspecté
|
||||
```
|
||||
|
||||
Le graphe ciblé reste strictement :
|
||||
|
||||
```text
|
||||
ksp-interface-lib
|
||||
└── ksp-core-lib
|
||||
└── solana-pubkey 4.3.0
|
||||
```
|
||||
|
||||
La version workspace passe de :
|
||||
|
||||
```text
|
||||
0.2.13-pre.4
|
||||
```
|
||||
|
||||
à :
|
||||
|
||||
```text
|
||||
0.2.13-pre.5
|
||||
```
|
||||
|
||||
## 2. Objectif
|
||||
|
||||
Fermer le hardening du premier lot wire générique sans ajouter de capacité fonctionnelle ni de second domaine wire.
|
||||
|
||||
La tranche ajoute uniquement des preuves :
|
||||
|
||||
```text
|
||||
consumer externe crate-root
|
||||
inventaire exact de complétude release
|
||||
firewall source/manifest renforcé
|
||||
absence de narrowing/codec caché
|
||||
transfert sans réallocation des Vec admis
|
||||
absence de contenu hostile dans les erreurs de limite
|
||||
public API boundary canary
|
||||
```
|
||||
|
||||
Aucun fichier `src/` de production n'est modifié.
|
||||
|
||||
## 3. Consumer externe
|
||||
|
||||
`tests/external_consumer.rs` constitue le canari downstream. Comme tout integration test Rust, il est compilé comme un crate distinct de la bibliothèque et utilise exclusivement :
|
||||
|
||||
```text
|
||||
ksp_interface_lib::Pubkey
|
||||
ksp_interface_lib::ProgramAccountMeta
|
||||
ksp_interface_lib::ProgramInstruction
|
||||
ksp_interface_lib::MAX_PROGRAM_INSTRUCTION_ACCOUNTS
|
||||
ksp_interface_lib::MAX_PROGRAM_INSTRUCTION_DATA_LEN
|
||||
ksp_interface_lib::ERROR_CODE_PROGRAM_INSTRUCTION_LIMIT_EXCEEDED
|
||||
```
|
||||
|
||||
Aucun chemin vers un module privé n'est requis.
|
||||
|
||||
## 4. Complétude de release
|
||||
|
||||
`tests/release_completeness.rs` verrouille exactement les six exports crate-root retenus pour `0.2.13` et refuse une façade `pub mod`.
|
||||
|
||||
Il verrouille également l'inventaire des fichiers Rust de production :
|
||||
|
||||
```text
|
||||
error.rs
|
||||
lib.rs
|
||||
program_account_meta.rs
|
||||
program_instruction.rs
|
||||
```
|
||||
|
||||
Ce canari rend explicite qu'un second lot wire, un codec générique, un runtime ou un nouveau domaine ne peut pas être ajouté silencieusement dans cette release.
|
||||
|
||||
## 5. Hardening adversarial
|
||||
|
||||
Les unit tests de `ProgramInstruction` sont renforcés sur deux propriétés.
|
||||
|
||||
Premièrement, les pointeurs des `Vec<ProgramAccountMeta>` et `Vec<u8>` sont capturés avant `try_new` puis comparés aux slices exposés après construction. Le canari prouve que l'implémentation courante transfère les allocations admises sans clone/réallocation interne.
|
||||
|
||||
Deuxièmement, les deux branches d'erreur de limite sont confrontées à du matériel hostile : payload avec marqueur explicite et account meta arbitraire. Les rendus/contextes d'erreur doivent rester bornés aux champs sûrs déjà définis :
|
||||
|
||||
```text
|
||||
field
|
||||
actual_len
|
||||
maximum_len
|
||||
```
|
||||
|
||||
Aucun payload ni account meta n'est recopié dans l'erreur.
|
||||
|
||||
## 6. Dependency/API firewall
|
||||
|
||||
`tests/dependency_boundary.rs` conserve l'exigence manifeste :
|
||||
|
||||
```text
|
||||
ksp-core-lib = seule dépendance normale
|
||||
```
|
||||
|
||||
et étend le scan à tous les fichiers Rust de production pour interdire les chemins directs vers :
|
||||
|
||||
```text
|
||||
Program/Store/Transport/Config/Wallet
|
||||
serde/serde_json
|
||||
borsh/bincode/wincode
|
||||
solana-instruction
|
||||
reqwest/tokio/tonic/tauri
|
||||
tracing/ksp-logging-lib
|
||||
```
|
||||
|
||||
Un canari dédié refuse également les casts étroits et les points d'entrée génériques `serialize/deserialize/encode/decode` dans `program_instruction.rs`.
|
||||
|
||||
## 7. Public API
|
||||
|
||||
`tests/public_api.rs` ajoute un test de rejet `10_241` bytes depuis un consumer externe au module privé et vérifie que le caller reçoit le code Core commun ainsi que les trois contextes sûrs attendus.
|
||||
|
||||
Aucune nouvelle API publique n'est créée par `pre.005`.
|
||||
|
||||
## 8. Logging et codecs
|
||||
|
||||
La décision reste inchangée : Interface est passive.
|
||||
|
||||
Toujours absents :
|
||||
|
||||
```text
|
||||
ksp-logging-lib
|
||||
constants.rs
|
||||
TRACING_TARGET
|
||||
tracing direct
|
||||
serde
|
||||
borsh
|
||||
bincode
|
||||
wincode
|
||||
solana-instruction
|
||||
```
|
||||
|
||||
## 9. Fichiers ajoutés
|
||||
|
||||
```text
|
||||
crates/ksp-interface-lib/tests/external_consumer.rs
|
||||
crates/ksp-interface-lib/tests/release_completeness.rs
|
||||
deltas/0.2.13/pre.005.md
|
||||
```
|
||||
|
||||
## 10. Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
crates/ksp-interface-lib/tests/dependency_boundary.rs
|
||||
crates/ksp-interface-lib/tests/public_api.rs
|
||||
crates/ksp-interface-lib/unit_tests/program_instruction.rs
|
||||
docs/plans/020-V0_2_13_INTERFACE_PLAN.md
|
||||
docs/validation/016-V0_2_13_INTERFACE.md
|
||||
```
|
||||
|
||||
## 11. Fichiers volontairement inchangés
|
||||
|
||||
```text
|
||||
README.md
|
||||
ROADMAP.md
|
||||
CHANGELOG.md
|
||||
.env.example
|
||||
crates/ksp-interface-lib/Cargo.toml
|
||||
crates/ksp-interface-lib/README.md
|
||||
crates/ksp-interface-lib/USAGE.md
|
||||
crates/ksp-interface-lib/src/**
|
||||
crates/ksp-interface-lib/unit_tests/program_account_meta.rs
|
||||
docs/architecture/**
|
||||
prompts/**
|
||||
config/**
|
||||
```
|
||||
|
||||
## 12. Gate attendu
|
||||
|
||||
Après application de l'overlay :
|
||||
|
||||
```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/0.2.13
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets
|
||||
cargo test -p ksp-interface-lib
|
||||
cargo test --workspace
|
||||
cargo tree -p ksp-interface-lib --edges normal
|
||||
cargo tree --duplicates
|
||||
```
|
||||
|
||||
Si ce gate est vert, `pre.006` doit rester un gate technique final sans nouveau développement fonctionnel.
|
||||
Reference in New Issue
Block a user