v0.2.13-pre.003
This commit is contained in:
272
deltas/0.2.13/pre.003.md
Normal file
272
deltas/0.2.13/pre.003.md
Normal file
@@ -0,0 +1,272 @@
|
||||
<!-- file: deltas/0.2.13/pre.003.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.2.13-pre.003` — `ProgramAccountMeta` + borne accounts
|
||||
|
||||
## 1. Base requise
|
||||
|
||||
Cette tranche s'applique exclusivement sur :
|
||||
|
||||
```text
|
||||
v0.2.12
|
||||
+ 0.2.13-pre.001
|
||||
+ 0.2.13-pre.002
|
||||
```
|
||||
|
||||
Le gate opérateur fourni pour `pre.002` 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é confirme :
|
||||
|
||||
```text
|
||||
ksp-interface-lib
|
||||
└── ksp-core-lib
|
||||
└── solana-pubkey 4.3.0
|
||||
```
|
||||
|
||||
Aucune dépendance codec/runtime n'est introduite par Interface et les doublons workspace observés sont préexistants à cette crate.
|
||||
|
||||
La version workspace passe de :
|
||||
|
||||
```text
|
||||
0.2.13-pre.2
|
||||
```
|
||||
|
||||
à :
|
||||
|
||||
```text
|
||||
0.2.13-pre.3
|
||||
```
|
||||
|
||||
## 2. Objectif
|
||||
|
||||
Matérialiser uniquement la primitive passive représentant un account meta d'instruction Program, figer la borne publique du nombre d'account metas et introduire le code d'erreur Interface minimal nécessaire à la future admission de `ProgramInstruction`.
|
||||
|
||||
La tranche ajoute :
|
||||
|
||||
```text
|
||||
ProgramAccountMeta
|
||||
MAX_PROGRAM_INSTRUCTION_ACCOUNTS = 255
|
||||
ERROR_CODE_PROGRAM_INSTRUCTION_LIMIT_EXCEEDED
|
||||
unit tests de la primitive
|
||||
public API canaries correspondants
|
||||
```
|
||||
|
||||
Elle n'ajoute pas encore :
|
||||
|
||||
```text
|
||||
ProgramInstruction
|
||||
MAX_PROGRAM_INSTRUCTION_DATA_LEN
|
||||
enforcement de collection 255/256
|
||||
data payload
|
||||
Debug résumé d'instruction
|
||||
serde / serde_json
|
||||
borsh / bincode / wincode
|
||||
solana-instruction
|
||||
logging/runtime
|
||||
Program behavior
|
||||
```
|
||||
|
||||
## 3. `ProgramAccountMeta`
|
||||
|
||||
La primitive possède trois champs privés :
|
||||
|
||||
```text
|
||||
Pubkey
|
||||
is_signer
|
||||
is_writable
|
||||
```
|
||||
|
||||
Les constructeurs publics sont :
|
||||
|
||||
```text
|
||||
ProgramAccountMeta::readonly(pubkey, is_signer)
|
||||
ProgramAccountMeta::writable(pubkey, is_signer)
|
||||
```
|
||||
|
||||
Les accessors publics sont :
|
||||
|
||||
```text
|
||||
pubkey()
|
||||
is_signer()
|
||||
is_writable()
|
||||
```
|
||||
|
||||
Le type reste strictement passif :
|
||||
|
||||
- aucune validation de registry Program n'est appliquée au `Pubkey` ;
|
||||
- aucune policy signer/writable n'est inventée ;
|
||||
- aucune sérialisation ou conversion vers `solana-instruction::AccountMeta` n'est ajoutée ;
|
||||
- les champs privés empêchent une dérive future de représentation sans passer par l'API possédée par Interface.
|
||||
|
||||
## 4. Borne accounts
|
||||
|
||||
La façade expose :
|
||||
|
||||
```rust
|
||||
pub const MAX_PROGRAM_INSTRUCTION_ACCOUNTS: usize = 255;
|
||||
```
|
||||
|
||||
Cette constante fixe le plafond d'admission retenu par le plan `0.2.13`.
|
||||
|
||||
`pre.003` ne crée volontairement aucune collection artificielle autour de `ProgramAccountMeta` uniquement pour tester `255/256`. L'enforcement concret sera réalisé dans `ProgramInstruction::try_new` à `pre.004`, lorsque la collection existera réellement.
|
||||
|
||||
La borne data `10_240` reste également réservée à `pre.004` avec le payload qu'elle protège.
|
||||
|
||||
## 5. Modèle d'erreur minimal
|
||||
|
||||
Interface continue d'utiliser `ksp_core_lib::Error`, `ErrorCode` et `Result`; aucun second type d'erreur n'est introduit.
|
||||
|
||||
La seule catégorie matérialisée est :
|
||||
|
||||
```text
|
||||
interface.program_instruction_limit_exceeded
|
||||
```
|
||||
|
||||
via :
|
||||
|
||||
```text
|
||||
ERROR_CODE_PROGRAM_INSTRUCTION_LIMIT_EXCEEDED
|
||||
```
|
||||
|
||||
Le code `invalid_program_instruction` n'est pas ajouté : aucun invariant de forme distinct des bornes n'existe encore dans la foundation. Le créer uniquement par symétrie serait prématuré.
|
||||
|
||||
À `pre.004`, les erreurs de borne devront limiter leur contexte aux longueurs et plafonds sûrs ; aucun payload ni compte arbitraire ne devra être copié dans les diagnostics.
|
||||
|
||||
## 6. Logging
|
||||
|
||||
La décision de `pre.002` reste inchangée. Interface est toujours une crate de contrats passifs et n'émet aucun événement/span runtime.
|
||||
|
||||
Restent donc absents :
|
||||
|
||||
```text
|
||||
ksp-logging-lib
|
||||
src/constants.rs
|
||||
TRACING_TARGET
|
||||
tracing direct
|
||||
```
|
||||
|
||||
## 7. Tests
|
||||
|
||||
Les unit tests de `ProgramAccountMeta` couvrent :
|
||||
|
||||
```text
|
||||
readonly -> identité/signature conservées, writable=false
|
||||
writable -> identité/signature conservées, writable=true
|
||||
Pubkey opaque/non registry accepté
|
||||
MAX_PROGRAM_INSTRUCTION_ACCOUNTS == 255
|
||||
```
|
||||
|
||||
`tests/public_api.rs` prouve depuis le crate-root :
|
||||
|
||||
```text
|
||||
construction readonly/writable
|
||||
accessors publics
|
||||
borne accounts publique
|
||||
code d'erreur stable et typé par ksp_core_lib::ErrorCode
|
||||
```
|
||||
|
||||
`tests/dependency_boundary.rs` conserve le firewall `pre.002` et vérifie désormais que :
|
||||
|
||||
```text
|
||||
ProgramAccountMeta est présent
|
||||
MAX_PROGRAM_INSTRUCTION_ACCOUNTS est présent
|
||||
ERROR_CODE_PROGRAM_INSTRUCTION_LIMIT_EXCEEDED est présent
|
||||
ProgramInstruction reste absent
|
||||
logging/runtime restent absents
|
||||
```
|
||||
|
||||
## 8. Fichiers ajoutés
|
||||
|
||||
```text
|
||||
crates/ksp-interface-lib/src/error.rs
|
||||
crates/ksp-interface-lib/src/program_account_meta.rs
|
||||
crates/ksp-interface-lib/unit_tests/program_account_meta.rs
|
||||
deltas/0.2.13/pre.003.md
|
||||
```
|
||||
|
||||
## 9. Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
crates/ksp-interface-lib/src/lib.rs
|
||||
crates/ksp-interface-lib/tests/dependency_boundary.rs
|
||||
crates/ksp-interface-lib/tests/public_api.rs
|
||||
docs/plans/020-V0_2_13_INTERFACE_PLAN.md
|
||||
docs/validation/016-V0_2_13_INTERFACE.md
|
||||
```
|
||||
|
||||
## 10. 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
|
||||
docs/architecture/**
|
||||
docs/rules/**
|
||||
crates/ksp-core-lib/**
|
||||
crates/ksp-logging-lib/**
|
||||
crates/ksp-onchain-transport-lib/**
|
||||
crates/ksp-offchain-transport-lib/**
|
||||
crates/ksp-config-lib/**
|
||||
crates/ksp-wallet-lib/**
|
||||
crates/ksp-app-*/**
|
||||
prompts/**
|
||||
```
|
||||
|
||||
README/USAGE restent dans leur lane de réconciliation finale `pre.007`; aucune documentation durable hors plan/validation n'est rouverte pour cette petite tranche fonctionnelle.
|
||||
|
||||
## 11. Validations de génération
|
||||
|
||||
Les audits Python sont rejoués sur l'arbre matérialisé avant livraison. Le sandbox de génération ne fournit pas `cargo`, `rustc` ou `rustfmt`; aucun nouveau PASS Cargo n'est donc revendiqué localement.
|
||||
|
||||
## 12. Gate opérateur attendu
|
||||
|
||||
Après application :
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Une correction découverte par ce gate reste un `0.2.13-pre.003-fix.NNN` et n'avance pas `pre.004`.
|
||||
|
||||
## 13. Suite
|
||||
|
||||
Après gate vert, `pre.004` pourra matérialiser uniquement :
|
||||
|
||||
```text
|
||||
ProgramInstruction { program_id, accounts, data }
|
||||
MAX_PROGRAM_INSTRUCTION_DATA_LEN = 10_240
|
||||
try_new borné
|
||||
accessors
|
||||
Debug résumé sans payload
|
||||
acceptation 0/255 accounts et 0/10_240 data
|
||||
rejet 256 accounts et 10_241 data
|
||||
ordre et doublons conservés
|
||||
contextes d'erreur sûrs
|
||||
```
|
||||
|
||||
Aucun serde/codec ou comportement Program ne doit être ajouté dans cette tranche suivante.
|
||||
Reference in New Issue
Block a user