277 lines
9.1 KiB
Markdown
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é.
|