From 598474438b9d6ddd417b755da4767a81a1f8cc7d Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Mon, 17 Aug 2026 21:16:26 +0200 Subject: [PATCH] v0.2.1-pre.006-fix.001 --- Cargo.toml | 4 +- config/std.logging.json | 21 +++ .../unit_tests/profiles.rs | 20 ++- deltas/0.2.1/pre.006-fix.001.md | 121 ++++++++++++++++++ docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md | 4 +- docs/rules/RULES_DEPENDENCIES.md | 3 +- 6 files changed, 162 insertions(+), 11 deletions(-) create mode 100644 deltas/0.2.1/pre.006-fix.001.md diff --git a/Cargo.toml b/Cargo.toml index 7227123..5066a03 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 105 +# version: 106 [workspace] resolver = "3" members = ["crates/ksp-app-config-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib"] [workspace.package] -version = "0.2.1-pre.6" +version = "0.2.1-pre.6.fix.1" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/config/std.logging.json b/config/std.logging.json index 3776633..ab9cce4 100644 --- a/config/std.logging.json +++ b/config/std.logging.json @@ -40,6 +40,23 @@ ] } }, + { + "output_id": "file.onchain_transport.debug", + "enabled": true, + "path": "transport/onchain/ksp-onchain-transport-debug.log", + "rotation": "daily", + "format": "human", + "ansi": false, + "filter": { + "level": "debug", + "targets": [ + "ksp-onchain-transport-lib" + ], + "domains": [ + "*" + ] + } + }, { "output_id": "file.config.error", "enabled": true, @@ -70,6 +87,10 @@ { "target_prefix": "ksp-app-config-desk", "level": "info" + }, + { + "target_prefix": "ksp-onchain-transport-lib", + "level": "debug" } ] } diff --git a/crates/ksp-app-config-desk/unit_tests/profiles.rs b/crates/ksp-app-config-desk/unit_tests/profiles.rs index 00a4582..3634ef5 100644 --- a/crates/ksp-app-config-desk/unit_tests/profiles.rs +++ b/crates/ksp-app-config-desk/unit_tests/profiles.rs @@ -1,20 +1,26 @@ // file: crates/ksp-app-config-desk/unit_tests/profiles.rs -// version: 2 +// version: 3 #[test] -fn profile_inventory_exposes_logging_default_and_available_profiles() { +fn profile_inventory_exposes_registered_standard_profile_documents() { let management = fixture_management(); assert!(management.is_ok(), "fixture management should construct: {management:?}"); if let std::result::Result::Ok(management) = management { let inventory = super::inventory_from_management(&management); assert!(inventory.is_ok(), "profile inventory should resolve: {inventory:?}"); if let std::result::Result::Ok(inventory) = inventory { - assert_eq!(inventory.len(), 1); - assert_eq!(inventory[0].file_id, ksp_config_lib::FILE_ID_STD_LOGGING); - assert!(!inventory[0].default_profile.is_empty()); - assert!(inventory[0].profile_ids.iter().any(|profile_id| { - return profile_id == &inventory[0].default_profile; + assert!(inventory.iter().any(|document| -> bool { + return document.file_id == ksp_config_lib::FILE_ID_STD_LOGGING; })); + assert!(inventory.iter().any(|document| -> bool { + return document.file_id == ksp_config_lib::FILE_ID_STD_TRANSPORT; + })); + for document in inventory { + assert!(!document.default_profile.is_empty()); + assert!(document.profile_ids.iter().any(|profile_id| -> bool { + return profile_id == &document.default_profile; + })); + } } } } diff --git a/deltas/0.2.1/pre.006-fix.001.md b/deltas/0.2.1/pre.006-fix.001.md new file mode 100644 index 0000000..e88ebaf --- /dev/null +++ b/deltas/0.2.1/pre.006-fix.001.md @@ -0,0 +1,121 @@ + + + +# `0.2.1-pre.006-fix.001` — inventaire Config Desk et routing debug Transport ciblé + +## Base + +Base attendue : + +```text +v0.2.1-pre.006 +``` + +La validation utilisateur de `pre.006` a confirmé : + +- `cargo fmt --all` propre ; +- `cargo check --workspace` propre ; +- `cargo clippy --workspace --all-targets` propre ; +- `cargo test -p ksp-config-lib` : 95 unit tests + 5 ownership + 13 public API, propres ; +- `cargo test -p ksp-onchain-transport-lib` : 70 unit tests + 8 public API, propres ; +- `cargo test -p ksp-core-lib` : 14 unit tests + 3 public API + 2 workspace dependencies + 1 workspace logging, propres ; +- `cargo test --workspace` échoue uniquement sur `ksp-app-config-desk::profiles::tests::profile_inventory_exposes_logging_default_and_available_profiles`, qui attend encore un seul document profilé alors que `cfg.std.transport` est désormais le second ; +- les audits `cargo tree` Config montrent la dépendance interne attendue `ksp-config-lib -> ksp-onchain-transport-lib`, sans nouvelle dépendance externe volontaire ; le doublon `syn 2/3` reste transitif. + +## Problème 1 — inventaire Profils Config Desk + +Le panneau Profils est volontairement générique et parcourt les documents Config enregistrés qui exposent `default_profile` / `profiles`. Le test historique supposait cependant que seul `cfg.std.logging` possédait ce contrat et imposait `inventory.len() == 1`. + +`pre.006` ajoute légitimement `cfg.std.transport`, donc cette assertion est devenue obsolète alors que l'implémentation runtime se comporte correctement. + +### Correction + +Le test devient `profile_inventory_exposes_registered_standard_profile_documents` et vérifie : + +- présence de `cfg.std.logging` ; +- présence de `cfg.std.transport` ; +- pour chaque document retourné, `default_profile` est non vide et appartient à `profile_ids`. + +Le test ne fige plus le nombre total de documents profilés, afin que l'ajout futur d'un autre document standard ne provoque pas la même régression artificielle. + +## Problème 2 — verbosité Transport pendant le développement actif + +Le target `ksp-onchain-transport-lib` est désormais explicite et stable. Pendant le développement actif de `0.2.1`, ses événements `debug` doivent pouvoir être inspectés sans relever toute la configuration Logging au niveau `debug`. + +La solution retenue utilise la granularité déjà possédée par `ksp-logging-lib` : + +```text +default_filter = warn +console.filter.level = info +file.all.info = info +ksp-config-lib = info +ksp-logging-lib = info +ksp-app-config-desk = info +ksp-onchain-transport-lib = debug +file.onchain_transport.debug = debug / target ksp-onchain-transport-lib uniquement +``` + +Nouveau sink canonique : + +```text +output_id = file.onchain_transport.debug +path = transport/onchain/ksp-onchain-transport-debug.log +level = debug +targets = [ksp-onchain-transport-lib] +domains = [*] +``` + +Le `target_filter` Transport à `debug` autorise ces événements au niveau du takeover global. Les filtres de sortie maintiennent cependant la console et `file.all.info` à `info`; les événements Transport `debug` sont donc persistés uniquement dans le fichier dédié. + +Aucun profil global `debug` n'est ajouté : cette option produirait inutilement davantage d'événements pour les autres crates. + +## Règle Logging + +Ajout de `DEP-LOG-012` : lorsqu'une seule crate/target nécessite temporairement `debug`/`trace`, KSP privilégie un `target_filter` ciblé et un sink dédié plutôt qu'un relèvement global du profil. + +Cette règle complète `KSP-APP-031` : la verbosité élevée reste temporaire pendant le développement/correctif de la crate concernée. La tranche finale `pre.007` doit réévaluer le niveau Transport et le ramener à `info`/`warn` avant la stable, sauf justification opératoire explicite. + +Le plan actif `008` est synchronisé avec cette décision. + +## Version + +`workspace.package.version` passe à : + +```text +0.2.1-pre.6.fix.1 +``` + +Le fix touche un test Rust participant au workspace et la configuration runtime Logging canonique ; le signal Cargo est donc incrémenté. + +## Fichiers modifiés + +```text +Cargo.toml +config/std.logging.json +crates/ksp-app-config-desk/unit_tests/profiles.rs +docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md +docs/rules/RULES_DEPENDENCIES.md +``` + +## Fichier ajouté + +```text +deltas/0.2.1/pre.006-fix.001.md +``` + +`ROADMAP.md`, `pre.006.md` et les deltas historiques restent inchangés. + +## Validation requise après application + +```bash +cargo fmt --all +cargo check --workspace +cargo clippy --workspace --all-targets +cargo test -p ksp-app-config-desk +cargo test -p ksp-config-lib +cargo test -p ksp-onchain-transport-lib +cargo test -p ksp-core-lib +cargo test --workspace +``` + +Aucun `cargo tree` supplémentaire n'est requis pour ce fix : aucune dépendance ni feature n'est modifiée. diff --git a/docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md b/docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md index 797aa12..185fb25 100644 --- a/docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md +++ b/docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md @@ -1,5 +1,5 @@ - + # `0.2.1-pre.001` — plan `ksp-onchain-transport-lib` HTTP Solana foundation @@ -766,6 +766,8 @@ Interdits par défaut : Les erreurs `reqwest` utiles sont remappées/réémises via `ksp-logging-lib`; aucun target externe n'est activé globalement par Transport. +Pendant le développement actif de `0.2.1`, `std.logging.json` conserve sa baseline générale à `info` mais autorise `debug` uniquement pour `ksp-onchain-transport-lib` et route ces événements vers un fichier dédié `transport/onchain/ksp-onchain-transport-debug.log`. La console et `file.all.info` restent à `info`. Ce routage ciblé suit `DEP-LOG-012` et évite de placer tout le profil en `debug`. Conformément à `KSP-APP-031`, la dernière tranche de clôture réévalue cette verbosité et la ramène à `info`/`warn` avant la stable, sauf justification opératoire explicite. + ## 19. Architecture de tests ### 19.1 Unit tests diff --git a/docs/rules/RULES_DEPENDENCIES.md b/docs/rules/RULES_DEPENDENCIES.md index fcde9a0..2c435c8 100644 --- a/docs/rules/RULES_DEPENDENCIES.md +++ b/docs/rules/RULES_DEPENDENCIES.md @@ -1,5 +1,5 @@ - + # Règles des dépendances KSP @@ -56,6 +56,7 @@ Elles complètent les règles Rust générales et le graphe de `docs/architectur - **DEP-LOG-009** — Tout bridge `tracing` public mais caché de la documentation rendu techniquement nécessaire par l’expansion des macros de `ksp-logging-lib` est un détail d’implémentation réservé à ces macros ; une crate consommatrice ne l’utilise jamais directement et reste limitée à la façade KSP documentée. - **DEP-LOG-010** — Toute crate KSP comportementale qui émet des événements/spans via `ksp-logging-lib` possède un target principal explicite `pub(crate) const TRACING_TARGET: &str` dans `src/constants.rs`, égal au nom Cargo de la crate. Les appels utilisent ce symbole (ou un target spécialisé possédé par le même `constants.rs`) plutôt qu’un littéral dispersé. - **DEP-LOG-011** — `env!("CARGO_PKG_NAME")` ne sert pas de target de tracing/logging KSP : le target appartient au contrat d’observabilité et doit rester explicite dans le code. Les metadata Cargo restent autorisées lorsqu’elles sont réellement la donnée recherchée, par exemple pour un User-Agent ou une information de build. +- **DEP-LOG-012** — Lorsqu’une seule crate/target KSP nécessite temporairement une verbosité `debug` ou `trace`, le profil Logging général n’est pas relevé par défaut : un `target_filter` autorise cette verbosité uniquement pour le target concerné et un sink dédié la route avec son propre `OutputFilter`. Les sinks généraux peuvent ainsi rester à `info`/`warn`. Un relèvement global du profil n’est retenu que lorsqu’un diagnostic transversal le justifie explicitement. ## Program / Execution