382 lines
10 KiB
Markdown
382 lines
10 KiB
Markdown
<!-- file: prompts/009-V0_2_4_START_PROMPT.md -->
|
||
<!-- version: 1 -->
|
||
|
||
# Prompt de démarrage `0.2.4` — HTTP Blocks + Economics + compliance HTTP finale
|
||
|
||
## 1. Contexte de reprise
|
||
|
||
La base attendue est la release stable :
|
||
|
||
```text
|
||
v0.2.3
|
||
```
|
||
|
||
La surface HTTP acquise doit être :
|
||
|
||
```text
|
||
52 méthodes HTTP courantes enregistrées
|
||
14 méthodes historiques Deprecated / runtime Removed
|
||
37 wrappers typed courants :
|
||
4 foundation
|
||
22 Accounts/Tokens/Cluster
|
||
11 Transactions
|
||
15 wrappers typed restants : 10 Blocks + 5 Economics
|
||
```
|
||
|
||
`0.2.3` a aussi formalisé `KSP-TRANSPORT-007` : un wrapper RPC KSP ne compte comme complet que s'il expose toutes les possibilités supportées retenues par l'audit — paramètres, options, overloads/formes legacy encore supportés, contraintes déterministes utiles et variantes de réponse pertinentes sans perte.
|
||
|
||
La release à ouvrir est :
|
||
|
||
```text
|
||
0.2.4 — HTTP Blocks + Economics + compliance HTTP finale
|
||
```
|
||
|
||
La première tranche est `0.2.4-pre.001` et commence par **audit officiel actuel + brainstorming + sizing**, avant toute implémentation lourde.
|
||
|
||
## 2. Mission
|
||
|
||
Compléter exactement les 15 méthodes actuellement affectées à `HttpRpcCoverageRelease::V0_2_4`.
|
||
|
||
### Blocks — 10
|
||
|
||
```text
|
||
getBlock
|
||
getBlockCommitment
|
||
getBlockHeight
|
||
getBlockProduction
|
||
getBlocks
|
||
getBlocksWithLimit
|
||
getBlockTime
|
||
getFirstAvailableBlock
|
||
getRecentPerformanceSamples
|
||
minimumLedgerSlot
|
||
```
|
||
|
||
### Economics — 5
|
||
|
||
```text
|
||
getInflationGovernor
|
||
getInflationRate
|
||
getInflationReward
|
||
getStakeMinimumDelegation
|
||
getSupply
|
||
```
|
||
|
||
La partition doit être revérifiée contre la documentation Solana du jour avant confirmation.
|
||
|
||
Après ces 15 wrappers, `0.2.4` doit exécuter la **compliance finale de toute la surface HTTP** :
|
||
|
||
```text
|
||
52 current
|
||
14 historical Deprecated / Removed
|
||
52 wrappers typed courants
|
||
```
|
||
|
||
## 3. Gate de sizing obligatoire
|
||
|
||
Répondre explicitement à `pre.001` :
|
||
|
||
```text
|
||
Les 15 wrappers Blocks/Economics, leurs DTOs/wires, les overloads/legacy,
|
||
les tests, la compliance 52+14 et la documentation peuvent-ils être
|
||
clôturés proprement dans cette release/session ?
|
||
```
|
||
|
||
Si NON, scinder avant implémentation fonctionnelle lourde.
|
||
|
||
Une prerelease vise environ 15–20 minutes de travail effectif.
|
||
|
||
## 4. Sources internes obligatoires
|
||
|
||
Relire avant modification :
|
||
|
||
```text
|
||
ROADMAP.md
|
||
CHANGELOG.md
|
||
RULES.md
|
||
|
||
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
|
||
docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md
|
||
docs/plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md
|
||
docs/plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md
|
||
|
||
docs/validation/003-V0_2_1_ONCHAIN_HTTP.md
|
||
docs/validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md
|
||
docs/validation/005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md
|
||
docs/validation/006-V0_2_3_HTTP_TRANSACTIONS.md
|
||
|
||
docs/architecture/002-LAYERS_AND_DEPENDENCIES.md
|
||
docs/architecture/003-COMPONENT_CONTRACTS.md
|
||
docs/architecture/004-COMPONENT_INVENTORY.md
|
||
docs/architecture/005-DEPENDENCY_GRAPH.md
|
||
|
||
docs/rules/RULES_DEPENDENCIES.md
|
||
docs/rules/RULES_RUST.md
|
||
docs/rules/RULES_KSP.md
|
||
docs/rules/FILE_CONTRACTS.md
|
||
docs/rules/VERSION_WORKFLOW.md
|
||
docs/rules/PROMPT_STRUCTURE.md
|
||
|
||
crates/ksp-onchain-transport-lib/README.md
|
||
crates/ksp-onchain-transport-lib/USAGE.md
|
||
crates/ksp-onchain-transport-lib/src/
|
||
crates/ksp-onchain-transport-lib/unit_tests/
|
||
crates/ksp-onchain-transport-lib/tests/
|
||
```
|
||
|
||
Les deltas historiques ne sont pas réécrits.
|
||
|
||
## 5. Sources externes normatives
|
||
|
||
Au début de `pre.001`, réauditer :
|
||
|
||
```text
|
||
https://solana.com/docs/rpc/http
|
||
https://solana.com/docs/rpc/json-structures
|
||
```
|
||
|
||
Recouper avec les sources primaires Agave stables actuelles lorsque la documentation publique ne détaille pas une option, un overload, une limite ou un champ wire.
|
||
|
||
Ne pas supposer que `v4.2.1` est encore la référence au moment de l'ouverture de `0.2.4` : vérifier la génération Agave effectivement stable/recommandée ce jour-là.
|
||
|
||
## 6. Règle `KSP-TRANSPORT-007`
|
||
|
||
Pour **chaque** wrapper Blocks/Economics :
|
||
|
||
- couvrir tous les paramètres ordonnés ;
|
||
- couvrir tous les champs de config supportés ;
|
||
- conserver les overloads distincts ;
|
||
- conserver les formes legacy encore supportées, marquées deprecated si nécessaire ;
|
||
- appliquer avant I/O les contraintes déterministes connues lorsqu'elles n'exigent pas de décodage métier disproportionné ;
|
||
- préserver `null`, omissions significatives, ordre et cardinalités ;
|
||
- conserver losslessly les sous-arbres wire riches lorsque leur typage intégral créerait un couplage SDK inutile.
|
||
|
||
Une simplification volontaire n'est acceptable que si elle est explicitement justifiée et ne retire aucune capacité RPC.
|
||
|
||
## 7. Points sensibles Blocks
|
||
|
||
### `getBlock`
|
||
|
||
Auditer en priorité :
|
||
|
||
- config moderne complète ;
|
||
- forme bare encoding legacy si elle est toujours supportée ;
|
||
- encodings actuels ;
|
||
- transactionDetails ;
|
||
- rewards ;
|
||
- commitment autorisé ;
|
||
- maxSupportedTransactionVersion ;
|
||
- résultat `null` ;
|
||
- transaction/meta/version/rewards/blockTime/blockHeight/numRewardPartitions ;
|
||
- erreurs de version/non-disponibilité pertinentes.
|
||
|
||
La stratégie wire doit réutiliser les primitives Transaction de `0.2.3` lorsque pertinentes, sans copier `solana-rpc-client`.
|
||
|
||
### `getBlockCommitment`
|
||
|
||
Préserver commitment nullable et totalStake.
|
||
|
||
### `getBlockHeight`
|
||
|
||
Auditer config contextuelle et contraintes de commitment/minContextSlot.
|
||
|
||
### `getBlockProduction`
|
||
|
||
Auditer identity, range firstSlot/lastSlot, commitment et forme contextualisée.
|
||
|
||
### `getBlocks`
|
||
|
||
Vérifier les overloads actuels autour de start/end/config. Ne pas réduire la surface à la seule signature d'un client SDK.
|
||
|
||
### `getBlocksWithLimit`
|
||
|
||
Auditer start slot, limit, config et limite runtime éventuelle.
|
||
|
||
### `getBlockTime`
|
||
|
||
Préserver `i64|null` et les erreurs significatives.
|
||
|
||
### `getFirstAvailableBlock`
|
||
|
||
Pas de config si le contrat courant reste sans paramètre.
|
||
|
||
### `getRecentPerformanceSamples`
|
||
|
||
Auditer limite optionnelle/default/max et tous les champs de sample.
|
||
|
||
### `minimumLedgerSlot`
|
||
|
||
Pas de config si le contrat courant reste sans paramètre ; préserver les erreurs RPC runtime.
|
||
|
||
## 8. Points sensibles Economics
|
||
|
||
### `getInflationGovernor`
|
||
|
||
Auditer commitment éventuel et tous les champs governor.
|
||
|
||
### `getInflationRate`
|
||
|
||
Préserver total/validator/foundation/epoch.
|
||
|
||
### `getInflationReward`
|
||
|
||
Auditer :
|
||
|
||
- liste d'adresses et limite éventuelle ;
|
||
- epoch ;
|
||
- commitment ;
|
||
- minContextSlot ;
|
||
- ordre et `null` positionnels ;
|
||
- commission et extension runtime `commissionBps` si toujours supportée.
|
||
|
||
### `getStakeMinimumDelegation`
|
||
|
||
Auditer config contextuelle et résultat contextualisé.
|
||
|
||
### `getSupply`
|
||
|
||
Auditer commitment et `excludeNonCirculatingAccountsList`, puis total/circulating/nonCirculating/liste de comptes.
|
||
|
||
## 9. Architecture Transport
|
||
|
||
Conserver le flux unique :
|
||
|
||
```text
|
||
wrapper typed
|
||
-> descriptor central
|
||
-> execute_standard_rpc
|
||
-> pool/admission
|
||
-> executor HTTP
|
||
-> validation JSON-RPC
|
||
-> decode typed
|
||
```
|
||
|
||
Interdits :
|
||
|
||
```text
|
||
client HTTP parallèle
|
||
reqwest direct par wrapper
|
||
retry/deadline/admission bypass
|
||
Transport -> Config
|
||
Transport -> Store/Program
|
||
tracing direct
|
||
solana-rpc-client pour masquer les possibilités RPC
|
||
```
|
||
|
||
## 10. Réutilisation des wires
|
||
|
||
Réutiliser les contrats `0.2.1`–`0.2.3` lorsqu'ils représentent réellement le même wire :
|
||
|
||
- `SolanaCommitment` / configs contextuelles ;
|
||
- `SolanaRpcContext` / `SolanaRpcResponse<T>` ;
|
||
- Account encodings/types ;
|
||
- Transaction encodings/version/meta et `SolanaWireField<T>`.
|
||
|
||
Ne pas dédupliquer artificiellement des contrats qui ont des sémantiques différentes.
|
||
|
||
## 11. Tests déterministes
|
||
|
||
Pour chaque wrapper :
|
||
|
||
- request JSON exacte ;
|
||
- omission/config vide ;
|
||
- toutes options et overloads significatifs ;
|
||
- encodings ;
|
||
- success typed ;
|
||
- `null`/omitted ;
|
||
- ordre/cardinalité ;
|
||
- erreurs RPC ;
|
||
- limites avant I/O pertinentes.
|
||
|
||
Conserver les canaries acquises :
|
||
|
||
```text
|
||
52 current registry
|
||
14 historical
|
||
0.2.1 exact == 4
|
||
0.2.2 exact == 22
|
||
0.2.3 exact == 11
|
||
0.2.4 exact == 15
|
||
KSP-TRANSPORT-007 sur les 37 wrappers précédents
|
||
```
|
||
|
||
À la clôture `0.2.4`, ajouter la preuve finale :
|
||
|
||
```text
|
||
52/52 méthodes courantes couvertes par wrapper typed
|
||
14/14 historiques conservées pour compliance
|
||
```
|
||
|
||
## 12. Smokes live
|
||
|
||
Les smokes live restent opt-in et ne remplacent jamais les fixtures locales.
|
||
|
||
Le smoke Transport pur peut être étendu à quelques reads Blocks/Economics stables si cela apporte une vraie preuve sans dépendre d'un état Devnet fragile.
|
||
|
||
Éviter les écritures ou scénarios nécessitant des fonds/wallets dans la couche Transport seule.
|
||
|
||
Le smoke Config -> Transport reste transitoire et ne doit pas devenir la destination générale des scénarios cross-crates.
|
||
|
||
## 13. Dépendances
|
||
|
||
Ne pas ajouter une crate RPC/client Solana haut niveau.
|
||
|
||
Toute nouvelle dépendance doit :
|
||
|
||
- répondre à un besoin réel non couvert par les primitives existantes ;
|
||
- être déclarée sous `[workspace.dependencies]` ;
|
||
- respecter le firewall Transport ;
|
||
- être justifiée dans le delta/plan.
|
||
|
||
## 14. Dernière prerelease et publication
|
||
|
||
La dernière prerelease de `0.2.4` doit :
|
||
|
||
- réauditer une dernière fois l'inventaire courant/deprecated ;
|
||
- figer la compliance **52/52 + 14/14** ;
|
||
- synchroniser README/USAGE et matrices ;
|
||
- exécuter les smokes pertinents ;
|
||
- auditer les graphes de dépendances ;
|
||
- préparer le prompt `0.2.5 — Wallet foundation` ;
|
||
- laisser `CHANGELOG.md` à `rel.001`.
|
||
|
||
`0.2.4-rel.001` doit rester strictement publicationnelle.
|
||
|
||
## 15. Validations
|
||
|
||
Pendant le développement :
|
||
|
||
```bash
|
||
cargo fmt --all
|
||
cargo check --workspace
|
||
cargo clippy --workspace --all-targets
|
||
cargo test -p ksp-onchain-transport-lib
|
||
```
|
||
|
||
À la clôture :
|
||
|
||
```bash
|
||
cargo fmt --all
|
||
cargo check --workspace
|
||
cargo clippy --workspace --all-targets
|
||
cargo test -p ksp-onchain-transport-lib
|
||
cargo test -p ksp-config-lib
|
||
cargo test -p ksp-core-lib
|
||
cargo test -p ksp-app-config-desk
|
||
cargo test --workspace
|
||
|
||
cargo tree -p ksp-onchain-transport-lib
|
||
cargo tree -p ksp-onchain-transport-lib -d
|
||
cargo tree -p ksp-onchain-transport-lib -e features
|
||
cargo tree -p ksp-onchain-transport-lib -e normal
|
||
cargo tree -p ksp-config-lib
|
||
cargo tree -p ksp-config-lib -d
|
||
cargo tree -p ksp-config-lib -e features
|
||
cargo tree -p ksp-config-lib -e normal
|
||
|
||
cargo test -p ksp-onchain-transport-lib --test transport_devnet_smoke -- --ignored --nocapture
|
||
cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture
|
||
```
|
||
|
||
Ne jamais déclarer une commande réussie sans preuve opérateur ou exécution réelle.
|