6.0 KiB
Delta 0.1.3-pre.006
Base requise
Livraison précédente validée :
0.1.3-pre.005-fix.001
Version technique de cette base :
workspace.package.version = "0.1.3-pre.5.fix.1"
Cargo.toml header version = 46
Validations utilisateur exécutées le 2026-08-15 :
cargo fmt --all OK
cargo check --workspace OK
cargo clippy --workspace --all-targets OK
cargo test --workspace OK
cargo tree -p ksp-logging-lib OK
cargo tree -p ksp-logging-lib -d OK — aucune duplication
cargo tree -p ksp-logging-lib -e features OK
Le fix JSON de pre.005 est donc clos avant ouverture de cette tranche.
Objet de pre.006
Fermer la troisième dimension de routing déjà représentée par OutputFilter :
level
target
domain
domain reste un champ structuré indépendant du target. Cette tranche ne change pas les contrats Config et ne crée encore aucun document JSON Config.
Domain effectif
Le runtime applique la sémantique suivante :
- un event portant directement
domainutilise cette valeur ; - sinon l'event hérite du domain effectif de son span ;
- un span portant directement
domaindéfinit son domain effectif ; - un span sans
domainhérite du domain effectif de son parent au moment de sa création ; - un span enfant explicite peut donc remplacer le domain hérité ;
- les lifecycle events
NEW,ENTER,EXITetCLOSEutilisent le domain effectif du span concerné.
Un domain direct d'event ne modifie pas le domain mémorisé du span.
Routing par output
Le writer routé applique maintenant conjointement :
OutputFilter.level
OutputFilter.targets[]
OutputFilter.domains[]
Pour domains[] :
["*"]signifie aucune restriction et accepte aussi un event/span sans domain ;- un selector nommé correspond par préfixe ;
- un selector nommé ne correspond jamais à une entrée sans domain.
La politique globale existante reste distincte :
default_filter + TargetFilter[]
↓
DomainContextLayer + groupe de sinks
↓
OutputFilter level/target/domain de chaque sink
Aucune convention de pseudo-target domain n'est introduite.
Couche interne de contexte
DomainContextLayer est une couche privée de ksp-logging-lib installée avant les formatters lorsque le runtime possède au moins un output actif.
Elle :
- capture le champ
domaindes events et spans ; - conserve le domain effectif d'un span dans ses extensions runtime ;
- expose uniquement au routing interne le domain effectif correspondant au callback en cours ;
- conserve les champs originaux pour les formatters Human/Compact/Pretty/Json ;
- n'ajoute aucun type public et ne change pas la façade consommateur.
Le contexte courant utilisé par le routing reste interne au thread de dispatch Logging et n'est pas une variable globale Config/applicative.
Runtime préservé
Cette tranche conserve sans changement de contrat :
- subscriber global unique ;
- takeover des targets externes ;
- multi-sink ;
- formats Human/Compact/Pretty/Json ;
- ANSI console et stripping fichier ;
- writers non bloquants ;
- guards et compteurs par
output_id; - hot reload transactionnel ;
- comportement de saturation.
Le refus transitoire domains != ["*"] introduit en pre.005 est supprimé puisque la dimension domain est maintenant exécutée réellement.
Tests
Les tests unitaires couvrent :
- wildcard domain avec ou sans domain courant ;
- selector nommé absent sans domain ;
- correspondance par préfixe ;
- acceptation runtime d'un filtre domain spécifique.
Le test d'intégration global ajoute trois sinks simultanés :
file.domain.logging -> domains = ["logging"]
file.domain.store -> domains = ["store"]
file.domain.any -> domains = ["*"]
Il couvre :
- domain direct d'event ;
- event sans domain ;
- héritage depuis un span parent ;
- override direct d'event ;
- enfant sans domain ;
- enfant avec domain explicite ;
- lifecycle de spans Logging/Store ;
- maintien des compteurs à zéro dans le scénario nominal.
Dépendances
Aucune nouvelle dépendance et aucune nouvelle feature Cargo ne sont ajoutées.
ksp-logging-lib reste le seul propriétaire direct de la stack tracing* et ne dépend toujours pas de ksp-config-lib.
Plan
Les trois tranches Logging nécessaires avant le premier schema Config sont désormais fonctionnellement couvertes :
pre.004 contrats/settings multi-output
pre.005 runtime multi-sink + level/target/formats
pre.006 routing structuré domain
Après validation utilisateur de pre.006, la prochaine tranche est :
pre.007 JSON/JSON Schema + std.logging.json
Version technique
La prerelease devient :
workspace.package.version = "0.1.3-pre.6"
Cargo.toml header version = 47
Fichiers ajoutés
crates/ksp-logging-lib/src/domain.rs
crates/ksp-logging-lib/unit_tests/domain.rs
deltas/0.1.3/pre.006.md
Fichiers modifiés
Cargo.toml
crates/ksp-logging-lib/README.md
crates/ksp-logging-lib/TODO.md
crates/ksp-logging-lib/USAGE.md
crates/ksp-logging-lib/src/lib.rs
crates/ksp-logging-lib/src/runtime.rs
crates/ksp-logging-lib/src/writer.rs
crates/ksp-logging-lib/tests/runtime.rs
crates/ksp-logging-lib/unit_tests/runtime.rs
docs/plans/000-README.md
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
docs/plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md
Hors scope
Cette tranche ne modifie pas :
ksp-config-lib;- le registre
file_id; - JSON/JSON Schema ;
std.logging.json;- profils/composites ;
.envou les variables d'environnement ;- persistence Config.
Validations à exécuter
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test --workspace
cargo tree -p ksp-logging-lib
cargo tree -p ksp-logging-lib -d
cargo tree -p ksp-logging-lib -e features
Aucune validation Cargo n'est déclarée réussie tant qu'elle n'a pas été exécutée sur le workspace utilisateur.