v0.2.14-pre.005

This commit is contained in:
2026-08-28 15:12:59 +02:00
parent bcf2f16c05
commit 0319794e59
6 changed files with 589 additions and 10 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/021-V0_2_14_PROGRAM_API_PLAN.md -->
<!-- version: 4 -->
<!-- version: 5 -->
# Plan `0.2.14` — Program API foundation
@@ -555,13 +555,15 @@ Aucun trait decoder, recognition, outcome, registry, codec, runtime logging ou e
### `pre.004` — `ProgramInstructionDecoder` + external implementation
**Statut : matérialisé ; gate opérateur à confirmer.**
**Statut : alisé ; gate opérateur intégralement PASS.**
Le trait `ProgramInstructionDecoder: Send + Sync` expose l'associated type `Decoded`, `program_ids`, `recognize` et `decode`. Un test d'intégration downstream-style l'implémente avec un type décodé tiers et un `Pubkey` explicitement absent du registry Core. L'implémentation ne requiert ni `ksp-program-lib`, ni enum centrale, ni `Any`, JSON ou codec.
### `pre.005` — Adversarial/API hardening + completeness
Verrouiller bounds/Debug/error safety, exact export inventory, absence de closed-world enum, absence de serde/codec/logging/runtime et scope négatif registry/preparer/payload canonique.
**Statut : matérialisé ; gate opérateur à confirmer.**
Deux canaris de fermeture sont ajoutés : `release_completeness.rs` verrouille l'inventaire exact des exports/modules et l'absence de surface closed-world/runtime ; `security_hardening.rs` couvre input Interface maximal, erreur sûre sur payload hostile et associated output sans bound implicite. Aucun contrat fonctionnel n'est ajouté.
### `pre.006` — Gate technique final
@@ -649,6 +651,30 @@ Le canari externe utilise uniquement la façade `ksp_program_api::*` pour l'impl
`pre.005` reste une tranche de hardening/completeness : elle ne doit pas élargir le contrat fonctionnel.
## 13.4 État préparé après `pre.005`
Le gate opérateur `pre.004` fourni le 28 août 2026 est intégralement vert : audits Rust/Markdown, check, Clippy, tests ciblés, workspace complet, canari externe et graphes Cargo passent.
La tranche `pre.005` ajoute uniquement des preuves de fermeture :
```text
exact crate-root exports 10 exports explicitement verrouillés
production modules lib + decode vocabulary + decoder trait uniquement
public enums Recognition + DecodeOutcome uniquement
public traits ProgramInstructionDecoder uniquement
closed-world Program enum absent
registry / descriptors / preparer absents
serde / JSON / Any / codecs absents
logging / runtime / IO absents
max Interface instruction consommable par référence
malformed hostile payload Err Core sûr sans copie automatique du payload
associated Decoded bounds aucun bound implicite ajouté
dyn heterogeneous registry aucune promesse
normal dependencies inchangées : Core + Interface
```
`pre.006` reste un gate technique final sans développement fonctionnel.
## 14. Hors périmètre confirmé
```text