Files
khadhroony-solana-project/deltas/0.2.13/pre.001.md
2026-08-27 23:33:01 +02:00

277 lines
9.1 KiB
Markdown

<!-- file: deltas/0.2.13/pre.001.md -->
<!-- version: 1 -->
# 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<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
```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é.