Files
khadhroony-solana-project/deltas/0.2.13/pre.002.md
2026-08-28 04:31:32 +02:00

206 lines
5.5 KiB
Markdown

<!-- file: deltas/0.2.13/pre.002.md -->
<!-- version: 1 -->
# Delta `0.2.13-pre.002` — scaffold `ksp-interface-lib`
## 1. Base requise
Cette tranche s'applique exclusivement sur :
```text
v0.2.12
+ 0.2.13-pre.001
```
Le gate opérateur fourni pour `pre.001` est intégralement vert : `cargo fmt --all`, audits Rust/Markdown, `cargo check --workspace`, Clippy workspace et `cargo test --workspace` passent.
La version workspace passe de :
```text
0.2.13-pre.1
```
à :
```text
0.2.13-pre.2
```
## 2. Objectif
Créer uniquement le scaffold de `ksp-interface-lib` et verrouiller sa frontière avant les types wire fonctionnels.
La tranche matérialise :
```text
nouveau membre workspace ksp-interface-lib
manifest avec ksp-core-lib comme seule dépendance normale
façade crate-root explicite
réexport contrôlé de ksp_core_lib::Pubkey
README/USAGE initiaux
canari public API minimal
canari dependency firewall
```
Elle ne matérialise pas encore :
```text
ProgramAccountMeta
ProgramInstruction
bornes instruction
codes d'erreur Interface
serde / serde_json
borsh / bincode / wincode
solana-instruction
network/runtime
Program behavior
```
## 3. Décision Logging
`0.2.13` reste une foundation de contrats passifs. Aucun comportement runtime n'est actuellement prévu dans `ksp-interface-lib`, donc aucun événement/span n'a besoin d'être émis.
En conséquence, la tranche maintient explicitement absents :
```text
ksp-logging-lib
src/constants.rs
TRACING_TARGET
tracing direct
```
Cette absence est volontaire et couverte par le canari de dépendances. Si un comportement runtime réel apparaît dans une future évolution d'Interface, l'instrumentation devra être ajoutée via `ksp-logging-lib`; `DEP-LOG-010` imposera alors un `pub(crate) const TRACING_TARGET: &str` possédé par `src/constants.rs`.
Les futures validations de bornes de `pre.003`/`pre.004` doivent retourner des erreurs structurées ; elles ne justifient pas à elles seules des logs runtime.
## 4. Surface publique de scaffold
La seule primitive publique nouvellement exposée est :
```rust
pub use ksp_core_lib::Pubkey;
```
Ce réexport confirme l'ownership décidé : Interface n'introduit aucun wrapper `ProgramId`/`Pubkey` parallèle et utilisera la primitive Core dans ses futurs contrats wire.
La façade ne contient aucun `pub mod`. Les types d'instruction restent absents pour éviter d'avancer `pre.003`/`pre.004`.
## 5. Dependency firewall
Le manifest membre possède exactement :
```text
[dependencies]
ksp-core-lib = { path = "../ksp-core-lib" }
```
Le canari `tests/dependency_boundary.rs` vérifie notamment l'absence de :
```text
ksp-logging-lib
ksp-program-*
ksp-*-transport-lib
ksp-config-lib
ksp-store-*
ksp-wallet-lib
serde / serde_json
borsh / bincode / wincode
solana-instruction
reqwest / tokio / tonic / tauri / tracing
```
Il verrouille aussi l'absence de `src/constants.rs` et `TRACING_TARGET` tant que la crate reste passive.
## 6. Tests ajoutés
`tests/public_api.rs` vérifie que le `Pubkey` canonique est consommable uniquement depuis le crate-root Interface.
`tests/dependency_boundary.rs` vérifie :
```text
dépendance normale exacte = ksp-core-lib
absence des dépendances interdites
absence de ProgramAccountMeta/ProgramInstruction en pre.002
absence de surface Logging runtime
```
Aucun unit test métier n'est ajouté : aucune primitive fonctionnelle n'existe encore.
## 7. Fichiers ajoutés
```text
crates/ksp-interface-lib/Cargo.toml
crates/ksp-interface-lib/README.md
crates/ksp-interface-lib/USAGE.md
crates/ksp-interface-lib/src/lib.rs
crates/ksp-interface-lib/tests/dependency_boundary.rs
crates/ksp-interface-lib/tests/public_api.rs
deltas/0.2.13/pre.002.md
```
## 8. Fichiers modifiés
```text
Cargo.toml
docs/plans/020-V0_2_13_INTERFACE_PLAN.md
docs/validation/016-V0_2_13_INTERFACE.md
```
## 9. Fichiers volontairement inchangés
```text
README.md
ROADMAP.md
CHANGELOG.md
.env.example
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/**
```
Aucune architecture durable n'est rouverte : le graphe `Interface -> Core`, avec Logging uniquement lorsqu'un runtime logging réel existe, est déjà documenté.
## 10. 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 PASS Cargo nouveau n'est donc revendiqué localement.
## 11. 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
```
Le `cargo tree -p ksp-interface-lib --edges normal` doit montrer Core comme unique dépendance KSP directe et ne doit pas révéler de codec/runtime ajouté par Interface.
Une correction découverte par ce gate reste un `0.2.13-pre.002-fix.NNN` et n'avance pas `pre.003`.
## 12. Suite
Après gate vert, `pre.003` pourra matérialiser uniquement :
```text
ProgramAccountMeta
constante de borne account metas
modèle d'erreur Interface minimal nécessaire
unit/public canaries correspondants
```
`ProgramInstruction`, sa data bound et son Debug résumé restent réservés à `pre.004`.