v0.1.1-pre.002

This commit is contained in:
2026-08-14 15:12:38 +02:00
parent 27a6715a3e
commit 72ddabd9f2
7 changed files with 465 additions and 11 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md -->
<!-- version: 4 -->
<!-- version: 5 -->
# Plan KSP 0.1.1 — Core foundation
@@ -59,11 +59,11 @@ Core doit posséder les identifiants fondamentaux du runtime Solana qui ne relè
Cette propriété inclut les valeurs canoniques KSP, leur représentation `Pubkey`, leur nomenclature et un registre descriptif enumerable permettant de les inventorier/rechercher. Ce registre de constantes n'est pas le registry de dispatch de `ksp-program-lib` : il ne sélectionne aucun decoder, executor ou implémentation de programme et ne crée aucune enum fermée des protocoles.
## Contrat d'erreur proposé
## Contrat d'erreur retenu
### Forme générale
La direction retenue pour `pre.002` est un type structuré et extensible plutôt qu'une enum fermée.
`pre.002` stabilise un type structuré et extensible plutôt qu'une enum fermée.
Surface conceptuelle :
@@ -85,7 +85,7 @@ Error
Result<T> = std::result::Result<T, Error>
```
Le détail syntaxique Rust exact reste à implémenter et tester dans `pre.002`, mais les invariants suivants font partie du plan.
La surface Rust de `pre.002` retient les constructeurs/getters explicites ainsi que des enrichissements consommant `self` : `Error::with_context(...)` et `Error::with_source(...)`. `ErrorCode::new(...)` est `const` afin que les crates supérieures puissent déclarer leurs codes sous forme de constantes. Les invariants suivants font partie du contrat.
### Invariants
@@ -101,7 +101,7 @@ Le détail syntaxique Rust exact reste à implémenter et tester dans `pre.002`,
- Une cause externe peut être conservée par `source` lorsqu'elle implémente `std::error::Error + Send + Sync + 'static`.
- Une erreur externe qui ne respecte pas ces bornes peut toujours être transformée explicitement en message/contexte sans être conservée comme `source`.
- `Error` implémente `std::fmt::Display` et `std::error::Error`.
- `Display` expose le code qualifié et le message principal ; il ne concatène pas automatiquement tout le contexte ou toute la chaîne de causes.
- `Display` utilise exactement la forme `<domain>.<code>: <message>` ; il ne concatène pas automatiquement le contexte ou la chaîne de causes.
- Aucun `From<ExternalError>` générique ou inventaire de conversions propres aux futurs domaines n'est ajouté dans Core. Les crates propriétaires enveloppent explicitement leur cause avec leur propre `ErrorCode`.
- Aucun besoin de `Clone`, `Eq` ou `PartialEq` n'est imposé à `Error` : préserver une vraie cause d'erreur est prioritaire sur ces dérivations.
@@ -657,8 +657,6 @@ Un `pre.NNN-fix.NNN` corrige la tranche correspondante sans réécrire son histo
## Questions ouvertes non bloquantes
- Confirmer, pendant `pre.002`, si `ErrorContext` doit être ajouté par une méthode consommant `self` (`with_context`) ou par une méthode mutable ; privilégier l'API la plus simple compatible avec le style explicite KSP.
- Confirmer le format exact de `Display` par les tests avant de le considérer stable.
- Revérifier en `pre.003` la version publiée de `solana-pubkey`, son API compile-time pertinente et le MSRV officiel au jour du code.
- Décider en `pre.005`, à partir de l'API réellement stabilisée, si un `README.md`/`USAGE.md` de crate apporte suffisamment de valeur pour être créé maintenant.