v0.2.12-pre.011
This commit is contained in:
403
prompts/018-V0_2_13_START_PROMPT.md
Normal file
403
prompts/018-V0_2_13_START_PROMPT.md
Normal file
@@ -0,0 +1,403 @@
|
||||
<!-- file: prompts/018-V0_2_13_START_PROMPT.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Prompt de démarrage `0.2.13` — Interface foundation
|
||||
|
||||
## 1. Identité de la release et base exacte
|
||||
|
||||
La base attendue est **exclusivement** la release stable :
|
||||
|
||||
```text
|
||||
v0.2.12
|
||||
```
|
||||
|
||||
Ne pas ouvrir `0.2.13` depuis `0.2.12-pre.*`, `0.2.12-pre.*-fix.*`, une archive intermédiaire, l'ancien projet kbot3 ou un souvenir de session. Si une archive opérateur de `v0.2.12` est fournie au démarrage, cette archive réelle est la première autorité devant les snippets, anciennes archives, anciens prompts et mémoire de conversation.
|
||||
|
||||
La release à ouvrir est :
|
||||
|
||||
```text
|
||||
0.2.13 — Interface foundation
|
||||
```
|
||||
|
||||
La première tranche est :
|
||||
|
||||
```text
|
||||
0.2.13-pre.001
|
||||
```
|
||||
|
||||
`pre.001` est obligatoirement une tranche d'**audit actuel + audit d'héritage kbot3 + brainstorming + décision de frontières + sizing**. Aucune implémentation fonctionnelle lourde de `ksp-interface-lib` ne doit précéder ce gate.
|
||||
|
||||
## 2. Mission
|
||||
|
||||
Introduire la première surface de `ksp-interface-lib` comme **façade wire KSP publique, passive, bornée et réutilisable**, destinée aux implémentations officielles futures et aux implémentations externes.
|
||||
|
||||
La release doit préparer proprement `0.2.14 — ksp-program-api` sans l'implémenter par anticipation.
|
||||
|
||||
La séparation cible est :
|
||||
|
||||
```text
|
||||
ksp-core-lib
|
||||
primitives KSP fondamentales / Error / Pubkey / Program IDs
|
||||
|
||||
ksp-interface-lib
|
||||
données et contrats wire publics passifs
|
||||
sérialisation / validation / bornes / compatibilité
|
||||
aucun comportement Program concret
|
||||
|
||||
ksp-program-api # 0.2.14
|
||||
traits et contrats comportementaux extensibles
|
||||
reconnaissance / decode / build / capabilities selon audit
|
||||
|
||||
ksp-program-lib # plus tard
|
||||
implémentations officielles concrètes
|
||||
```
|
||||
|
||||
`ksp-interface-lib` ne doit devenir ni un SDK Solana monolithique, ni un `ks-lib` renommé, ni une crate fourre-tout pour decoder/materializer/executor/store/pipeline.
|
||||
|
||||
## 3. Autorités et lectures obligatoires avant toute décision
|
||||
|
||||
Relire depuis la base réelle `v0.2.12`, au minimum :
|
||||
|
||||
```text
|
||||
README.md
|
||||
RULES.md
|
||||
ROADMAP.md
|
||||
CHANGELOG.md
|
||||
Cargo.toml
|
||||
|
||||
docs/000-README.md
|
||||
docs/rules/RULES_KSP.md
|
||||
docs/rules/RULES_RUST.md
|
||||
docs/rules/PROMPT_STRUCTURE.md
|
||||
docs/rules/VERSION_WORKFLOW.md
|
||||
docs/rules/FILE_CONTRACTS.md
|
||||
|
||||
docs/architecture/001-LAYERS.md
|
||||
docs/architecture/002-DEPENDENCIES.md
|
||||
docs/architecture/003-COMPONENT_CONTRACTS.md
|
||||
docs/architecture/004-COMPONENT_INVENTORY.md
|
||||
docs/architecture/005-DEPENDENCY_GRAPH.md
|
||||
docs/architecture/010-APPS_SERVICES_SCENARIOS_AND_CONTROL.md
|
||||
|
||||
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
|
||||
```
|
||||
|
||||
Relire aussi les surfaces publiques réelles de :
|
||||
|
||||
```text
|
||||
crates/ksp-core-lib
|
||||
crates/ksp-onchain-transport-lib
|
||||
crates/ksp-offchain-transport-lib
|
||||
```
|
||||
|
||||
Le but est d'éviter de dupliquer une primitive déjà possédée par Core ou de faire remonter dans Interface un DTO privé appartenant encore à Transport.
|
||||
|
||||
## 4. Héritage `khadhroony-bot3` : source d'idées, jamais autorité
|
||||
|
||||
Une archive historique fournie avant la publication de `v0.2.12` est :
|
||||
|
||||
```text
|
||||
khadhroony-bot3_v0.5.3-pre.005-fix010.zip
|
||||
```
|
||||
|
||||
Elle doit être traitée comme une **source d'idées à réévaluer**, pas comme une base de code ni comme une architecture à restaurer.
|
||||
|
||||
La reconnaissance préalable à ce prompt a identifié dans l'ancien `ks-lib` plusieurs familles conceptuelles utiles :
|
||||
|
||||
```text
|
||||
modèles wire / identité
|
||||
signature
|
||||
slot
|
||||
program id / pubkey
|
||||
instruction path
|
||||
source kind
|
||||
contract version
|
||||
|
||||
contexte d'instruction
|
||||
instruction top-level / CPI
|
||||
parent path
|
||||
stack height
|
||||
accounts résolus
|
||||
instruction accounts
|
||||
payload brut
|
||||
return data
|
||||
logs
|
||||
état d'échec transaction
|
||||
|
||||
contrats d'extension historiques
|
||||
decoder identity / surfaces / coverage
|
||||
recognition / outcome
|
||||
diagnostics / proof
|
||||
external decoder compile canary
|
||||
prepared execution plans / required signers / policy
|
||||
event materializer contract
|
||||
```
|
||||
|
||||
L'ancien projet contient également deux leçons négatives importantes :
|
||||
|
||||
1. `ks-lib` concentre plusieurs centaines de fichiers de modèles, decoders, materializers et executors ; **ne pas reproduire ce monolithe** ;
|
||||
2. plusieurs générations d'API decoder coexistent (`DcApiProtocolDecoder` puis contrat contextuel plus riche) ; **ne pas créer deux API concurrentes par compatibilité avec l'ancien projet**.
|
||||
|
||||
En `pre.001`, produire une matrice explicite pour chaque idée pertinente :
|
||||
|
||||
```text
|
||||
REPRENDRE comme concept
|
||||
REDESSINER selon KSP actuel
|
||||
REPORTER vers ksp-program-api / ksp-program-lib / 0.3.2+
|
||||
REJETER
|
||||
```
|
||||
|
||||
Si l'archive historique n'est pas disponible dans la nouvelle session, les éléments ci-dessus constituent seulement un seed de reconnaissance ; ne pas inventer le contenu manquant. L'opérateur peut fournir de nouveau l'archive si une inspection plus profonde est nécessaire.
|
||||
|
||||
## 5. Frontière stricte `Interface` / `Program API` / `Program Lib`
|
||||
|
||||
### `ksp-interface-lib` — autorisé dans `0.2.13`
|
||||
|
||||
La crate peut posséder, après audit `pre.001`, des types publics KSP représentant des **faits wire génériques** nécessaires à la future extension Program : identités, chemins d'instruction, comptes/meta, données binaires bornées, contextes minimaux, enveloppes/version de contrat, sérialisation déterministe et validation locale.
|
||||
|
||||
Les noms et le périmètre exacts doivent être décidés à partir des besoins démontrés de `0.2.14`, pas copiés depuis kbot3.
|
||||
|
||||
### `ksp-program-api` — réservé à `0.2.14`
|
||||
|
||||
Ne pas introduire dans `0.2.13` de trait comportemental public qui présuppose déjà l'architecture Program finale, notamment un équivalent prématuré de :
|
||||
|
||||
```text
|
||||
InstructionDecoder
|
||||
ProtocolDecoder
|
||||
ProgramDecoder
|
||||
Executor
|
||||
TypedInstructionExecutor
|
||||
Materializer
|
||||
ProgramRegistry comportemental
|
||||
```
|
||||
|
||||
Les notions historiques `identity`, `surfaces`, `coverage`, `recognize`, `decode`, `prepared plan`, `required signers`, `materialize` sont des **inputs de conception pour `0.2.14+`**, sauf si `pre.001` démontre qu'un type de données passif doit vivre dans Interface indépendamment du trait qui le consommera.
|
||||
|
||||
### `ksp-program-lib` — hors scope
|
||||
|
||||
Aucun decoder/executor/materializer officiel concret de System, SPL Token, Token-2022, Metadata, Anchor, Meteora, Raydium, Pump, Orca, Jupiter ou autre programme n'est implémenté ici.
|
||||
|
||||
## 6. Frontière avec RAW / CORE / Store
|
||||
|
||||
Le pipeline durable reste :
|
||||
|
||||
```text
|
||||
RAW -> CORE -> DECODE -> SPECIALIZED
|
||||
```
|
||||
|
||||
`0.2.13` ne doit pas anticiper `0.3.1`/`0.3.2` en transformant `ksp-interface-lib` en modèle complet d'acquisition ou de persistence RAW/CORE.
|
||||
|
||||
Le roadmap réserve explicitement à `0.3.2` l'extension d'Interface avec les wires génériques nécessaires aux acquisitions et à la future normalisation CORE.
|
||||
|
||||
Donc :
|
||||
|
||||
- n'ajouter maintenant que les contrats indispensables à la future frontière Program ;
|
||||
- ne pas créer tables, DTO Store, replay ledger, observation persistence ou jobs ;
|
||||
- ne pas figer prématurément un `CoreInstructionReplayInput` complet simplement parce que kbot3 en possédait un ;
|
||||
- si un contexte transactionnel riche est utile mais pas encore requis par `0.2.14`, le documenter comme candidat `0.3.2+`.
|
||||
|
||||
## 7. Dépendances et ownership
|
||||
|
||||
`ksp-interface-lib` doit rester bas niveau et réutilisable.
|
||||
|
||||
Baseline souhaitée à confronter au gate `pre.001` :
|
||||
|
||||
```text
|
||||
ksp-interface-lib -> ksp-core-lib
|
||||
```
|
||||
|
||||
Ajouter seulement les crates de sérialisation/utilitaires réellement nécessaires et autorisées par les règles workspace.
|
||||
|
||||
Interdictions initiales :
|
||||
|
||||
```text
|
||||
Interface -X-> Config
|
||||
Interface -X-> Logging runtime
|
||||
Interface -X-> Transport
|
||||
Interface -X-> Wallet
|
||||
Interface -X-> Store
|
||||
Interface -X-> Tauri
|
||||
Interface -X-> reqwest / tonic / tokio runtime
|
||||
Interface -X-> SDK/clients provider
|
||||
```
|
||||
|
||||
Ne pas réintroduire un agrégat Solana ou des crates protocole simplement pour importer des types pratiques. Les représentations publiques doivent rester KSP-owned lorsque cela protège la stabilité et le firewall du workspace. Toute exception doit être justifiée par l'audit des règles et des dépendances officielles actuelles.
|
||||
|
||||
## 8. Qualités obligatoires de la première surface wire
|
||||
|
||||
Toute surface retenue doit viser :
|
||||
|
||||
- types publics documentés et consommables depuis une crate externe ;
|
||||
- ownership explicite des identités et données ;
|
||||
- sérialisation/désérialisation uniquement lorsqu'elle est utile au contrat ;
|
||||
- aucune conversion canonique lossless -> `f64` ;
|
||||
- longueurs et collections bornées avant allocations pathologiques ;
|
||||
- données binaires sans `Debug` accidentellement gigantesque ou secret ;
|
||||
- distinction entre absence, valeur vide et valeur présente lorsque le wire la possède réellement ;
|
||||
- ordre préservé lorsque l'ordre Solana est sémantique ;
|
||||
- aucune dépendance à un backend de stockage ou à un transport ;
|
||||
- `#[non_exhaustive]` sur les enums publics susceptibles d'évoluer lorsqu'approprié ;
|
||||
- tests downstream-style prouvant que le contrat public suffit à un consumer externe.
|
||||
|
||||
Ne pas versionner un contrat wire par réflexe. Si une version explicite est retenue, `pre.001` doit expliquer **ce qui nécessite une évolution de contrat** et comment la compatibilité sera gérée.
|
||||
|
||||
## 9. Questions obligatoires de `pre.001`
|
||||
|
||||
Avant d'écrire la surface définitive, répondre explicitement à ces questions :
|
||||
|
||||
1. Quel besoin précis de `0.2.14` exige déjà `ksp-interface-lib` ?
|
||||
2. Quels types actuellement dans Core/Transport peuvent être réutilisés sans duplication ?
|
||||
3. Quelles données doivent être KSP-owned plutôt que des types Solana externes ?
|
||||
4. La première surface doit-elle couvrir instruction uniquement, instruction + account, ou un autre minimum ?
|
||||
5. Quelles informations CPI sont indispensables dès maintenant : path, parent, stack height, aucune ?
|
||||
6. Les logs, return data, balance deltas et erreurs transactionnelles appartiennent-ils à `0.2.13`, à `0.3.2`, ou à une autre couche ?
|
||||
7. Quel encodage public représente les bytes sans ambiguïté et avec bornes raisonnables ?
|
||||
8. Quels invariants peuvent être validés localement sans prétendre valider la sémantique d'un Program ?
|
||||
9. Quels anciens concepts kbot3 sont réellement utiles et lesquels reflètent seulement son ancienne architecture ?
|
||||
10. Le scope tient-il raisonnablement dans une session de release ? Sinon, réduire `0.2.13` avant toute implémentation lourde.
|
||||
|
||||
## 10. Livrables attendus de `pre.001`
|
||||
|
||||
`pre.001` doit produire au minimum :
|
||||
|
||||
- audit de la surface actuelle de Core/Transport pertinente ;
|
||||
- audit ciblé de l'héritage kbot3 si l'archive est disponible ;
|
||||
- matrice `REPRENDRE / REDESSINER / REPORTER / REJETER` ;
|
||||
- décision exacte des types/wires qui appartiennent à `0.2.13` ;
|
||||
- décision explicite de ce qui reste pour `0.2.14` et `0.3.2+` ;
|
||||
- graphe de dépendances cible ;
|
||||
- threat/robustness model wire : tailles, allocations, debug, malformed input ;
|
||||
- plan détaillé et validation dédiés ;
|
||||
- sizing final et forecast de prereleases recalibré.
|
||||
|
||||
`pre.001` peut rester principalement documentaire. Il ne doit pas créer une grosse API uniquement pour respecter le forecast initial ci-dessous.
|
||||
|
||||
## 11. Prévisions souples initiales
|
||||
|
||||
Ces tranches sont un **forecast de départ**, pas un contrat rigide. `pre.001` doit les fusionner, scinder ou supprimer si l'audit le justifie.
|
||||
|
||||
### `pre.001` — Audit actuel + héritage kbot3 + frontières + sizing
|
||||
|
||||
**Statut : prévu**
|
||||
|
||||
Audit des besoins réels de `0.2.14`, des surfaces existantes Core/Transport, de l'archive kbot3 et des dépendances. Décider le minimum wire exact, créer plan/validation et confirmer le sizing.
|
||||
|
||||
### `pre.002` — Scaffold `ksp-interface-lib` + firewall
|
||||
|
||||
**Statut : prévu**
|
||||
|
||||
Créer la crate, sa façade publique minimale, README/USAGE initiaux, tests de dépendances et canari de consommation externe, sans comportement Program.
|
||||
|
||||
### `pre.003` — Primitives wire communes retenues
|
||||
|
||||
**Statut : prévu**
|
||||
|
||||
Introduire uniquement les identités, wrappers, bornes et représentations communes confirmées par `pre.001`, en réutilisant Core lorsque possible.
|
||||
|
||||
### `pre.004` — Wire instruction
|
||||
|
||||
**Statut : prévu**
|
||||
|
||||
Matérialiser le contrat d'instruction générique retenu : program identity, comptes/meta ordonnés, données et contexte minimal démontré. Pas de decode.
|
||||
|
||||
### `pre.005` — Wire account/contexte complémentaire retenu
|
||||
|
||||
**Statut : prévu**
|
||||
|
||||
Ajouter seulement le second lot démontré par l'audit — account wire et/ou contexte strictement nécessaire au futur Program API. Ne pas forcer cette tranche si le scope minimal n'en a pas besoin.
|
||||
|
||||
### `pre.006` — Sérialisation, bornes et adversarial
|
||||
|
||||
**Statut : prévu**
|
||||
|
||||
Round-trips déterministes, malformed inputs, tailles/collections hostiles, représentation binaire, `Debug` sûr, ordre et états optionnels.
|
||||
|
||||
### `pre.007` — External consumer contract + API hardening
|
||||
|
||||
**Statut : prévu**
|
||||
|
||||
Canaris downstream-style prouvant qu'une crate externe peut construire/lire la surface publique sans imports privés ni dépendances Program. Réaudit de la surface exposée et du graph Cargo.
|
||||
|
||||
### `pre.008` — Gate technique et réconciliation documentaire finale
|
||||
|
||||
**Statut : prévu**
|
||||
|
||||
Workspace complet, Clippy/tests, audit public API/dependencies, README/USAGE/architecture/plan/validation. Aucune extension fonctionnelle opportuniste.
|
||||
|
||||
### `pre.009` — Préparation de publication
|
||||
|
||||
**Statut : prévu**
|
||||
|
||||
Couloir minimal : prompt `0.2.14`, `CHANGELOG.md`, `ROADMAP.md`, version et delta. Ne pas fusionner avec la réconciliation documentaire si les règles de lifecycle en vigueur l'interdisent.
|
||||
|
||||
### `rel.001` — Publication stable
|
||||
|
||||
**Statut : prévu**
|
||||
|
||||
Passage à `0.2.13`, gate final requis par les règles, commit/tag stable `v0.2.13` et conservation du seul tag stable attendu par le workflow KSP.
|
||||
|
||||
## 12. Tests et canaris attendus
|
||||
|
||||
Le plan final doit au moins prévoir :
|
||||
|
||||
```text
|
||||
cargo fmt --all
|
||||
python3 scripts/audit_rust_workspace_rules.py
|
||||
python3 scripts/audit_markdown_tables.py ...
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets
|
||||
cargo test -p ksp-interface-lib
|
||||
cargo test --workspace
|
||||
```
|
||||
|
||||
Canaris spécifiques attendus selon le scope retenu :
|
||||
|
||||
- external consumer compile test depuis l'API publique ;
|
||||
- dependency firewall ;
|
||||
- aucun comportement Program concret ;
|
||||
- aucune dépendance Config/Transport/Store/Tauri ;
|
||||
- malformed/oversized input avant allocation pathologique ;
|
||||
- sérialisation/round-trip exacte si serde fait partie du contrat ;
|
||||
- ordre des comptes/instructions préservé ;
|
||||
- distinction des options wire utiles ;
|
||||
- surface publique documentée et exports complets.
|
||||
|
||||
Aucun smoke réseau n'est requis par défaut pour une crate wire pure. Ne pas inventer un test live sans valeur technique réelle.
|
||||
|
||||
## 13. Hors scope explicite
|
||||
|
||||
Pour `0.2.13`, ne pas implémenter :
|
||||
|
||||
- `ksp-program-api` ;
|
||||
- `ksp-program-lib` ;
|
||||
- decoder Program concret ;
|
||||
- Anchor generic decoder ;
|
||||
- IDL parser/generator ;
|
||||
- materializer ;
|
||||
- executor / transaction builder Program ;
|
||||
- Store/RAW/CORE persistence ;
|
||||
- jobs/workers/pipelines ;
|
||||
- UI/Tauri ;
|
||||
- provider réseau ;
|
||||
- plugin dynamique / ABI stable C / WASM sandbox ;
|
||||
- auto-discovery de Program IDs ;
|
||||
- registry de plugins runtime ;
|
||||
- compatibilité automatique avec les types historiques `ks-lib`.
|
||||
|
||||
Les IDL et implémentations de l'ancien projet peuvent servir de références futures mais ne constituent pas la mission de cette release.
|
||||
|
||||
## 14. Discipline de delta et de session
|
||||
|
||||
Pour chaque prerelease :
|
||||
|
||||
- partir exclusivement de la tranche opérateur réellement validée ;
|
||||
- relire les règles/architecture pertinentes avant de rédiger ou modifier un contrat ;
|
||||
- produire un delta immuable `deltas/0.2.13/pre.NNN.md` ;
|
||||
- en cas de défaut, produire `pre.NNN-fix.MMM` strictement limité à la responsabilité de la tranche ;
|
||||
- ne pas modifier `ROADMAP.md` en détail pendant les prereleases ordinaires ;
|
||||
- réserver `CHANGELOG.md` à la clôture ;
|
||||
- préserver le format RustRover de tous les tableaux Markdown touchés ;
|
||||
- exécuter les gates applicables avant de fermer une tranche ;
|
||||
- garder la release dimensionnée pour une seule session de chat.
|
||||
|
||||
Les prévisions ci-dessus ne justifient jamais d'ajouter une surface qui n'est pas démontrée par l'audit.
|
||||
Reference in New Issue
Block a user