v0.2.13-pre.004
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/020-V0_2_13_INTERFACE_PLAN.md -->
|
||||
<!-- version: 3 -->
|
||||
<!-- version: 4 -->
|
||||
|
||||
# Plan `0.2.13` — Interface / wire foundation
|
||||
|
||||
@@ -389,13 +389,13 @@ Créer la crate, l'ajouter au workspace, poser `lib.rs` avec exports explicites,
|
||||
|
||||
### pre.003 — `ProgramAccountMeta` + bornes communes
|
||||
|
||||
**Statut : réalisé ; gate opérateur à confirmer.**
|
||||
**Statut : réalisé ; fmt/audits/check/Clippy/tests Interface PASS, `cargo test --workspace` non fourni dans la preuve opérateur.**
|
||||
|
||||
Matérialiser la primitive de compte ordonné, la borne accounts, le modèle d'erreur Interface minimal et les unit/public canaries associés. `ProgramInstruction` et la borne data restent réservés à `pre.004`.
|
||||
|
||||
### pre.004 — `ProgramInstruction` passif borné
|
||||
|
||||
**Statut : prévu**
|
||||
**Statut : réalisé ; gate opérateur à confirmer.**
|
||||
|
||||
Ajouter l'instruction `{ program_id, accounts, data }`, constructeur validé, accessors, Debug résumé et canaris d'ordre/doublons/limites. Aucun serde/codec ou comportement Program.
|
||||
|
||||
@@ -502,4 +502,36 @@ La constante `255` ferme le contrat public de borne accounts mais son enforcemen
|
||||
|
||||
Une seule catégorie d'erreur Interface est introduite. `invalid_program_instruction` reste absent : aucun invariant de forme distinct des limites n'est encore matérialisé et le créer par symétrie serait prématuré. Les futures erreurs de borne doivent utiliser `ksp_core_lib::Error/Result` et ne projeter que des longueurs/plafonds sûrs.
|
||||
|
||||
Le passage à `pre.004` reste conditionné au gate opérateur complet sur l'overlay `pre.003`.
|
||||
La preuve opérateur fournie pour `pre.003` confirme fmt, audits, `cargo check`, Clippy, tests ciblés Interface et graphes Cargo. `cargo test --workspace` n'apparaît pas dans cette preuve ; il doit donc être rejoué au gate de `pre.004` avant de déclarer la continuité workspace complète.
|
||||
|
||||
## 18. État préparé `pre.004`
|
||||
|
||||
`pre.004` matérialise le second et dernier type du premier lot wire générique retenu :
|
||||
|
||||
```text
|
||||
ProgramInstruction présent
|
||||
fields privés
|
||||
program_id Pubkey Core
|
||||
accounts Vec<ProgramAccountMeta> consommé
|
||||
data Vec<u8> opaque consommé
|
||||
MAX_PROGRAM_INSTRUCTION_ACCOUNTS 255
|
||||
MAX_PROGRAM_INSTRUCTION_DATA_LEN 10_240
|
||||
try_new bornes accounts puis data
|
||||
accounts 255 / 256 accepté / refusé
|
||||
data 10_240 / 10_241 accepté / refusé
|
||||
accounts/data vides acceptés
|
||||
ordre/doublons préservés
|
||||
Program Pubkey non registry accepté
|
||||
Debug program_id/account_count/data_len uniquement
|
||||
serde / borsh / bincode / wincode absents
|
||||
solana-instruction absent
|
||||
ksp-logging-lib / constants.rs / TRACING_TARGET absents
|
||||
```
|
||||
|
||||
`ProgramInstruction::try_new` consomme les deux `Vec` fournis et compare leurs longueurs en `usize` avant stockage dans l'objet. La foundation n'ajoute aucun clone, cast étroit ou allocation de conversion. Une allocation éventuellement déjà réalisée par l'appelant pour construire le `Vec` reste naturellement hors du contrôle de l'API.
|
||||
|
||||
Les deux limites utilisent le code commun `interface.program_instruction_limit_exceeded`. Le contexte d'erreur est volontairement réduit à `field`, `actual_len` et `maximum_len`; aucune donnée du payload ni aucun account arbitraire n'est recopié dans le diagnostic.
|
||||
|
||||
Le `Debug` manuel n'imprime ni la collection accounts ni les octets `data`. Il expose uniquement l'identité publique du programme et les deux longueurs structurelles utiles au diagnostic.
|
||||
|
||||
Le passage à `pre.005` doit désormais se concentrer sur les canaris adversariaux/consumer externe/API/dependency hardening, sans ajouter un second domaine wire.
|
||||
|
||||
Reference in New Issue
Block a user