v0.1.2-pre.004-fix.002
This commit is contained in:
135
deltas/0.1.2/pre.004-fix.002.md
Normal file
135
deltas/0.1.2/pre.004-fix.002.md
Normal file
@@ -0,0 +1,135 @@
|
||||
<!-- file: deltas/0.1.2/pre.004-fix.002.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta 0.1.2-pre.004-fix.002
|
||||
|
||||
## Base requise
|
||||
|
||||
Livraison précédente :
|
||||
|
||||
```text
|
||||
0.1.2-pre.004-fix.001
|
||||
```
|
||||
|
||||
La base porte :
|
||||
|
||||
```text
|
||||
workspace.package.version = "0.1.2-pre.4.fix.1"
|
||||
Cargo.toml header version = 32
|
||||
```
|
||||
|
||||
## Validation remontée
|
||||
|
||||
Après application de `pre.004-fix.001`, un rebuild propre a donné :
|
||||
|
||||
```text
|
||||
cargo clean OK
|
||||
cargo fmt --all OK
|
||||
cargo check --workspace OK
|
||||
cargo clippy --workspace --all-targets OK
|
||||
cargo test --workspace ECHEC
|
||||
```
|
||||
|
||||
Tous les tests sauf le test runtime global passent encore. L'échec reste strictement identique :
|
||||
|
||||
```text
|
||||
assertion failed: file_text.contains("file output marker")
|
||||
```
|
||||
|
||||
La reproduction après `cargo clean` invalide donc l'hypothèse selon laquelle cet échec précis provenait de l'ordre de destruction corrigé par `pre.004-fix.001`. Ce lifecycle explicite est néanmoins conservé.
|
||||
|
||||
## Cause réelle
|
||||
|
||||
`tracing-subscriber 0.3.23` active par défaut la sanitization ANSI des valeurs dans `fmt::Layer`. Cette protection intervient pendant le formatage, donc avant l'appel au `MakeWriter`.
|
||||
|
||||
Le sink fichier KSP était composé comme suit :
|
||||
|
||||
```text
|
||||
value containing ESC
|
||||
-> fmt::Layer ANSI sanitization
|
||||
-> NonBlocking
|
||||
-> StripAnsiWriter
|
||||
-> RollingFileAppender
|
||||
```
|
||||
|
||||
Le `StripAnsiWriter` KSP ne recevait donc plus les octets ESC originaux à supprimer. Le test attend volontairement que :
|
||||
|
||||
```text
|
||||
file ESC[31moutput ESC[0m marker
|
||||
```
|
||||
|
||||
devienne dans le fichier :
|
||||
|
||||
```text
|
||||
file output marker
|
||||
```
|
||||
|
||||
La sanitization native et le stripping KSP sont deux politiques différentes : KSP veut supprimer les contrôles du fichier, pas les transformer avant son propre writer.
|
||||
|
||||
## Correction
|
||||
|
||||
Le runtime distingue désormais la politique du formatter selon le sink :
|
||||
|
||||
```text
|
||||
console
|
||||
fmt::Layer.with_ansi(false)
|
||||
fmt::Layer.with_ansi_sanitization(true)
|
||||
-> NonBlocking console
|
||||
|
||||
file
|
||||
fmt::Layer.with_ansi(false)
|
||||
fmt::Layer.with_ansi_sanitization(false)
|
||||
-> NonBlocking
|
||||
-> StripAnsiWriter
|
||||
-> RollingFileAppender
|
||||
```
|
||||
|
||||
La console conserve donc la protection native de `tracing-subscriber`. Le fichier laisse passer jusqu'au worker les séquences présentes dans les valeurs afin que `StripAnsiWriter` les supprime avant persistence.
|
||||
|
||||
Le stripping reste hors du hot path : il est toujours exécuté derrière la queue non bloquante.
|
||||
|
||||
Le test d'intégration runtime reste inchangé. Il continue à vérifier :
|
||||
|
||||
- l'émission fichier après hot reload ;
|
||||
- le retrait immédiat du sink et son drain ;
|
||||
- la présence du target et du callsite ;
|
||||
- l'absence de séquences ANSI ;
|
||||
- le silence des targets externes.
|
||||
|
||||
## Version technique
|
||||
|
||||
Ce correctif modifie du Rust. La version workspace devient :
|
||||
|
||||
```text
|
||||
workspace.package.version = "0.1.2-pre.4.fix.2"
|
||||
```
|
||||
|
||||
et l'en-tête du `Cargo.toml` racine devient :
|
||||
|
||||
```text
|
||||
# version: 33
|
||||
```
|
||||
|
||||
## Fichiers du delta
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
crates/ksp-logging-lib/src/runtime.rs
|
||||
docs/plans/004-V0_1_2_LOGGING_FOUNDATION_PLAN.md
|
||||
deltas/0.1.2/pre.004-fix.002.md
|
||||
```
|
||||
|
||||
## Validations à exécuter
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets
|
||||
cargo test --workspace
|
||||
```
|
||||
|
||||
Si ces validations sont propres, la tranche suivante reste :
|
||||
|
||||
```text
|
||||
0.1.2-pre.005 — intégration + concurrence + saturation + audits
|
||||
```
|
||||
Reference in New Issue
Block a user