Files
2026-08-28 04:31:32 +02:00

5.5 KiB

Delta 0.2.13-pre.002 — scaffold ksp-interface-lib

1. Base requise

Cette tranche s'applique exclusivement sur :

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 :

0.2.13-pre.1

à :

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 :

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 :

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 :

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 :

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 :

[dependencies]
ksp-core-lib = { path = "../ksp-core-lib" }

Le canari tests/dependency_boundary.rs vérifie notamment l'absence de :

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 :

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

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

Cargo.toml
docs/plans/020-V0_2_13_INTERFACE_PLAN.md
docs/validation/016-V0_2_13_INTERFACE.md

9. Fichiers volontairement inchangés

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 :

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 :

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.