403 lines
14 KiB
Markdown
403 lines
14 KiB
Markdown
<!-- file: deltas/0.2.4/pre.009.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta `0.2.4-pre.009` — clôture HTTP finale, compliance `52/52 + 14/14` et préparation Wallet
|
|
|
|
## Base requise
|
|
|
|
Livraison précédente validée :
|
|
|
|
```text
|
|
0.2.4-pre.008-fix.001
|
|
workspace.package.version = "0.2.4-pre.8.fix.1"
|
|
```
|
|
|
|
La validation locale fournie pour cette base est entièrement propre :
|
|
|
|
```text
|
|
cargo fmt --all -> terminé
|
|
cargo check --workspace -> terminé sans warning
|
|
cargo clippy --workspace --all-targets -> terminé sans warning
|
|
cargo test -p ksp-onchain-transport-lib -> 240 unit tests OK
|
|
26 public API tests OK
|
|
21 release-completeness tests OK
|
|
1 smoke Devnet ignoré comme prévu
|
|
0 échec
|
|
```
|
|
|
|
Cette base inclut donc le fix purement Clippy de `pre.008-fix.001` sans modification fonctionnelle de `getInflationReward`.
|
|
|
|
## Objectif
|
|
|
|
`pre.009` est la prerelease de clôture de la série HTTP commencée en `0.2.1`.
|
|
|
|
Elle ne doit ajouter aucun nouveau comportement RPC standard. Elle doit au contraire prouver et documenter que la surface acquise est complète et cohérente :
|
|
|
|
```text
|
|
52 méthodes HTTP courantes officielles
|
|
52 wrappers typed KSP correspondants
|
|
14 méthodes historiques Deprecated / runtime Removed
|
|
14 descriptors historiques KSP correspondants
|
|
partition typed : 4 foundation + 22 Accounts/Tokens/Cluster + 11 Transactions + 15 Blocks/Economics
|
|
```
|
|
|
|
Elle doit également :
|
|
|
|
- réauditer la référence HTTP officielle et les SIMDs susceptibles de modifier cette surface ;
|
|
- figer les canaries finales de présence, de classification et de frontières ;
|
|
- étendre le smoke Transport pur aux nouvelles familles Blocks/Economics ;
|
|
- publier le document de conformité final `0.2.4` ;
|
|
- mettre à jour les documents vivants de la série ;
|
|
- fournir le prompt de démarrage de `0.2.5 — Wallet foundation` ;
|
|
- préparer `rel.001`, qui devra rester strictement publicationnel.
|
|
|
|
## Version Cargo
|
|
|
|
Nouvelle prerelease technique :
|
|
|
|
```text
|
|
0.2.4-pre.8.fix.1 -> 0.2.4-pre.9
|
|
```
|
|
|
|
Aucune dépendance, feature Cargo ou frontière de crate n'est modifiée.
|
|
|
|
## Réaudit officiel final de la surface HTTP
|
|
|
|
Le réaudit de la référence Solana HTTP courante retrouve exactement les `52` méthodes enregistrées par KSP.
|
|
|
|
La comparaison est effectuée sur les noms, pas seulement sur un compteur :
|
|
|
|
```text
|
|
officiel courant - registre KSP = {}
|
|
registre KSP - officiel courant = {}
|
|
```
|
|
|
|
Les `14` méthodes historiques présentées dans la navigation Deprecated officielle correspondent également exactement au registre historique KSP :
|
|
|
|
```text
|
|
officiel Deprecated - historique KSP = {}
|
|
historique KSP - officiel Deprecated = {}
|
|
```
|
|
|
|
Aucun nouveau RPC HTTP standard n'est donc introduit dans la release à cette date.
|
|
|
|
La baseline runtime de contrat utilisée pendant `0.2.4` reste :
|
|
|
|
```text
|
|
Agave v4.2.1
|
|
```
|
|
|
|
La rollout Agave `v4.2` est en cours pendant cette clôture ; cette prerelease ne transforme pas un calendrier de déploiement en affirmation d'activation cluster-wide.
|
|
|
|
## Réaudit SIMD final
|
|
|
|
Les statuts upstream observés pendant la clôture sont :
|
|
|
|
| SIMD | Sujet lié au HTTP KSP | Statut courant | Conséquence pour `0.2.4` |
|
|
|--------|---------------------------------------------|---------------------|---------------------------------------------------------------------------|
|
|
| `0180` | leader schedule keyed by vote account | `Review` | aucune nouvelle méthode HTTP officielle ; conserver le wire stable audité |
|
|
| `0298` | `bank_hash` dans le block footer | `Idea` | ne pas ajouter `bankHash` spéculativement |
|
|
| `0301` | remplacement proposé par `parent_bank_hash` | PR fermé, non mergé | aucune surface KSP |
|
|
| `0307` | block footer + extension `getBlock` | `Review` | pas de `footer` dans le contrat stable `v4.2.1` |
|
|
| `0385` | transaction V1 | `Review` | conserver `SolanaTransactionVersion::Number(u8)` générique |
|
|
| `0490` | Stake Program v5 / minimum delegation | `Review` | valeur fournie par le runtime, jamais codée en dur |
|
|
| `0550` | double disinflation | `Review` | valeurs inflation runtime, aucune formule KSP |
|
|
| `0553` | base inclusion + resource fee | `Draft` | évolution économique/fee ; aucun nouveau wrapper HTTP stable |
|
|
|
|
Les extensions wire déjà acquises sont également réauditées pour éviter qu'une clôture centrée sur la watchlist n'en perde une :
|
|
|
|
| SIMD | Statut courant | Contrat KSP confirmé |
|
|
|-----------------------------------------------|----------------|----------------------------------------------------------------------------------------------------------|
|
|
| `0118` Partitioned Epoch Rewards Distribution | `Activated` | `numRewardPartitions` reste lossless en omitted/null/value ; aucune synthèse locale |
|
|
| `0291` Commission Rate in Basis Points | `Review` | `commission` et `commissionBps` restent indépendants dans les rewards ; aucun calcul de conversion local |
|
|
|
|
Le statut `Review` de SIMD-0291 ne retire pas le wire déjà livré par Agave `v4.2.1`. Le réaudit ne justifie donc aucune extension wire spéculative dans `pre.009` ni aucune suppression d'un champ stable déjà acquis.
|
|
|
|
## Canarie public API finale
|
|
|
|
`tests/public_api.rs` ajoute :
|
|
|
|
```text
|
|
public_v0_2_4_pre_009_all_52_current_typed_wrappers_and_legacy_forms_are_available_from_crate_root
|
|
```
|
|
|
|
Cette canarie référence les `52` wrappers typed des méthodes courantes via `HttpTransportPool`.
|
|
|
|
Elle référence aussi séparément les deux formes legacy de requête qui ne constituent pas des méthodes RPC supplémentaires :
|
|
|
|
```text
|
|
get_block_legacy
|
|
get_transaction_legacy
|
|
```
|
|
|
|
Le but est de détecter immédiatement une suppression ou une invisibilité accidentelle d'un wrapper public pendant les futures refactorisations.
|
|
|
|
## Canarie release-completeness finale
|
|
|
|
`tests/release_completeness.rs` ajoute :
|
|
|
|
```text
|
|
release_v0_2_4_pre_009_final_http_inventory_and_coverage_partition_are_exact
|
|
```
|
|
|
|
Elle fige explicitement :
|
|
|
|
```text
|
|
52 noms courants exacts
|
|
14 noms historiques exacts
|
|
4 méthodes Foundation
|
|
22 méthodes V0_2_2
|
|
11 méthodes V0_2_3
|
|
15 méthodes V0_2_4
|
|
```
|
|
|
|
Elle vérifie également les invariants de classification :
|
|
|
|
```text
|
|
courant -> runtime Supported, documentation non Deprecated
|
|
Read -> RetrySafe
|
|
Simulation -> RetrySafe
|
|
WriteSubmission -> NeverAfterDispatch
|
|
historique -> Deprecated + Removed + Historical + NotApplicable
|
|
```
|
|
|
|
Cette preuve complète les canaries `KSP-TRANSPORT-007` déjà acquises ; elle ne les remplace pas.
|
|
|
|
## Compliance `KSP-TRANSPORT-007`
|
|
|
|
Le document final :
|
|
|
|
```text
|
|
docs/validation/007-V0_2_4_HTTP_FINAL_COMPLIANCE.md
|
|
```
|
|
|
|
consolide la preuve `52/52` et les points sensibles accumulés depuis `0.2.1` :
|
|
|
|
- ordre et cardinalité des paramètres/réponses ;
|
|
- configs omises versus objets explicitement présents ;
|
|
- overloads modernes et historiques ;
|
|
- validations déterministes avant I/O ;
|
|
- préservation `omitted / null / value` ;
|
|
- listes positionnelles et ordre provider ;
|
|
- `getBlock` moderne + bare encoding legacy ;
|
|
- `transactionDetails` complet ;
|
|
- SIMD-0118 `numRewardPartitions` ;
|
|
- SIMD-0291 `commissionBps` ;
|
|
- version transaction numérique non nulle ;
|
|
- Economics runtime sans constantes locales inventées ;
|
|
- `getInflationReward` positionnel et cardinalité stricte.
|
|
|
|
## Smoke Transport pur final
|
|
|
|
Le smoke opt-in :
|
|
|
|
```text
|
|
crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs
|
|
```
|
|
|
|
reste :
|
|
|
|
- purement Transport ;
|
|
- settings construits programmatiquement ;
|
|
- read-only ;
|
|
- opt-in / ignoré par défaut ;
|
|
- indépendant de Config.
|
|
|
|
Il conserve les appels déjà présents Accounts/Tokens/Cluster/Transactions et ajoute trois appels peu fragiles :
|
|
|
|
```text
|
|
getBlockHeight(finalized)
|
|
getInflationRate()
|
|
getStakeMinimumDelegation(finalized)
|
|
```
|
|
|
|
Aucune valeur économique exacte n'est codée en dur. Le smoke vérifie uniquement des invariants de santé de réponse.
|
|
|
|
Le smoke de composition `Config -> Transport -> Devnet` reste une exception transitoire dans `ksp-config-lib` et doit toujours migrer vers une future surface dédiée d'intégration/orchestration/demo.
|
|
|
|
## Documentation finale `0.2.4`
|
|
|
|
Sont mis à jour :
|
|
|
|
```text
|
|
ROADMAP.md
|
|
crates/ksp-onchain-transport-lib/README.md
|
|
crates/ksp-onchain-transport-lib/USAGE.md
|
|
docs/000-README.md
|
|
docs/architecture/004-COMPONENT_INVENTORY.md
|
|
docs/plans/000-README.md
|
|
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
|
|
docs/plans/011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md
|
|
docs/validation/000-README.md
|
|
prompts/000-README.md
|
|
```
|
|
|
|
Le plan `011` passe en version `6` et enregistre le réaudit final sans modifier les contrats RPC déjà matérialisés.
|
|
|
|
Le raw RPC est désormais décrit comme une surface d'extension provider/diagnostic hors registre standard ; il ne constitue pas une alternative aux `52` wrappers typed standard.
|
|
|
|
`CHANGELOG.md` reste volontairement inchangé dans cette prerelease : la publication stable et son entrée finale appartiennent à `rel.001`.
|
|
|
|
## Document de validation final
|
|
|
|
Ajout :
|
|
|
|
```text
|
|
docs/validation/007-V0_2_4_HTTP_FINAL_COMPLIANCE.md
|
|
```
|
|
|
|
Ce document sert de point de contrôle avant `rel.001`. Il contient notamment :
|
|
|
|
- le réaudit officiel `52 + 14` ;
|
|
- la matrice des `52` méthodes courantes ;
|
|
- la matrice des `14` historiques ;
|
|
- la partition `4 / 22 / 11 / 15` ;
|
|
- le réaudit SIMD ;
|
|
- les contrats sensibles Blocks/Economics ;
|
|
- les commandes de validation immédiate et finale ;
|
|
- les audits `cargo tree` de frontières ;
|
|
- les deux smokes Devnet opt-in ;
|
|
- les conditions de passage à `rel.001`.
|
|
|
|
## Prompt `0.2.5 — Wallet foundation`
|
|
|
|
Ajout :
|
|
|
|
```text
|
|
prompts/010-V0_2_5_START_PROMPT.md
|
|
```
|
|
|
|
Le prompt impose une `0.2.5-pre.001` d'audit + brainstorming + sizing avant toute implémentation cryptographique lourde.
|
|
|
|
Il cadre notamment :
|
|
|
|
```text
|
|
ksp-wallet-lib
|
|
format natif versionné .kspwallet
|
|
Wallet -> Core/Logging + primitives crypto/key low-level seulement
|
|
Wallet -X-> Config/Transport/Store/Tauri/ExecutionPolicy
|
|
pas de crypto maison
|
|
pas de secret dans Config
|
|
pas de WalletPolicy dans 0.2.5
|
|
pas de Wallet Desk dans 0.2.5
|
|
```
|
|
|
|
La sélection du KDF, de l'AEAD, du CSPRNG et de la stratégie de secret en mémoire n'est pas préjugée : elle doit être auditée contre les primitives actuelles lors de `pre.001`.
|
|
|
|
Le prompt exige également les invariants de sécurité principaux : mauvais mot de passe, tampering, format inconnu/tronqué, redaction, absence de secret en clair, changement de mot de passe sans changement de keypair, persistence atomique/no-clobber et signature vérifiable.
|
|
|
|
## Fichiers modifiés
|
|
|
|
```text
|
|
Cargo.toml
|
|
ROADMAP.md
|
|
crates/ksp-onchain-transport-lib/README.md
|
|
crates/ksp-onchain-transport-lib/USAGE.md
|
|
crates/ksp-onchain-transport-lib/src/lib.rs
|
|
crates/ksp-onchain-transport-lib/tests/public_api.rs
|
|
crates/ksp-onchain-transport-lib/tests/release_completeness.rs
|
|
crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs
|
|
docs/000-README.md
|
|
docs/architecture/004-COMPONENT_INVENTORY.md
|
|
docs/plans/000-README.md
|
|
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
|
|
docs/plans/011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md
|
|
docs/validation/000-README.md
|
|
prompts/000-README.md
|
|
```
|
|
|
|
## Fichiers ajoutés
|
|
|
|
```text
|
|
docs/validation/007-V0_2_4_HTTP_FINAL_COMPLIANCE.md
|
|
prompts/010-V0_2_5_START_PROMPT.md
|
|
deltas/0.2.4/pre.009.md
|
|
```
|
|
|
|
Aucun fichier n'est supprimé.
|
|
|
|
## Validation immédiate attendue
|
|
|
|
Après application de l'overlay :
|
|
|
|
```bash
|
|
cargo fmt --all
|
|
cargo check --workspace
|
|
cargo clippy --workspace --all-targets
|
|
cargo test -p ksp-onchain-transport-lib
|
|
```
|
|
|
|
Compte attendu pour Transport :
|
|
|
|
```text
|
|
240 unit tests OK
|
|
27 public API tests OK
|
|
22 release-completeness tests OK
|
|
1 smoke Devnet ignoré comme prévu
|
|
0 échec
|
|
```
|
|
|
|
Le nombre de unit tests reste volontairement stable : `pre.009` ajoute des canaries d'intégration/public API et non une nouvelle logique RPC.
|
|
|
|
## Checkpoint final avant `rel.001`
|
|
|
|
Une fois la validation immédiate propre, exécuter aussi :
|
|
|
|
```bash
|
|
cargo test -p ksp-config-lib
|
|
cargo test -p ksp-core-lib
|
|
cargo test -p ksp-app-config-desk
|
|
cargo test --workspace
|
|
```
|
|
|
|
Audits de graphes :
|
|
|
|
```bash
|
|
cargo tree -p ksp-onchain-transport-lib -i ksp-config-lib
|
|
cargo tree -p ksp-onchain-transport-lib -i ksp-store-lib
|
|
cargo tree -p ksp-onchain-transport-lib -i ksp-program-lib
|
|
cargo tree -p ksp-onchain-transport-lib -i tracing
|
|
cargo tree -p ksp-config-lib -i ksp-onchain-transport-lib
|
|
cargo tree -p ksp-config-lib -i tracing
|
|
cargo tree -p ksp-onchain-transport-lib | grep -E 'solana-(client|rpc-client|rpc-client-api)'
|
|
cargo tree -p ksp-onchain-transport-lib | grep -E 'ksp-(config|store|program)'
|
|
```
|
|
|
|
Les commandes `cargo tree -i` qui signalent qu'un package n'existe pas dans le graphe sont acceptables lorsqu'elles démontrent précisément l'absence de dépendance recherchée ; le résultat doit être interprété et consigné, pas masqué. Pour `tracing`, une présence transitive sous `ksp-logging-lib` est conforme : l'interdit architectural porte sur une dépendance **directe** de Transport vers `tracing`, pas sur l'absence totale de `tracing` dans son graphe transitif.
|
|
|
|
Smokes réseau opt-in :
|
|
|
|
```bash
|
|
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
|
|
```
|
|
|
|
Le premier est le smoke Transport pur durable. Le second reste la composition transitoire `Config -> Transport` déjà documentée.
|
|
|
|
## Commit attendu
|
|
|
|
Après validation immédiate et checkpoint final propres :
|
|
|
|
```text
|
|
v0.2.4-pre.009
|
|
```
|
|
|
|
## Suite — `rel.001`
|
|
|
|
La livraison suivante doit être :
|
|
|
|
```text
|
|
0.2.4-rel.001
|
|
```
|
|
|
|
Elle doit être strictement publicationnelle :
|
|
|
|
- finaliser `CHANGELOG.md` et les statuts ROADMAP/documents de publication ;
|
|
- produire `deltas/0.2.4/rel.001.md` ;
|
|
- passer `workspace.package.version` de la prerelease candidate à `0.2.4` ;
|
|
- ne pas ajouter de wrapper, DTO, validation RPC ou comportement réseau ;
|
|
- rejouer les contrôles de publication nécessaires ;
|
|
- créer le tag stable `v0.2.4` après validation et commit de la release.
|
|
|
|
`0.2.5` ne commence qu'après cette publication stable.
|