v0.1.1-pre.003-fix.001
This commit is contained in:
@@ -1,18 +1,21 @@
|
||||
# file: Cargo.toml
|
||||
# version: 21
|
||||
# version: 22
|
||||
|
||||
[workspace]
|
||||
resolver = "3"
|
||||
members = ["crates/ksp-core-lib"]
|
||||
|
||||
[workspace.package]
|
||||
version = "0.1.1-pre.3"
|
||||
version = "0.1.1-pre.3.fix.1"
|
||||
edition = "2024"
|
||||
license = "MIT"
|
||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||
authors = ["SinuS von SifriduS <sinus@sasedev.net>"]
|
||||
publish = false
|
||||
|
||||
[workspace.dependencies]
|
||||
solana-pubkey = { version = "^4.3", default-features = false }
|
||||
|
||||
[workspace.lints.rust]
|
||||
missing_docs = "warn"
|
||||
unreachable_pub = "deny"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# file: crates/ksp-core-lib/Cargo.toml
|
||||
# version: 2
|
||||
# version: 3
|
||||
|
||||
[package]
|
||||
name = "ksp-core-lib"
|
||||
@@ -8,7 +8,7 @@ edition.workspace = true
|
||||
repository.workspace = true
|
||||
|
||||
[dependencies]
|
||||
solana-pubkey = { version = "4.3.0", default-features = false }
|
||||
solana-pubkey.workspace = true
|
||||
|
||||
[lints]
|
||||
workspace = true
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-core-lib/src/program_ids.rs
|
||||
// version: 1
|
||||
// version: 2
|
||||
|
||||
const DOMAIN_SOLANA: &str = "solana";
|
||||
const FAMILY_CONSENSUS: &str = "consensus";
|
||||
@@ -446,7 +446,9 @@ pub const fn entries() -> &'static [crate::ProgramIdEntry] {
|
||||
|
||||
/// Returns a lazy view of Program IDs matching all configured filter axes.
|
||||
pub fn program_ids<'a>(filter: crate::ProgramIdFilter<'a>) -> impl std::iter::Iterator<Item = &'static crate::ProgramIdEntry> + 'a {
|
||||
return PROGRAM_ID_ENTRIES.iter().filter(move |entry| filter.matches(entry));
|
||||
return PROGRAM_ID_ENTRIES.iter().filter(move |entry| {
|
||||
return filter.matches(entry);
|
||||
});
|
||||
}
|
||||
|
||||
/// Returns all Solana core/native Program IDs, including loaders, precompiles and enshrined programs.
|
||||
@@ -472,13 +474,17 @@ pub fn program_ids_by_protocol<'a>(protocol: &'a str) -> impl std::iter::Iterato
|
||||
/// Finds one registered Program ID by its canonical Base58 representation.
|
||||
#[must_use]
|
||||
pub fn find_program_id(program_id: &str) -> std::option::Option<&'static crate::ProgramIdEntry> {
|
||||
return PROGRAM_ID_ENTRIES.iter().find(|entry| entry.program_id() == program_id);
|
||||
return PROGRAM_ID_ENTRIES.iter().find(|entry| {
|
||||
return entry.program_id() == program_id;
|
||||
});
|
||||
}
|
||||
|
||||
/// Finds one registered Program ID by its typed Solana representation.
|
||||
#[must_use]
|
||||
pub fn find_program_pubkey(program_id: &crate::Pubkey) -> std::option::Option<&'static crate::ProgramIdEntry> {
|
||||
return PROGRAM_ID_ENTRIES.iter().find(|entry| entry.pubkey() == *program_id);
|
||||
return PROGRAM_ID_ENTRIES.iter().find(|entry| {
|
||||
return entry.pubkey() == *program_id;
|
||||
});
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
120
deltas/0.1.1/pre.003-fix.001.md
Normal file
120
deltas/0.1.1/pre.003-fix.001.md
Normal file
@@ -0,0 +1,120 @@
|
||||
<!-- file: deltas/0.1.1/pre.003-fix.001.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.1.1-pre.003-fix.001` — Cargo workspace + Clippy
|
||||
|
||||
## Statut
|
||||
|
||||
Correctif de `0.1.1-pre.003` après application et validation partielle de la tranche par le user.
|
||||
|
||||
Version technique du correctif :
|
||||
|
||||
```text
|
||||
workspace.package.version = "0.1.1-pre.3.fix.1"
|
||||
```
|
||||
|
||||
Le périmètre fonctionnel de `pre.003` ne change pas.
|
||||
|
||||
## Base et validations reçues
|
||||
|
||||
Sur `0.1.1-pre.3`, le user a exécuté avec succès :
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
cargo check --workspace
|
||||
cargo test --workspace
|
||||
cargo tree -p ksp-core-lib
|
||||
cargo tree -p ksp-core-lib -d
|
||||
```
|
||||
|
||||
Résultats communiqués :
|
||||
|
||||
- 14 tests unitaires passent ;
|
||||
- 3 tests d'intégration `public_api` passent ;
|
||||
- `cargo tree` résout `solana-pubkey 4.3.0` puis `solana-address 2.7.0` ;
|
||||
- `cargo tree -d` ne rapporte aucun doublon.
|
||||
|
||||
`cargo clippy --workspace --all-targets` échoue sur trois closures de `program_ids.rs` à cause de la règle workspace `clippy::implicit_return = deny`.
|
||||
|
||||
## Correction Cargo
|
||||
|
||||
La déclaration directe suivante dans `crates/ksp-core-lib/Cargo.toml` est supprimée :
|
||||
|
||||
```toml
|
||||
solana-pubkey = { version = "4.3.0", default-features = false }
|
||||
```
|
||||
|
||||
La dépendance appartient désormais au manifeste workspace :
|
||||
|
||||
```toml
|
||||
[workspace.dependencies]
|
||||
solana-pubkey = { version = "^4.3", default-features = false }
|
||||
```
|
||||
|
||||
La crate propriétaire la consomme uniquement par héritage :
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
solana-pubkey.workspace = true
|
||||
```
|
||||
|
||||
La contrainte `^4.3` exprime la génération compatible voulue par KSP ; le patch concret reste résolu par Cargo/lockfile.
|
||||
|
||||
## Règles ajoutées
|
||||
|
||||
`docs/rules/RULES_DEPENDENCIES.md` ajoute `DEP-CARGO-001` à `DEP-CARGO-005` afin de rendre obligatoire :
|
||||
|
||||
- la centralisation des dépendances externes sous `[workspace.dependencies]` ;
|
||||
- l'usage de `.workspace = true` dans les crates membres ;
|
||||
- la centralisation des contraintes de version et options communes ;
|
||||
- la convention de contrainte caret `^M.m` pour une génération majeure/mineure compatible ;
|
||||
- la distinction entre contrainte de manifeste et résolution concrète du lockfile.
|
||||
|
||||
## Correction Clippy
|
||||
|
||||
Les trois closures signalées utilisent maintenant un `return` explicite dans leur corps :
|
||||
|
||||
- filtre générique de `program_ids(...)` ;
|
||||
- recherche texte `find_program_id(...)` ;
|
||||
- recherche typée `find_program_pubkey(...)`.
|
||||
|
||||
Aucune signature ni sémantique de l'API publique ne change.
|
||||
|
||||
## Documentation
|
||||
|
||||
`docs/plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md` est aligné sur la nouvelle règle Cargo et documente la contrainte workspace `^4.3` au lieu d'une déclaration locale `4.3.0`.
|
||||
|
||||
## Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
crates/ksp-core-lib/Cargo.toml
|
||||
crates/ksp-core-lib/src/program_ids.rs
|
||||
docs/plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md
|
||||
docs/rules/RULES_DEPENDENCIES.md
|
||||
```
|
||||
|
||||
## Fichier ajouté
|
||||
|
||||
```text
|
||||
deltas/0.1.1/pre.003-fix.001.md
|
||||
```
|
||||
|
||||
## Validations de ce correctif
|
||||
|
||||
Non exécutées dans l'environnement de préparation du delta, qui ne fournit pas la toolchain Cargo/Rust du dépôt.
|
||||
|
||||
À exécuter après application :
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
cargo check --workspace
|
||||
cargo test --workspace
|
||||
cargo clippy --workspace --all-targets
|
||||
cargo tree -p ksp-core-lib
|
||||
cargo tree -p ksp-core-lib -d
|
||||
```
|
||||
|
||||
## Hors scope
|
||||
|
||||
Ce correctif n'ajoute ni Program ID, ni dépendance, ni primitive Core supplémentaire et ne démarre pas `0.1.1-pre.004`.
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md -->
|
||||
<!-- version: 6 -->
|
||||
<!-- version: 7 -->
|
||||
|
||||
# Plan KSP 0.1.1 — Core foundation
|
||||
|
||||
@@ -180,12 +180,12 @@ Décision pour `0.1.1` :
|
||||
|
||||
- conserver le vocabulaire/API KSP `Pubkey` déjà prévu par l'architecture ;
|
||||
- utiliser directement `solana-pubkey` comme dépendance propriétaire de `ksp-core-lib` ;
|
||||
- viser `4.3.0` comme génération de départ vérifiée ;
|
||||
- désactiver les default features tant qu'aucun besoin ne justifie `std` ou une feature optionnelle de cette crate ;
|
||||
- déclarer la génération retenue sous `[workspace.dependencies]` avec la contrainte explicite `^4.3`, la résolution auditée actuelle étant `4.3.0` ;
|
||||
- définir `default-features = false` au niveau workspace puis consommer la dépendance dans `ksp-core-lib` avec `solana-pubkey.workspace = true` ;
|
||||
- n'activer ni Borsh, ni Wincode, ni Serde, ni Rand, ni feature cryptographique par anticipation ;
|
||||
- réexporter le type `Pubkey` depuis `ksp_core_lib` afin que son utilisation fasse partie intentionnellement du contrat Core.
|
||||
|
||||
La dépendance exacte ne sera ajoutée qu'en `pre.003`, au moment où le code Program IDs en aura réellement besoin. La version officielle actuelle devra être revérifiée juste avant modification du manifeste si cette prerelease est réalisée à une date ultérieure.
|
||||
Depuis `pre.003-fix.001`, la règle générale KSP impose la centralisation des dépendances externes sous `[workspace.dependencies]` et l'héritage `.workspace = true` dans les crates membres. La résolution Cargo observée pour la contrainte `^4.3` reste `solana-pubkey 4.3.0` au moment de cette tranche.
|
||||
|
||||
### `solana-address`
|
||||
|
||||
@@ -608,7 +608,7 @@ Objectifs :
|
||||
|
||||
- revérifier les versions Solana/Anza au jour de l'implémentation ;
|
||||
- vérifier la toolchain observée par rapport au MSRV de la génération retenue ;
|
||||
- ajouter `solana-pubkey` uniquement au propriétaire `ksp-core-lib` ;
|
||||
- déclarer `solana-pubkey = { version = "^4.3", default-features = false }` sous `[workspace.dependencies]` et la consommer uniquement dans le propriétaire `ksp-core-lib` avec `solana-pubkey.workspace = true` ;
|
||||
- réexporter `Pubkey` ;
|
||||
- implémenter `declare_program_id!` et la paire `PRGID_*` / `PRGIDPK_*` ;
|
||||
- finaliser à 18 l'inventaire des Program IDs fondamentaux à partir des sources officielles actuelles ;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/rules/RULES_DEPENDENCIES.md -->
|
||||
<!-- version: 7 -->
|
||||
<!-- version: 8 -->
|
||||
|
||||
# Règles des dépendances KSP
|
||||
|
||||
@@ -23,6 +23,14 @@ Elles complètent les règles Rust générales et le graphe de `docs/architectur
|
||||
- **DEP-KSP-004** — Aucun `ksp-data-api` global n'est introduit uniquement pour éviter des conversions explicites entre modèles appartenant à des responsabilités différentes.
|
||||
- **DEP-KSP-005** — Une dépendance autorisée par le graphe n'est ajoutée au manifeste que lorsqu'un usage réel la justifie.
|
||||
|
||||
## Déclaration Cargo et centralisation workspace
|
||||
|
||||
- **DEP-CARGO-001** — Toute dépendance externe utilisée par une crate membre du workspace est déclarée une seule fois dans le `Cargo.toml` racine sous `[workspace.dependencies]`.
|
||||
- **DEP-CARGO-002** — Une crate membre consomme une dépendance centralisée avec `<dependency>.workspace = true` et ne redéclare pas localement sa version.
|
||||
- **DEP-CARGO-003** — Les options communes de résolution telles que `default-features` et la contrainte de version sont définies au niveau `[workspace.dependencies]`. Une crate membre n'ajoute localement que des features réellement propres à son usage lorsqu'elles sont nécessaires et compatibles avec l'héritage Cargo.
|
||||
- **DEP-CARGO-004** — Lorsqu'une génération majeure/mineure compatible est retenue, KSP exprime explicitement l'intention sous forme caret `^M.m` (par exemple `^4.3`) plutôt qu'avec une écriture patch telle que `4.3.0`. Même si Cargo interprète aussi par défaut cette dernière comme une contrainte compatible caret, KSP normalise la syntaxe pour rendre l'intention manifeste. Un pin exact `=M.m.p` ou un bornage différent requiert une justification explicite.
|
||||
- **DEP-CARGO-005** — Le `Cargo.lock` résout la version patch concrète à l'intérieur de la contrainte du workspace ; cette résolution ne remplace pas la politique de version déclarée dans le manifeste racine.
|
||||
|
||||
## Codecs wire et cohérence des versions
|
||||
|
||||
- **DEP-WIRE-001** — Pour les surfaces wire officielles KSP, les dépendances directes vers `borsh`, `wincode` ou codecs équivalents appartiennent normalement à `ksp-interface-lib`.
|
||||
|
||||
Reference in New Issue
Block a user