v0.2.14-pre.003

This commit is contained in:
2026-08-28 14:10:49 +02:00
parent c1f61a380f
commit 27d4cb1f36
11 changed files with 588 additions and 68 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/021-V0_2_14_PROGRAM_API_PLAN.md -->
<!-- version: 2 -->
<!-- version: 3 -->
# Plan `0.2.14` — Program API foundation
@@ -541,7 +541,7 @@ Baseline, règles/architecture, héritage, ownership, API candidate, dependency
### `pre.002` — Scaffold `ksp-program-api` + façade + firewall
**Statut : matérialisé ; gate opérateur à confirmer.**
**Statut : alisé ; gate opérateur intégralement PASS.**
La crate est membre du workspace avec exactement `ksp-core-lib` et `ksp-interface-lib` comme dépendances normales. Le crate-root réexporte `Error`, `ErrorCode`, `ErrorContext`, `Result`, `Pubkey`, `ProgramAccountMeta` et `ProgramInstruction`. README/USAGE initiaux et canaris `public_api` / `dependency_boundary` sont présents.
@@ -549,7 +549,9 @@ Aucun trait decoder, recognition, outcome, registry, codec, runtime logging ou e
### `pre.003` — Recognition + outcome minimal
Introduire `ProgramInstructionRecognition` et `ProgramInstructionDecodeOutcome<Decoded>` avec invariants et Debug sûr. Aucun descriptor/registry.
**Statut : matérialisé ; gate opérateur à confirmer.**
`ProgramInstructionRecognition` et `ProgramInstructionDecodeOutcome<Decoded>` sont ajoutés dans un module privé puis réexportés depuis le crate-root. Les deux enums sont `#[non_exhaustive]`. Le `Debug` de l'outcome est manuel, ne requiert pas `Decoded: Debug` et n'affiche jamais la valeur décodée. Aucun descriptor, registry ou trait decoder n'est avancé.
### `pre.004` — `ProgramInstructionDecoder` + external implementation
@@ -599,6 +601,27 @@ dependency firewall canary présent
`pre.003` reste limité à `ProgramInstructionRecognition` et `ProgramInstructionDecodeOutcome<Decoded>` avec leur sémantique et leur Debug sûr. Le trait decoder reste réservé à `pre.004`.
## 13.2 État préparé après `pre.003`
Le gate opérateur `pre.002` fourni le 28 août 2026 est intégralement vert : audits Rust/Markdown, check, Clippy, tests de `ksp-program-api`, workspace complet et graphes Cargo ont été exécutés. Le graphe normal ciblé reste exactement `Core + Interface`.
La tranche `pre.003` matérialise :
```text
ProgramInstructionRecognition NoMatch / ProgramMatch / ExactMatch
ProgramInstructionDecodeOutcome<T> Decoded(T) / Unsupported
non_exhaustive oui sur les deux enums
Debug recognition payload-free par construction
Debug outcome opaque, sans bound T: Debug
Failed / Ignored absents
priority / confidence / proof absents de la surface
ProgramInstructionDecoder absent par contrat pre.003
registry / canonical payload / preparer absents
normal dependencies inchangées : Core + Interface
```
Les tests unitaires vérifient notamment qu'un type décodé externe dépourvu de `Debug` peut être contenu et formaté via l'outcome sans exposer sa valeur. Le passage à `pre.004` reste conditionné au gate opérateur de cet overlay.
## 14. Hors périmètre confirmé
```text