v0.2.1-pre.006-fix.001
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
# file: Cargo.toml
|
# file: Cargo.toml
|
||||||
# version: 105
|
# version: 106
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
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"]
|
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]
|
[workspace.package]
|
||||||
version = "0.2.1-pre.6"
|
version = "0.2.1-pre.6.fix.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||||
|
|||||||
@@ -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",
|
"output_id": "file.config.error",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
@@ -70,6 +87,10 @@
|
|||||||
{
|
{
|
||||||
"target_prefix": "ksp-app-config-desk",
|
"target_prefix": "ksp-app-config-desk",
|
||||||
"level": "info"
|
"level": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target_prefix": "ksp-onchain-transport-lib",
|
||||||
|
"level": "debug"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,26 @@
|
|||||||
// file: crates/ksp-app-config-desk/unit_tests/profiles.rs
|
// file: crates/ksp-app-config-desk/unit_tests/profiles.rs
|
||||||
// version: 2
|
// version: 3
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn profile_inventory_exposes_logging_default_and_available_profiles() {
|
fn profile_inventory_exposes_registered_standard_profile_documents() {
|
||||||
let management = fixture_management();
|
let management = fixture_management();
|
||||||
assert!(management.is_ok(), "fixture management should construct: {management:?}");
|
assert!(management.is_ok(), "fixture management should construct: {management:?}");
|
||||||
if let std::result::Result::Ok(management) = management {
|
if let std::result::Result::Ok(management) = management {
|
||||||
let inventory = super::inventory_from_management(&management);
|
let inventory = super::inventory_from_management(&management);
|
||||||
assert!(inventory.is_ok(), "profile inventory should resolve: {inventory:?}");
|
assert!(inventory.is_ok(), "profile inventory should resolve: {inventory:?}");
|
||||||
if let std::result::Result::Ok(inventory) = inventory {
|
if let std::result::Result::Ok(inventory) = inventory {
|
||||||
assert_eq!(inventory.len(), 1);
|
assert!(inventory.iter().any(|document| -> bool {
|
||||||
assert_eq!(inventory[0].file_id, ksp_config_lib::FILE_ID_STD_LOGGING);
|
return document.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_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;
|
||||||
|
}));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
121
deltas/0.2.1/pre.006-fix.001.md
Normal file
121
deltas/0.2.1/pre.006-fix.001.md
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
<!-- file: deltas/0.2.1/pre.006-fix.001.md -->
|
||||||
|
<!-- version: 1 -->
|
||||||
|
|
||||||
|
# `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.
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md -->
|
<!-- file: docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md -->
|
||||||
<!-- version: 8 -->
|
<!-- version: 9 -->
|
||||||
|
|
||||||
# `0.2.1-pre.001` — plan `ksp-onchain-transport-lib` HTTP Solana foundation
|
# `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.
|
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. Architecture de tests
|
||||||
|
|
||||||
### 19.1 Unit tests
|
### 19.1 Unit tests
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: docs/rules/RULES_DEPENDENCIES.md -->
|
<!-- file: docs/rules/RULES_DEPENDENCIES.md -->
|
||||||
<!-- version: 15 -->
|
<!-- version: 16 -->
|
||||||
|
|
||||||
# Règles des dépendances KSP
|
# 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-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-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-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
|
## Program / Execution
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user