Files
Jérôme Bousquié 1ab7268373 bruit de construction : 124 avertissements à 0, et deux tests qui ne tournaient pas
Mesure d'ouverture : `cargo check --workspace --all-targets` avec les features du
harnais rendait **124 avertissements**. Mesure de fermeture : **0**. Le harnais
honnête passe de 1015 à **1016 tests, 0 échec, 0 skip, 0 doc-test ignoré, 0
diagnostic rustdoc, 0 diagnostic sur les exemples**.

Ce que le bruit cachait, dans l'ordre de coût :

1. **Deux tests n'étaient pas des tests.** `log_depth_helpers_are_identical_across_shaders`
   (`lib/tests/wgsl_validate.rs`) et
   `f11_gpu_radix_sort_is_unstable_only_when_buckets_collide` (`lib/src/core/particles.rs`)
   étaient des fonctions en forme de test **sans `#[test]`** — donc jamais exécutées, alors
   qu'`AGENTS.md` cite la première comme garante de l'identité des quatre copies du helper
   `log_depth_encode`. Cause mesurée de la première : un doc-comment **détaché** de sa
   signature (6.36 rejoué) — le `#[test]` qui le suivait s'était collé sur la fonction
   d'à côté. Les deux tests, une fois attribués, **passent** : la garantie est vraie,
   mais elle n'était pas tenue.
2. **Et le total comptait un test deux fois.** L'attribut `#[test]` dupliqué faisait
   enregistrer `normal_matrix_helpers_are_identical_across_shaders` **deux fois** dans la
   liste du harnais (vérifié par `-- --list` : 49 avant, 49 après — un vrai gagné, un
   doublon retiré). Un total qui a l'air complet (13.1), version enregistrement du harness.
3. **`state_and_link` n'était pas un fossile : c'est l'auxiliaire partagé que personne
   n'appelait.** `roadmap_consistency` refaisait la coupe de la cinquième cellule à la main
   (`split(LINK_MARKER).next()`), exactement le gotcha 6.7 qu'`shared/falsifiable.rs` existe
   pour empêcher. La coupe est devenue `shared::etat`, câblée sur son unique lecteur.
4. **Six `Result` jetés dans des verrous.** `add_material`, `set_batch_sort_depth`,
   `set_material_color` : ignorés, ils laissaient un verrou mesurer une scène amputée de sa
   jambe (13.9 — un verrou qui jette une valeur est un décor). Chacun porte désormais un
   `expect` qui nomme ce que le refus détruirait de la mesure.
5. **`glam` : remplacement mesuré, pas supposé.** `look_at_rh` ≡
   `camera::rh::view::look_at_mat4` à **0 bit près** sur cinq configurations ;
   `perspective_rh` vs `camera::rh::proj::directx::perspective` garde la même convention
   (`ndc.z(near)=0`, `ndc.z(far)=1`) mais diffère de **1,19e-7** (arrondi, pas formule) —
   chiffre consigné au site d'appel plutôt que présenté comme une égalité.
6. **Fossiles retirés** (`luma`, `horizon_row` locaux, variante `PbrDim` jamais construite,
   compteur `vus` écrit et jamais lu), **items publics documentés** (`alloc_counter`,
   `geometry::count`, `testutil::ground_bands`), **nom de test remis en snake_case** (`D7`
   → `d7`, prose alignée au même endroit), **sonde consommatrice** : le geste du
   constructeur est posé dans le **binaire** et confronté à l'écriture par composantes via
   `entity_transform` (API relue, pas devinée).

Limite consignée plutôt que cachée : l'assertion ajoutée dans `Sonde::setup` ne s'exécute
que si une fenêtre s'ouvre — la voie fenêtre n'est traversée par aucun test headless
(12.15). Ce qui est exécuté par le harnais reste `le_constructeur_rend_la_meme_matrice_que_les_composantes`.
2026-11-06 14:53:55 +01:00
..