Ce qu'on a changé.

Toutes les corrections et améliorations, dans l'ordre. Aucune release silencieuse — si on touche au solveur, c'est listé ici. Mis à jour environ une fois par semaine.

  1. 21 mai 2026

    Quatre corrections sur les formes complexes.

    On a corrigé quatre cas où les sphères, cylindres et formes en L pouvaient être mal interprétés par le solveur. Les plans qui utilisent ces formes sont maintenant calculés correctement, peu importe leur orientation.

    Au passage, un bug ancien (un plantage rare sur certains chargements à 15% de porte-à-faux) a disparu : il était en fait corrigé depuis une mise à jour précédente, simplement personne ne l'avait vérifié. Ré-activation de cette tolérance par défaut.

    Détails techniques

    commit 1e25c8c · audit v5 — 3 findings HAUTE + CRIT-4 résolus

    FIND-003 SPHERE volume/rotations : Box::volume() = (π/6)·orig_l³, parser warn si shape=2 et dims ≠.

    FIND-010 CYLINDER overlap radius asymétrique : parser warn si shape=1 et il≠iw.

    FIND-011 L_SHAPE rotation-aware : 5 sites consommateurs corrigés (chk_centroid_support, chk_support_any, supp_area, rollout_score_fast, output BOX).

    CRIT-4 SIGSEGV avec OVERHANG_TOLERANCE=0.15 non reproductible sur 220 CSV ASan+UBSan. Default rétabli à 0.15 (Loi 2 — porte-à-faux ≤15%/côté).

  2. 20 mai 2026

    Un vieux compromis numérique n'avait jamais servi.

    Depuis longtemps, on gardait une option de compilation "rapide mais imprécise" parce qu'on pensait qu'elle améliorait les performances sur certaines instances. On a bench 172 instances pour vérifier : aucun gain mesurable, donc aucune raison de prendre le risque. Retirée.

    Conséquence : le calcul est désormais plus prévisible numériquement. Aucun changement perceptible côté résultat.

    Détails techniques

    commit 311861b · CRIT-2 fermé définitivement

    Bench BR1-BR8 single-container (119 inst) : ffm_mean=78.35% vs no_ffm_mean=78.35%, Δ=+0.01pp = bruit pur.

    Bench mode prod (53 inst, 5 modes × 10 difficultés) : walls identiques, fill rate dans la variance.

    Anti-régression test1/test2/test3 (seed=42, t=60s) : 52.5% / 54.9% / 54.5%.

    -ffast-math retiré de deploy_solver.sh, deploy_all.sh, docs/DEPLOY_QUEUE.md.

  3. 19 mai 2026

    Quatre vérifications physiques plus strictes.

    Le solveur teste plusieurs lois physiques pour valider un plan : centre de gravité, support au sol, anti-roulis des cylindres couchés, ratio hauteur/base d'une pile. Ces quatre tests sont maintenant plus précis — ils refusent des configurations qui étaient théoriquement acceptées mais qui auraient pu poser problème dans le camion.

    Concrètement : moins de plans qui passent la simulation et casseraient sur la route.

    Détails techniques

    commit 0efa6e2 · 4 findings HAUTE physique résolus

    FIND-001 chk_centroid_support : test par rectangle (avec soustraction L-shape), plus par bbox union.

    FIND-002 is_upright() cube-pseudo cylinder : rotations() ne retourne que upright.

    FIND-005 cylindre couché : sup et area clipés sur bande axiale ±10% du diamètre.

    FIND-006 chk_aspect_ratio : BFS support chain pour calculer la vraie base locale connectée.

  4. 18 mai 2026

    Un nouveau mode de calcul fait gagner 9 points en moyenne.

    On a ajouté deux nouvelles stratégies de placement spécialisées pour les chargements mono-conteneur (un camion ou un container, sans phase palette). Sur le benchmark académique de référence du secteur (BR1 à BR8), le taux de remplissage moyen passe de 69.4% à 78.35%.

    À noter : ce changement ne s'applique qu'au mode mono-conteneur. Les plans en deux phases (colis → palettes → camion) restent strictement identiques aux versions précédentes.

    Détails techniques

    commit 9f0f899 · F-S-D-01 résolu — Phase 0.5 BPP-layered + shelf-stack

    greedy_bpp_layered (~140 LOC) : 2D BLF par layer h-uniforme, heuristique d'orientation. Optimal pour h-homogène (BR1 +6.5pp).

    greedy_bpp_shelf_stack (~120 LOC) : 3D BLF avec stack vertical par shelf, 6 rotations testées. Optimal multi-h (BR3 +18.8pp).

    Pick-best en Phase 0.5 sous g_single_container=true. Budget 1.5s + 2.0s pour ne pas manger Beam.

    Anti-régression mode prod (g_single_container=false) : aucune modif. test1=52.5% test2=56.2% test3=54.5%.

  5. 17 mai 2026

    Le solveur ne peut plus boucler indéfiniment.

    Sur certaines machines très chargées, le solveur pouvait dans de rares cas ne pas respecter le temps de calcul demandé. C'est maintenant garanti : si vous demandez 60 secondes, vous avez un plan en 60 secondes, même si la machine est sous pression.

    Détails techniques

    commit 68b16e2 · F-S-C-01 v3.1 final

    Timer wall-aware per-Timer : max(virt, real_since_start) + safety net global 10×/600s + EP cap abaissé 200→50.

    Versions v2/v3/v3.2/v3.3 testées et rejetées (wall 5-8× trop long). v3.1 = équilibre validé.

  6. 14 mai 2026

    En cas de problème, le solveur le dit.

    Avant, si le solveur n'arrivait pas à placer un colis sans chevauchement, il pouvait silencieusement le retirer du plan. C'est terminé : maintenant, soit le solveur arrive à placer tous les colis, soit il émet une erreur explicite. Plus de plan "incomplet sans qu'on le sache".

    Détails techniques

    commit 9f5e2cb · politique no-drop overlap

    Overlap fix retry jusqu'à convergence, jamais de drop silencieux. Fail loud sur épuisement (SSE error).

    Bonus : renderer App.jsx détecte l'axe cylindre couché via paires égales (le solveur fait l ≠ orig_l en rotation X/Z).

Une question sur une release ? [email protected]

Voir l'état actuel · Sécurité