9.1 KiB
Delta 0.2.13-pre.001 — audit/sizing Interface / wire foundation
1. Base requise
v0.2.12
Archive opérateur utilisée : khadhroony-solana-project-v0.2.12.zip, annoncée comme issue du tag Gitea stable.
Vérifications d'identité :
workspace.package.version = 0.2.12 PASS à l'entrée
deltas/0.2.12/rel.001.md présent
prompts/018-V0_2_13_START_PROMPT.md présent
crates/ksp-interface-lib absent
crates/ksp-program-api absent
.git absent de l'archive
Le tag stable n'est donc pas revérifiable localement par Git. L'archive opérateur, le delta stable et la preuve opérateur fournie constituent l'autorité de reprise.
2. Objectif
Exécuter le gate obligatoire pre.001 sans ouvrir encore la crate : relire règles/architecture, auditer Core/Transport, auditer l'héritage kbot3, vérifier les candidates externes actuelles, décider le premier lot wire, fixer ownership/bornes/threat model/dependency graph/tests, produire plan/validation et recalibrer la release.
3. Décisions prises
crate cible ksp-interface-lib
premier lot ProgramAccountMeta + ProgramInstruction
orientation Program-facing passive
Pubkey ksp-core-lib::Pubkey, aucun wrapper parallèle
Program IDs fondamentaux restent ksp-core-lib
account metas ordre + doublons préservés
borne account metas 255
borne instruction data 10_240 octets
fields privés pour préserver les invariants
serde OUT pour la foundation
borsh/bincode/wincode OUT sans protocole concret
solana-instruction référence normative, pas dépendance runtime
solana-loader-v3-interface reporté au vertical loader-v3 réel
Transport DTO refactor OUT
Program traits/decode/recognition 0.2.14, OUT de Interface
replay/CPI/logs/return-data/Core 0.3.2+, OUT de 0.2.13
nouvelle dépendance externe aucune
network/logging runtime aucun
Les plafonds 255/10 KiB sont des bornes d'admission Interface dérivées des limites runtime Solana actuelles. Ils ne garantissent pas qu'une instruction donnée rentre dans une transaction top-level complète ; l'assembly transactionnel reste hors scope.
4. Héritage kbot3
Archive auditée : khadhroony-bot3_v0.5.3-pre.005-fix010.zip.
Verdict synthétique :
REPRENDRE ordered account meta; instruction program_id/accounts/data
REDESSINER wrappers String Pubkey/ProgramId; payload non borné
REPORTER decoder traits; recognition/proofs; replay/CPI/logs/return data;
canonical transaction; prepared execution/signers/policies
REJETER monolithe ks-lib; JSON/version/hash génériques par réflexe;
operation_code dans le contrat d'instruction passive
Aucun code kbot3 n'est porté par ce delta.
5. Audit externe ciblé
État observé le 27 août 2026 :
solana-instruction 3.5.0
Instruction = program_id: Pubkey + Vec<AccountMeta> + Vec<u8>
solana-pubkey ^4.3.0
serde/borsh/bincode/wincode optionnels
licence Anza SDK Apache-2.0
solana-program 4.1.0
MAX_CPI_INSTRUCTION_ACCOUNTS = 255
MAX_CPI_INSTRUCTION_DATA_LEN = 10 * 1024
MAX_CPI_ACCOUNT_INFOS = 128 (unique account infos; non appliqué aux metas)
solana-loader-v3-interface 8.1.1
compatible avec solana-instruction ^3.5.0 / solana-pubkey ^4.3.0 observés
hors premier lot
Aucune nouvelle dépendance n'est justifiée par pre.001.
6. Fichiers ajoutés
docs/plans/020-V0_2_13_INTERFACE_PLAN.md
docs/validation/016-V0_2_13_INTERFACE.md
deltas/0.2.13/pre.001.md
7. Fichiers modifiés
Cargo.toml
docs/000-README.md
docs/plans/000-README.md
docs/validation/000-README.md
workspace.package.version passe à 0.2.13-pre.1 conformément au workflow des prereleases non-fix.
8. Fichiers supprimés
aucun
9. Fichiers volontairement inchangés
ROADMAP.md
CHANGELOG.md
prompts/018-V0_2_13_START_PROMPT.md
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
docs/architecture/**
crates/**
config/**
.env.example
La roadmap/séquence/architecture possèdent déjà les frontières 0.2.13 / 0.2.14 / 0.3.2. pre.001 les confronte à la base réelle dans le nouveau plan sans les réécrire par duplication. ROADMAP.md et CHANGELOG.md restent hors du couloir de cette tranche.
10. Audit interne exécuté
Points confirmés :
Core réexporte Pubkey et possède les Program IDs fondamentaux
Core possède Error/Result communs
Transport possède encore les projections HTTP/WS/Yellowstone concrètes
aucun besoin de déplacer ces DTOs vers Interface en 0.2.13
Interface ne doit pas dépendre de Program/Transport/Store/Wallet/Config
Program API pourra dépendre de Core + Interface en 0.2.14
wires d'acquisition/CORE génériques restent réservés à 0.3.2+
workspace n'a pas solana-instruction/borsh/wincode comme besoin Interface actuel
11. Threat model et tests décidés
accounts 255 accepté
accounts 256 refusé
data 10_240 accepté
data 10_241 refusé
empty accounts/data accepté
ordre + doublons préservés
unknown Program Pubkey accepté
Debug instruction résumé borné
payload hostile dans Debug/Error absent
serde hostile éliminé par absence de serde
malformed/discriminant N/A tant qu'aucun codec n'est retenu
panic/unwrap/expect/? audits/lints KSP
network smoke non requis
public API / external consumer requis
cargo tree / dependency firewall requis dès scaffold
12. Validations exécutées dans le sandbox
Avant modification, sur l'archive stable extraite :
python3 scripts/audit_rust_workspace_rules.py PASS
python3 scripts/audit_markdown_tables.py ... deltas/0.2.13 PASS
La preuve opérateur fournie sur le checkout stable 0.2.12 établit :
cargo fmt --all PASS
Rust rules audit PASS
Markdown table audit PASS
cargo check --workspace PASS
cargo clippy --workspace --all-targets PASS
cargo test --workspace PASS
Après génération du présent overlay :
python3 scripts/audit_rust_workspace_rules.py PASS
General Rust rule audit clean
Rust export completeness audit 0 candidate(s)
KSP workspace Rust rule audit clean
python3 scripts/audit_markdown_tables.py ... deltas/0.2.13 PASS
tables / files 160 / 111
13. Validations non exécutées dans ce sandbox
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test --workspace
cargo tree -p ksp-interface-lib --edges normal
cargo tree --duplicates
Cause : executable cargo absent du sandbox de préparation. ksp-interface-lib n'existe pas encore par contrat de pre.001, donc les graphes propres à la crate commenceront avec pre.002.
Aucune commande non exécutée localement n'est déclarée PASS.
14. Forecast souple recalibré
pre.001 — audit + héritage + frontières + sizing
Statut : livré par le présent delta.
pre.002 — scaffold ksp-interface-lib + façade + firewall
Statut : prévu.
pre.003 — ProgramAccountMeta + bornes communes
Statut : prévu.
pre.004 — ProgramInstruction passif borné
Statut : prévu.
pre.005 — adversarial + consumer externe + API/dependency hardening
Statut : prévu.
pre.006 — gate technique final
Statut : prévu.
pre.007 — réconciliation documentaire finale
Statut : prévu.
pre.008 — préparation de publication minimale
Statut : prévu.
rel.001 — publication stable
Statut : prévu.
Le second lot wire optionnel du forecast initial est supprimé : aucun second domaine ne justifie une tranche dans cette foundation. Le scope reste compatible avec une release/session.
15. Questions ouvertes
Aucune question bloquante pour pre.002.
Les noms exacts des codes d'erreur et le détail final des accessors peuvent encore être ajustés dans pre.003/pre.004 sans rouvrir l'ownership, les bornes ou le scope de release.
16. Validation opérateur après application
Exécuter :
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 --workspace
pre.002 ne commence qu'après retour du gate appliqué.