# Delta `0.2.13-pre.001` — audit/sizing Interface / wire foundation ## 1. Base requise ```text 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é : ```text 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 ```text 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 : ```text 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 : ```text solana-instruction 3.5.0 Instruction = program_id: Pubkey + Vec + Vec 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 ```text 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 ```text 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 ```text aucun ``` ## 9. Fichiers volontairement inchangés ```text 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 : ```text 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 ```text 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 : ```text 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 : ```text 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 : ```text 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 ```text 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 : ```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 --workspace ``` `pre.002` ne commence qu'après retour du gate appliqué.