diff --git a/Cargo.toml b/Cargo.toml index 8f013d8..c405a69 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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 "] publish = false +[workspace.dependencies] +solana-pubkey = { version = "^4.3", default-features = false } + [workspace.lints.rust] missing_docs = "warn" unreachable_pub = "deny" diff --git a/crates/ksp-core-lib/Cargo.toml b/crates/ksp-core-lib/Cargo.toml index 6210381..ea50a0a 100644 --- a/crates/ksp-core-lib/Cargo.toml +++ b/crates/ksp-core-lib/Cargo.toml @@ -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 diff --git a/crates/ksp-core-lib/src/program_ids.rs b/crates/ksp-core-lib/src/program_ids.rs index 8beec38..ad8f4ce 100644 --- a/crates/ksp-core-lib/src/program_ids.rs +++ b/crates/ksp-core-lib/src/program_ids.rs @@ -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 + '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)] diff --git a/deltas/0.1.1/pre.003-fix.001.md b/deltas/0.1.1/pre.003-fix.001.md new file mode 100644 index 0000000..c93edea --- /dev/null +++ b/deltas/0.1.1/pre.003-fix.001.md @@ -0,0 +1,120 @@ + + + +# 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`. diff --git a/docs/plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md b/docs/plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md index 3bb1894..3a0cab0 100644 --- a/docs/plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md +++ b/docs/plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md @@ -1,5 +1,5 @@ - + # 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 ; diff --git a/docs/rules/RULES_DEPENDENCIES.md b/docs/rules/RULES_DEPENDENCIES.md index 0c19c60..7142072 100644 --- a/docs/rules/RULES_DEPENDENCIES.md +++ b/docs/rules/RULES_DEPENDENCIES.md @@ -1,5 +1,5 @@ - + # 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 `.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`.