jerome pushed to main at jerome/wsg 2026-11-06 18:37:20 +01:00
28eb1ae882 D17 bis : un fichier expédié ne peut pas pointer hors du paquet, et la langue devient une conséquence de la frontière
ae8a7fd6d1 L5 de mutate-langue.py consigné comme cas non joué (trois constructions échouées)
14024a1dc0 cliquet de langue repose a la mesure (2361) : le francais affiche par les exemples est traduit
788a36a6c6 cliquet de langue sur la surface expédiée (2386 mesuré), avec sa jambe anti-sonde-muette
21fc722869 D17 (suite) : prose reposée sur la mesure, et la règle de langue suit la frontière
Compare 11 commits »
jerome pushed to main at jerome/wsg 2026-11-06 09:22:34 +01:00
997e2d7b66 18 · le contrat lu par un agent : README §4, deux verrous, une campagne, 21 → 0
jerome pushed to main at jerome/wsg 2026-11-05 20:14:05 +01:00
8a923f56e7 README reecrit pour l'utilisateur : trois points forts expliques (leger/opt-in, GPU-driven, budget de frame) + la voie simulation ; la machinerie descendue dans README_DETAILS
jerome pushed to main at jerome/wsg 2026-11-05 19:04:50 +01:00
86541c0158 cargo fmt --all : normalisation des 15 fichiers non touches par la seance 17 (dérive de mise en page preexistante)
83cac98e5c 17 (instruments) : verrou les_arenes_de_scene_sont_toutes_cablees + campagne mutate-sprite-arena (T0+9 cas, 0 ecart) + draft 17 + AGENTS
d28a02b103 17.1-17.3 (sprites) : les deux budgets verifies a l insertion, arene de mailles a lignes libres, fossile supprime
Compare 3 commits »
jerome pushed to packaging-crate at jerome/wsg 2026-11-05 14:17:37 +01:00
c2065d3e61 16 (prose re-mesuree) : paquet 922 tests / 212 fichiers / 5,9-2,3 Mio re-mesures, campagne 16 rejouee 2026-11-05 (T0+9, 0 ecart) consignee dans le draft et l'index ; docs utilisateur : quickstart sans glam ni winit declares (fait, pas option) + note scene-interaction ; AGENTS : gotcha 'tableaux remis en page par cargo' et mesures D11/D5 a jour ; harnais 1003 / 0 / 0 / 0
cf0439c4b9 16 (correction artefact, trouvée en rejouant la campagne 16) : le parseur de keywords/categories ne lisait que la mise en page du depot alors que cargo remet les tableaux element par ligne dans le paquet -- T0 de la campagne en echec (package_contract 1 binaire fautif sur 6, 921 tests joues). Helper tableau_de_manifeste (2 mises en page) + verrou les_deux_mises_en_page_d_un_tableau_de_manifeste_sont_lues ; tarball rejoue : 12/12. Docs : README (licence MIT, publication, rust-version), README_DETAILS (ligne publication), PLAN (ligne publier mesuree), AGENTS (organisation reelle : campaigns/consumer/testassets/bench/docs-generated/lib-assets-tests/tests-shared ; branche = main), 3 liens casses de drafts archives corriges (audit : 0 lien non resolu)
81d35630b6 16 (prose date) : LEARNING-EXTRAITS — mesures re-comptees (package_contract 11, doc_consistency 27, 17 gestes / 25 occurrences, 3 racines / 13 noms / 42 sites), sections D6 / D11-bis / D5, et la ligne D3 du draft 16 corrigee (le transfert dans le code n'avait jamais ete ecrit)
0ee2611236 16 (D5 fermee a la mesure, instruments) : derniere rededefinition locale de strip_line_comments migrée vers tests/shared/sources.rs (wgsl_validate, 8 sites, 49 tests verts) ; verrou anti-copie (0 redefinition / 3 binaires, planche 2) ; campagne mutate-shared-sources T0+2 cas 0 ecart (S1 temoin: la_voie_facade_ne_reexporte_pas_wgpu) ; D3 : la ligne du draft qui affirmait 'transfere dans le code' est corrigee (mesure: verrou lit seulement docs/user) ; 907 tests du paquet marques dates ; harnais 1002 / 0 / 0 / 0
b7a7f6668e 16 (D6, prose) : draft 16 ligne D6 avec le bilan mesure (6 doc-tests rouge sur API perimees, 19 joues / 0 ignore), index des campagnes + mutate-doc-blocks, AGENTS.md (D6 closee, rouvre la liste avec Scene/App hors prelude, gotcha neuf) ; harnais 1001 / 0 / 0
Compare 30 commits »
jerome pushed to main at jerome/wsg 2026-11-05 14:17:36 +01:00
c2065d3e61 16 (prose re-mesuree) : paquet 922 tests / 212 fichiers / 5,9-2,3 Mio re-mesures, campagne 16 rejouee 2026-11-05 (T0+9, 0 ecart) consignee dans le draft et l'index ; docs utilisateur : quickstart sans glam ni winit declares (fait, pas option) + note scene-interaction ; AGENTS : gotcha 'tableaux remis en page par cargo' et mesures D11/D5 a jour ; harnais 1003 / 0 / 0 / 0
cf0439c4b9 16 (correction artefact, trouvée en rejouant la campagne 16) : le parseur de keywords/categories ne lisait que la mise en page du depot alors que cargo remet les tableaux element par ligne dans le paquet -- T0 de la campagne en echec (package_contract 1 binaire fautif sur 6, 921 tests joues). Helper tableau_de_manifeste (2 mises en page) + verrou les_deux_mises_en_page_d_un_tableau_de_manifeste_sont_lues ; tarball rejoue : 12/12. Docs : README (licence MIT, publication, rust-version), README_DETAILS (ligne publication), PLAN (ligne publier mesuree), AGENTS (organisation reelle : campaigns/consumer/testassets/bench/docs-generated/lib-assets-tests/tests-shared ; branche = main), 3 liens casses de drafts archives corriges (audit : 0 lien non resolu)
81d35630b6 16 (prose date) : LEARNING-EXTRAITS — mesures re-comptees (package_contract 11, doc_consistency 27, 17 gestes / 25 occurrences, 3 racines / 13 noms / 42 sites), sections D6 / D11-bis / D5, et la ligne D3 du draft 16 corrigee (le transfert dans le code n'avait jamais ete ecrit)
0ee2611236 16 (D5 fermee a la mesure, instruments) : derniere rededefinition locale de strip_line_comments migrée vers tests/shared/sources.rs (wgsl_validate, 8 sites, 49 tests verts) ; verrou anti-copie (0 redefinition / 3 binaires, planche 2) ; campagne mutate-shared-sources T0+2 cas 0 ecart (S1 temoin: la_voie_facade_ne_reexporte_pas_wgpu) ; D3 : la ligne du draft qui affirmait 'transfere dans le code' est corrigee (mesure: verrou lit seulement docs/user) ; 907 tests du paquet marques dates ; harnais 1002 / 0 / 0 / 0
b7a7f6668e 16 (D6, prose) : draft 16 ligne D6 avec le bilan mesure (6 doc-tests rouge sur API perimees, 19 joues / 0 ignore), index des campagnes + mutate-doc-blocks, AGENTS.md (D6 closee, rouvre la liste avec Scene/App hors prelude, gotcha neuf) ; harnais 1001 / 0 / 0
Compare 44 commits »
jerome pushed to packaging-crate at jerome/wsg 2026-11-04 17:12:59 +01:00
6619961ed2 16 D7 : description du manifest + verrou du budget registre (qui voyage avec le paquet)
91d52119a8 16 (draft 16 § 13) : consignation D9 -- 22,6 Mio a 5,8 Mio sans perte de couverture
2c75b94ad0 16 C3 (D9 engage) : exclude examples/assets + le chargeur nomme le fichier absent
421f006125 16 C1+C2 (draft 16, D9) : les fixtures que le crate teste appartiennent au crate, les medias de demo restent dehors
696e400e68 16 : consigne de la frontiere mesuree (draft 12) + index + AGENTS.md. Draft section 12 : le tableau avant/apres (235 -> 231 fichiers, 7 -> 5 binaires embarques, 35 echecs -> 0 echec, 892 tests joues sur le tarball), l instrument (campaigns/mutate-16-packaging.py, T0 + 4 cas, 0 ecart, arbre rendu) et les trois proprietes d artefact que personne ne pouvait deviner : cargo package normalise les mtime (donc CARGO_TARGET_DIR partage rejoue l artefact precedent — le touch est dans la campagne), cargo package REECRIT le manifeste (dependance inline -> table [dependencies.image] : le verrou d extensions lisait la forme, d ou le 1 test d unite en echec sur 812, et un message qui accusait une perte inexistante), et un verrou qui doit voyager ne peut pas supposer repo_root()/lib (le verrou de licence, corrige par crate_root() = CARGO_MANIFEST_DIR). Annexe consignee : l ensemble exclude a des dependances internes (M1a = REFUSE a la compilation, consigne comme verdict attendu, 14-F2 version packaging). AGENTS.md : la phrase « Do not publish this to crates.io as-is » est remplacee par un enonce mesure (licence posee, instruments exclus, tarball vert ; restent les 18 Mo de media et description/homepage/repository) — une phrase de garde qui a raison par omission est une dette (famille 13.9 / 12.15), et la campagne est desormais nommee dans l index des drafts (regle 4).
Compare 10 commits »
jerome created branch packaging-crate in jerome/wsg 2026-11-04 17:12:58 +01:00
jerome pushed to main at jerome/wsg 2026-11-04 15:17:27 +01:00
4d7da44169 16 packaging : etat consigne (paragraphe 11). Un accord de conversation n est pas un etat du depot, et la section 9.0 exige une baseline mesuree dans le meme etat que la branche. Consigne, avec les dates et la mention que le hash se re-mesure a l ouverture : HEAD 3cda919, arbre propre, harnais 964 / 0 / 0 skip (+ 9 doc-tests ignores), cliquets de familles 0/0/0 (file vide), paquet 234 fichiers 22,8 MiB AVEC les 31 medias (exclude pas encore pose), porte licence du registre fermee, portes restantes description documentation homepage repository (mesurees a l avertissement de publish --dry-run). Ajoute : 0 occurrence de packaging / crates.io / phase 16 dans le ROADMAP (mesure) donc le packaging n est pas une ligne d etape, et ce que ca exigerait si ca le devenait. Tableau des decisions D1-D10 avec statut et declencheur (D8 engagee, D9 actee au chargeur en meme commit que exclude, D4 = le vrai risque de publier : 0 pub use wgpu contre 59 signatures exposant wgpu). Et la liste des dettes dont part la branche : 4 caracterisations ouvertes + le trou d instrument msaa (M2 REFUSE, aucun cas ne prouve que les deux verrous msaa ne sont pas des decors).
3cda919710 16 packaging D9 ACTEE : absence explicite, pas crate separee -- et le draft disait « l execution echoue » sans dire comment, ce qui est toute la question. Mesure sur les trois chargeurs (from_file, from_file_nearest, from_file_with_format, gpu.rs) : TextureError n a AUCUNE variante IO, les trois font map_err(Decode(ImageError::IoError(e))). Le message vaut donc failed to decode image: No such file or directory (os error 2) -- faux diagnostic (ce n est pas un decodage) qui ne nomme pas le chemin. Les 14 exemples a medias paniqueraient la-dessus sur le tarball. Famille 6.12 (deux representations du meme echec), version type qui ment sur la nature. Remede : UN endroit (le chargeur, variante NotFound { path } + Display qui nomme le chemin), pas 14 helpers. Verrou a trois jambes (existant -> Ok ; absent -> type attendu ET Display nomme le chemin ; present mais illegitime -> reste Decode, sinon la separation n est pas demontree, 13.12). Moment : au commit qui pose exclude = [examples/assets] dans packaging-crate, pas avant -- ecrire aujourd hui un chemin que rien n exerce serait creer la famille membre documente et jamais appele. La couche 3 ne peut pas trancher (pas d affichage, 12.15) : c est le verrou du chargeur qui porte la propriete.
c56f9af1c2 16 packaging D8 ACTEE : MIT simple. lib/LICENSE ecrit (titulaire repris de git config user.name -- a corriger si le titulaire legal est un employeur ou un laboratoire), license = "MIT" dans la section [package] de lib/Cargo.toml. Le verrou the_license_field_and_the_license_text_agree (doc_consistency, 24 -> 25) confronte DEUX sources, pas une existence : le champ du manifeste et le texte du fichier, plus la ligne de titulaire. Vu ROUGE sous deux mutations : license = Apache-2.0 en gardant le texte MIT, et Copyright (c) vide ; defaites par leur inverse exact, pas par git checkout (6.19, le code n etait pas encore commité). Mesures apres decision : l avertissement de cargo publish --dry-run --no-verify passe de no description, license, license-file, documentation, homepage or repository a no description, documentation, homepage or repository -- la porte licence est fermee, les trois autres restent D7/D10. cargo package --list : 234 fichiers (233 + LICENSE), LICENSE figure dans la liste. Limite écrite dans le draft et dans le verrou : doc_consistency est un binaire EXCLU du paquet, donc ce verrou ne tourne pas sur le tarball -- c'est la couche 3 (l'artefact dépaqueté) qui le garantira lá-bas. Le draft 16 porte la decision, ses mesures et cette limite. Harnais : 964 tests, 0 skip.
dbff3d6b0e 16 packaging : draft corrige par mesure, pas par relecture. Cinq points. (1) La porte : cargo publish --dry-run --no-verify NE refuse pas -- il package (233 fichiers, 22,8 MiB) et avertit ; la porte est le registre, pas cargo. Le premier jet disait le contraire, ce qui aurait fait reparer le mauvais garde-fou. (2) Aucun LICENSE dans le depot (mesure) alors que le paragraphe 4 met lib/LICENSE dans PACKAGE : decision D8, prerequis. (3) example_banners.rs n est PAS auto-suffisant depuis le 2026-11-02 : phantom_keys_are_not_promised_in_user_docs fait crate_root().parent() sur docs/user -- fichier mixte, 12 verrous tournent, 1 ne conclut pas ; le chiffre 3 des verrous de doc valait 4. (4) La liste retient un Cargo.lock (celui que cargo synthetise) -- le paragraphe 10 disait il ne part pas. (5) Cout de D1 chiffre : 14 exemples / 15 sites ouvrent examples/assets, 31 fichiers de medias = 18 Mo (BoomBox.glb seul 10,7 MiB), les 50 .rs+.wgsl ne pesent que 0,6 MiB -- d ou D9 (livrer le code, exclure les medias, rendre l absence explicite par une commodite partagee) et le cout mesure de l alternative wsg-examples (15 fichiers de test nomment examples/, 40 sites lisent les constantes d exemple). Ajoute : couche 3 du verrou de frontière = l artefact (package, depaqueter, build, lancer les seuls binaires auto-suffisants ; verdict = jeu d echecs confronte a la liste, REFUSE si vide ou different ; T0 = le paquet se construit) -- un inventaire de chemins nomme, il ne prouve pas (12.10). D10 rouvre le nom a cout nul (package wsg + lib wsg_lib). Table du 1 marquee mesure datee. doc_consistency 24 vert, example_banners 13 vert.
Compare 4 commits »
jerome pushed to main at jerome/wsg 2026-11-04 14:32:48 +01:00
84ec96feb1 15.5 hemisphere : le contraste des deux voies est verrouille, la file des familles est vide. La note d ambient_color/designait elle-meme le trou (the strength CONTRAST between the two rows is not locked by any test). Nouveau verrou la_meme_ambiante_hemispherique_est_plus_forte_en_voie_standard_qu_en_pbr : meme scene, add_material_shader (fs_main) contre add_material_pbr (fs_pbr). Seuil 3,0 calibre sur les DEUX bornes mesurees (regle 12.15) : propre 7,56 (204/27), mutation M5 0,74 (20/27). Campagne mutate-hemisphere.py : 6 cas, 0 ecart ; M5 tombe sur UN SEUL verrou, les deux verrous de dominance de la voie attenuee restent verts (20 > seuil 10 -- un effet affaibli n est pas un effet absent). Portee de M1 re-mesuree sur le binaire entier (threads=1) : 812 observes, 3 temoins, 809 indifférents -- la phrase 2 sur 811 était devenue fausse des qu un troisieme temoin est apparu : une portée consignée est une photo, pas un fait (15.1). Deux chiffres corrigés par mesure : 0,76 (memoire) -> 0,74, et la note de l exemple remplace non locked by any test par le nom du verrou qui le porte. Harnais : 963 tests, 0 skip, 9 doc-tests ignores.
843788e635 15.5 hemisphere M1 : portee MESUREE, pas affirme. La table de seance disait « M1 tombe sur les deux verrous PBR » — la campagne restreinte ne pouvait le dire. Sonde (mutation M1 appliquee, binaire entier --lib, --test-threads=1 pour que rien ne skippe) : 811 tests observes, 809 indifférents, 2 en echec = exactement les deux verrous PBR. Deux lectures consignees dans campaigns/mutate-hemisphere.py et la ligne de manifeste : (a) precision — un cas qui ne fait tomber que 2 temoins sur 811 est un instrument precis (13.3) ; (b) concentration — le gradient hemispherique du chemin PBR n'a que DEUX temoins dans toute la suite, les affaiblir rend le defaut invisible sans qu'aucun autre test ne bronche. Ajoute : pourquoi le troisieme verrou de la famille reste vert sous M1 sans etre un trou — il rend ciel == sol, donc mix(a,a,t) = a (inerte par algèbre). Rappel : M1 n'est pas un defaut du depot, c'est une mutation injectee ; son verdict ROUGE est la condition de succes de la campagne.
d3fbc9a947 15.5 hemisphere : le trou ferme de l'autre cote (gotcha 6.7 version verification). Constat mesure : le mix hemispherique vit a DEUX endroits de standard_shader.wgsl (fs_main ligne ~611, compute_ibl_hemisphere ligne ~1235 appelee par fs_pbr) ; les trois premiers verrous ne rendaient que la voie PBR, donc la copie fs_main etait traversee par ZERO test -- la campagne l a dit elle-meme, M3 etait VERT. Deux verrous compagnons neufs (la_face_cele_..._aussi_en_voie_standard, permuter_..._aussi_en_voie_standard) : harnais parametre par Voie, pas duplique (gotcha 6.7). Campagne mutate-hemisphere.py : 5 cas, 0 ecart, M1/M2 (copie PBR) et M3/M4 (copie fs_main) ROUGE chacun sur les verrous de son chemin. Mesure annexe : +27 en PBR contre +204 en fs_main sur la meme scene -- l attenuation du lobe PBR est mesuree, pas supposee (c est ce que la note d ambient_color annoncait non verrouille). Documents corriges de leur ancien M3 (une consignation devenue fausse est une fausse preuve). Harnais : 962 tests, 0 skip.
e2019dc04f 15.5 bandeaux non falsifiables, 9 familles sur 9 : cliquet BANDEAUX_SANS_PREDICTION_RATCHET reposé de 9 a 0 (mesure). Hemisphere (6.21) : l ambiante hemispherique n etait rendue par AUCUN test -- trois verrous neufs dans core::hemisphere_tests (scene sans lumiere, camera a plomb, cle du mix = n.y). Mesures propres : dessus b-g = +27, dessous g-b = +27, 3 364 texels par vue ; ciel/sol permutes = dominances inversees ; ambiante plate = 0 texel de difference. Campagne campaigns/mutate-hemisphere.py : 4 cas, 0 ecart (M1 mix PBR a l envers ROUGE, M2 t force a 0,5 ROUGE, M3 copie non-PBR a l envers VERT consigne = le mix vit a DEUX endroits, aucun des trois verrous ne traverse la copie hemisphere). Mon premier seuil de dominance (60) etait invente et serait tombe rouge sur un moteur sain : reposé a 10 sur les deux bornes mesurees +27 / -27 (regle 12.15). Verrous de source neufs : l_exemple_particles_declare_quatre_pools_aux_trois_drivers_et_deux_mixages, l_exemple_import_detecte_le_format_par_l_extension_et_refuse_le_reste, l_exemple_detail_map_oppose_autolod_et_fixed_always_visible. Defaut de document corrige : docs/user/examples.md repetait le faux du bandeau log_depth (the ground stretching to the horizon - l exemple ne construit aucun sol). Harnais : 960 tests, 0 skip, 9 doc-tests ignores.
1280539df1 15.5 bandeaux non falsifiables, 5 familles sur 9 : simple, alpha_test, opacity_map, ambient_color, log_depth. Chaque promesse reecrite en prediction CHIFFREEe et portee par un verrou existant (mesures 2026-11-03 : 2 592/5 184 texels decoupes et 0 repeint | cutoff 3 384/5 184 = 0,653 contre 0,344 lu a lenvers | albendo ne différant que par son alpha = 0 px, memes octets en masque = 2 592 px | teinte = multiplication octet par octet, 0 canal plus clair, silhouette 28 406 texels inchangee | simple : 899 texels voie scene, 4 791 sur 4 800 predits voie manuelle, coins (247,3,8)/(8,3,244)). Defaut trouve en mesurant : le bandeau de log_depth promettait 'the ground stretching to the horizon' - la scene ne construit AUCUN sol (3 dalles 900x900 empilees a 1 km, faites d'un cube(1.0) mis a l'echelle, jamais un plane()). Verrou de source neuf l_exemple_log_depth_ne_construit_pas_sa_dalle_avec_plane (FAR 5 000 / START_DIST 1 000 / GAP centimetrique ; la portion bandeau est exclue de la recherche, sinon le verrou rougit sur l'enonce de la regle, gotcha 14-F6). Cliquet neuf BANDEAUX_SANS_PREDICTION_RATCHET = 4 (mesure) : un bandeau purement descriptif ne peut etre pris en defaut par aucun verrou, et le cliquet UNCOVERED ne le voit pas structurellement. Liste mesuree : import, particles, hemisphere_light, detail_map. Harnais : 954 tests, 0 skip.
Compare 5 commits »
jerome pushed to main at jerome/wsg 2026-11-04 12:09:31 +01:00
f3c4b6cc37 15.5 : la_voie_manuelle fermee, fs_pbr couvert cote spot, cliquet de promesses a 0. (1) spot en PBR : le cone est calcule dans fs_main ET fs_pbr, mais aucun test de spot ne traversait fs_pbr (le verrou existant utilise add_material_shader, donc fs_main seulement) - retirer le bloc de fs_pbr ne faisait rougir AUCUNE suite, alors que mutate-spot.py contenait deja la phrase 'le calcul du cone vit a deux endroits' : un constat ecrit n'est pas un verrou. Nouveau verrou le_spot_eclaire_aussi_en_pbr_un_faisceau_et_non_un_pied_de_lumiere + M4 (ancre light_color, 1 occurrence) ROUGE ; campagne 5 cas, 0 ecart. Discriminant non transposable : le plancher spec_ibl dilue le rapport (4,62 vs 2,07) - ce qui porte est la sensibilite a l'angle (3 723 texels de difference, 0 quand le cone saute). Caracterisation consignee : cos_outer = cos_inner - 0.1 en espace cosinus, donc half_angle 0,06 rad donne un cone exterieur de 26 degres (tache 50 texels contre 80). (2) demo : verrou le_demo_declare_chaque_primitive_et_chaque_source_de_texture_qu_il_nomme (6 constructeurs, exactement 2 from_file et 2 from_rgba8, deux noms d'assets) + 8 lignes de manifeste. (3) deformable : le defaut consigne est CORRIGE (EntityData::mesh est un Arc clone -> Arc::get_mut ratait toujours ; geometrie CPU derriere un RwLock, voie rapide refusee quand un BVH existe) ; 4 verrous, campagne mutate-deform.py 4 cas 0 ecart, M3 vu ROUGE seulement apres avoir deplace le verrou GPU sur une sphere sans BVH. UNCOVERED_EXAMPLES_RATCHET 3 -> 0. Harnais : 953 tests, 0 skip.
4aa8b0ef25 CORRECTION du defaut update_geometry (15.5) + verrou GPU de la deformation. Cause mesuree : EntityData::mesh est un Arc<Mesh> clone, donc refcount >= 2 des qu'une entite utilise le maillage -> le 'if let Some(..) = Arc::get_mut(..)' de la voie rapide ratait TOUJOURS et le remplacement de la geometrie CPU etait silencieusement saute (le commentaire 'In practice the arena is the sole owner (refcount == 1)' etait faux). Correction : geometrie CPU derriere un RwLock (partageable a travers l'Arc), mise a jour inconditionnelle ; voie rapide refusee quand un BVH existe (le BVH est immuable et porte sa propre copie des positions ; voie lente < 0,1 ms vs < 0,01 ms). Verrous : la_voie_rapide_sans_bvh_deplace_le_raycast (112 tri), une_geometrie_remise_a_jour_deplace_le_raycast_et_la_boite (360 tri), la_voie_lente_update_geometry_deplace_le_raycast, la_deformation_uploadee_change_la_forme_affichee (1 296 -> 8 412 texels). Campagne mutate-deform.py : 4 cas, 0 ecart (M3 vu ROUGE seulement apres avoir passe le verrou GPU sur une sphere 8x8 sans BVH : une correction peut deplacer le chemin qu'un verrou traverse). Deux non-mutations E0283 REFUSEES. Bandeau deformable reecrit (il enoncait le defaut, maintenant corrige). Harnais : 951 tests, 0 skip.
Compare 2 commits »
jerome pushed to main at jerome/wsg 2026-11-04 11:18:16 +01:00
2bf7994d16 collision + deformable : deux verrous neufs, un defaut reel consigne. (a) un_glissement_produit_une_entree_puis_une_sortie_sur_les_deux_predicats : Scene::collides / collides_precise n'avaient que l'exemple comme appelant ; aller-retour de deux cubes -> 2 transitions chacun, premier contact a ecart 0,5000 = verite geometrique (cubes de cote 1 centres sur +/-d). (b) une_geometrie_remise_a_jour_ne_suit_pas_la_boite_cpu_tant_que_arc_get_mut_echoue : CARACTERISATION d'un defaut muet - update_geometry recharge le tampon GPU mais le remplacement de la geometrie CPU est sous 'if let Some(..) = Arc::get_mut(..)' ; ici il echoue, la methode renvoie Ok et le raycast CPU garde la surface OLD (entree 1,9999999 au lieu de 1,0 apres rayon 1 -> 2 ; sonde y=1,2 muette). Bandeau de deformable reecrit sur la mesure. Cliquet 4 -> 2 (manual et collision fermes, lignes ajoutees). AGENTS.md : gotcha update_geometry.
316dc4bb11 BUG REEL : les exemples simple et manual affichaient une fenetre VIDE — quad ecrit a la main tourne vers l-arriere (indices 0,1,2/0,2,3 culles par CullMode::Back + Ccw). Mesure : 0 texel peint sur 19 200 dans les DEUX voies ; apres correction 0,2,1/0,3,2 : 899 (scene) et 4 791 (voie manuelle, bbox (40,30)-(119,89) = prediction NDC). Verrous neufs : core/manual_path_tests.rs (2) + tests/manual_vs_facade.rs (4). Bandeau de manual reecrit (la promesse identical output etait fause : la voie manuelle n installe aucune matrice de frame). Cliquets 4 -> 3. AGENTS.md : gotcha du quad culle.
1f9e156a7a AGENTS.md : deux gotchas de la seance — le calcul du cone spot vit a 2 endroits du shader (un verrou de rendu n'en traverse qu'un), et un chemin sans test n'est pas un chemin casse mais inconnu (Transform.scale du raycast, mesure sans defaut)
f903cf7151 picking : trou ferme — verrou une_entite_scalee_est_raycee_a_sa_boite_monde_reelle (chemin Transform.scale -> espace local -> AABB -> BVH, traverse par personne). Mesures : distance 4,5000 / normal (-1,0,0) / local.y 0,400 = 1,2/3. Campagne mutate-pick-scale.py (3 cas, 0 ecart). Aucun defaut moteur : le trou etait l'absence d'observation.
dcc5b2451c picking : FERMEE — 7 lignes de manifeste vers 8 verrous existants (miss de ciel, avant-gagne au recouvrement, rayon lu sur la projection courante), cliquet 5 -> 4 ; draft 15.5 $25 consigne le trou restant : aucun verrou ne raycaste une entite scalee
Compare 32 commits »
jerome pushed to main at jerome/wsg 2026-11-03 17:37:17 +01:00
e4840b4fa7 campagne mutate-emissive.py : 4 cas, 0 écart (M1/M2 ROUGE, M3 VERT consigné) + gotcha « l'émissif est multiplié par l'albédo »
60d6a0636a emissive : 1 verrou de rendu pour 4 phrases (identité LDR 0 texel, HDR 1198 texels, référence 0) — cliquet 15 → 14 ; découverte : emissive est multiplié par l'albédo
Compare 2 commits »
jerome pushed to main at jerome/wsg 2026-11-03 17:16:22 +01:00
c57dde0e8a campagne mutate-bloom.py : 4 cas, 0 écart — M2 (seuil à 0) ne fait tomber que le verrou des coins ; trou consigné : l'amplitude intensity n'est portée par aucun verrou
e3400d7805 bloom : 2 verrous neufs (halo hors empreinte 8818/10540, coins à ±1 = plancher 8 bits) — cliquet 16 → 15
ec319c0e3f DRAFT 15.5 : plan mesuré pour les 16 bannières — bloom/hdr/emissive ont des verrous qui ne portent pas les phrases, dof.rs n'a aucun noyau de flou (grep 0) donc sa 2e promesse est à mesurer avant d'écrire
452d076298 TEST-SUITE.md régénéré : 922 passed / 0 failed / 0 skip
8cc0316caf campagne mutate-sky-msaa.py : 4 cas, 0 écart — M2 REFUSÉ (le sample_count MSAA est une convention sur ≥5 sites) et M3 VERT (mutation inerte), deux écarts consignés
Compare 16 commits »
jerome pushed to main at jerome/wsg 2026-11-03 10:56:29 +01:00
b44d62e533 6.34 + API publique : trois membres documentés fermés, quatre verrous sprites, campagne 12 cas
cc8f8ff366 PLAN.md confronté au ROADMAP : une dérive 6.12, et un parseur partagé au lieu de deux
225bfb47a3 Skip : un seul prédicat, trois formes, et la branche de refus du harnais enfin vue en action
74d066572f Alpha test : la formule documentée était fausse des trois côtés, et la commodité ne pouvait rien découper
Compare 4 commits »
jerome pushed to main at jerome/wsg 2026-11-02 18:30:51 +01:00
12d0558065 API publique : les 12 variantes points/lignes jouées, et les touches de docs/user confrontées au code
eeb056dab3 API publique : 64 membres muets inventoriés, et les 17 que la documentation exhibe passent sous verrou
0c8ab615c8 Commandes documentées : 217 --example <nom> confrontées au manifeste, et la prémisse de la proposition invalidée par mesure
7006bd67e7 Compteurs : la source est générée, les totaux sortent des documents, et le verrou nomme cinq offenses
Compare 4 commits »
jerome pushed to main at jerome/wsg 2026-11-02 16:14:50 +01:00
7e4f8a6db1 6.12 : les quatre décisions appliquées — octaves normalisées, API de sampler verrouillée, KTX2 hors périmètre écrit, règle « ce que le code nomme existe »
a04614677b 6.12 (chantiers 5 et 6) : la sortie des générateurs procéduraux sous verrous — quatre énoncés de doc réfutés par une sonde
c23f7576d6 6.12 : le chargement de texture sous verrous — 13 exemples l'empruntaient, 0 test le traversait
14a6b71546 Hygiène : 15 dérives de documents corrigées, et les API des blocs de doc enfin confrontées au code
Compare 4 commits »
jerome pushed to main at jerome/wsg 2026-10-28 16:58:23 +01:00
03bd70c150 15.3 : validation en fenêtre de fog jouée (0 px / 343 431 px / 0 px) et instrument commité
349aeef889 15.3 : la promesse de bandeau de fog confrontée à la scène de l'exemple
3d8cf12266 6.13 : la dernière ligne sans prédiction, fermée par une mesure
aac5fabd88 15.2 : le verrou de liens ne savait plus lire un caractère non-ASCII
09c27de6f8 15.2 : le prédicat partagé confronté, et non supposé (campagne mutate-152 rejouée)
Compare 6 commits »
jerome pushed to main at jerome/wsg 2026-10-28 09:35:58 +01:00
a16e275dfb 15.2 : format cible + cinq règles ; la définition partagée, pas recopiée
de1a3d10ac 14.1 : les trois contrôles anti-décor sont joués par un script commité — et un quatrième manquait
386e9f43b6 cargo fmt --all — le dépôt n'était pas fmt-propre à HEAD (5 fichiers, formatting uniquement, aucun changement de comportement)
1d80e1d54a 15.2 : les deux cliquets de réduction — et le cliquet comptait autre chose qu'il nomme
f7ac0bb86a Étape 15.1 — hygiène du dépôt : l'index des drafts est le point d'entrée, et il est verrouillé
Compare 11 commits »
jerome deleted branch step/14-intra-batch-sort from jerome/wsg 2026-10-20 11:18:47 +02:00