# Changelog

## Score

- CAI 46 → 46 (-0.8)
- Rubric changed (rubric-2026.10.1 → rubric-2026.10.5) — scores are not directly comparable.

## Lenses

- Code Health 64 → 58 (-6.7)
- Architecture 86 → 86 (-0.2)
- Maturity 61 → 58 (-2.7)
- Readiness 39 → 39 (-0.1)
- Security 61 → 61 (+0.0)
- Accessibility 40 → 40 (+0.0)
- Performance 80 → 80 (+0.0)

## Resolved (80)

- Change-coupling hub: rigid_solver.py → hybrid_entity.py, broadphase.py, diff_gjk.py, sph_solver.py (genesis/engine/solvers/rigid/rigid_solver.py)
- Duplicated block (10 lines × 2) (genesis/engine/solvers/rigid/collider/support_field.py)
- Duplicated block (10 lines × 2) (genesis/engine/solvers/rigid/constraint/solver.py)
- Duplicated block (10–13 lines × 3) (genesis/engine/solvers/rigid/constraint/solver.py)
- Duplicated block (11–13 lines × 2) (genesis/engine/solvers/rigid/collider/contact.py)
- Duplicated block (12–15 lines × 2) (genesis/engine/solvers/rigid/constraint/solver.py)
- Duplicated block (13 lines × 2) (genesis/engine/solvers/rigid/collider/contact.py)
- Duplicated block (14 lines × 3) (genesis/engine/solvers/rigid/collider/diff_gjk.py)
- Duplicated block (18–21 lines × 2) (genesis/engine/solvers/rigid/collider/contact.py)
- Duplicated block (20–26 lines × 2) (genesis/engine/solvers/rigid/collider/contact.py)
- Duplicated block (22–29 lines × 2) (genesis/engine/solvers/rigid/constraint/solver.py)
- Duplicated block (23 lines × 2) (genesis/engine/solvers/rigid/collider/collider.py)
- Duplicated block (23 lines × 2) (genesis/engine/solvers/rigid/collider/contact.py)
- Duplicated block (2–20 lines × 3) (genesis/engine/solvers/rigid/collider/narrowphase.py)
- Duplicated block (30–31 lines × 2) (genesis/engine/solvers/rigid/collider/epa.py)
- Duplicated block (41 lines × 2) (genesis/engine/solvers/rigid/collider/contact.py)
- Duplicated block (5 lines × 2) (genesis/engine/solvers/rigid/collider/contact.py)
- Duplicated block (5 lines × 2) (genesis/engine/solvers/rigid/collider/contact.py)
- Duplicated block (5 lines × 4) (genesis/engine/solvers/rigid/collider/narrowphase.py)
- Duplicated block (5 lines × 4) (genesis/engine/solvers/rigid/constraint/backward.py)
- …and 60 more

## New (119)

- Change-coupling hub: rigid_solver.py → hybrid_entity.py, pbd_solver.py, broadphase.py, diff_gjk.py, sph_solver.py (genesis/engine/solvers/rigid/rigid_solver.py)
- Duplicated block (10–12 lines × 2) (examples/rigid/merge_entities.py)
- Duplicated block (10–13 lines × 2) (genesis/engine/solvers/rigid/constraint/backward.py)
- Duplicated block (11–12 lines × 2) (genesis/engine/solvers/rigid/collider/narrowphase.py)
- Duplicated block (11–13 lines × 2) (genesis/engine/solvers/rigid/collider/epa.py)
- Duplicated block (13 lines × 2) (examples/rigid/screw_constraint.py)
- Duplicated block (14 lines × 3) (genesis/engine/solvers/rigid/collider/diff_gjk.py)
- Duplicated block (14–15 lines × 2) (genesis/engine/solvers/rigid/collider/narrowphase.py)
- Duplicated block (15 lines × 2) (genesis/engine/solvers/rigid/collider/narrowphase.py)
- Duplicated block (16 lines × 2) (genesis/engine/solvers/rigid/collider/diff_gjk.py)
- Duplicated block (16 lines × 2) (genesis/engine/solvers/rigid/collider/epa.py)
- Duplicated block (17–19 lines × 2) (genesis/engine/solvers/rigid/collider/contact.py)
- Duplicated block (20 lines × 2) (genesis/engine/solvers/rigid/collider/contact.py)
- Duplicated block (24 lines × 2) (genesis/engine/solvers/rigid/collider/collider.py)
- Duplicated block (28 lines × 2) (genesis/engine/solvers/rigid/collider/narrowphase.py)
- Duplicated block (3–5 lines × 4) (genesis/engine/solvers/rigid/collider/narrowphase.py)
- Duplicated block (5 lines × 2) (genesis/engine/solvers/rigid/collider/box_contact.py)
- Duplicated block (5 lines × 2) (genesis/engine/solvers/rigid/collider/mpr.py)
- Duplicated block (5 lines × 3) (genesis/engine/solvers/rigid/constraint/backward.py)
- Duplicated block (5 lines × 4) (genesis/engine/solvers/rigid/constraint/backward.py)
- …and 99 more

## Changes since last survey

- 44 commits — 23 feature/other, 21 fixes

## By area

- genesis/engine — 20 commits
- genesis/utils — 7 commits
- tests/rigid — 6 commits
- .github/workflows — 2 commits
- genesis/recorders — 2 commits
- genesis/vis — 2 commits
- (root) — 1 commit
- examples/locomotion — 1 commit
- tests/benchmarks — 1 commit
- tests/parsers — 1 commit
- tests/rendering — 1 commit

## Notable commits

- fix: [BUG FIX] Drop torch compile that is causing side-effects without performance benefits. (#3527)
- fix: [BUG FIX] Fix contact markers frozen in place after a scene reset. (#3493)
- fix: [BUG FIX] Fix contact points placed outside of convex geoms and deep contacts dropped by EPA. (#3514)
- fix: [BUG FIX] Fix contacts dropped by GJK between aligned boxes of equal size. (#3517)
- fix: [BUG FIX] Fix contacts missing at corners of the contact patch. (#3520)
- fix: [BUG FIX] Fix convex contact depth, normal and placement errors. (#3512)
- fix: [BUG FIX] Fix flickering of the ground plane texture. (#3576)
- fix: [BUG FIX] Fix multiple box-box contacts edge-cases. (#3504)
- fix: [BUG FIX] Fix named terrain cache invalidation when its subterrain parameters change. (#3456)
- fix: [BUG FIX] Fix non-deterministic GPU simulations. (#3510)
- fix: [BUG FIX] Fix random crash on CUDA when rebuilding a scene with the viewer open. (#3553)
- fix: [BUG FIX] Fix rendered views depending on the precision of the simulation. (#3571)
- fix: [BUG FIX] Fix scene build and shared memory occupancy model on AMD GPUs. (#3545)
- fix: [BUG FIX] Fix the incremental Hessian update of the rigid constraint solver on AMDGPU. (#3537)
- fix: [BUG FIX] Fix zero-depth contacts between convex geoms overlapping almost as much along two directions. (#3518)
- fix: [BUG FIX] Import a masked glTF material with its alpha cutout applied. (#3341)
- fix: [BUG FIX] Push MPR contacts along the minimum separation more reliably. (#3539)
- fix: [FEATURE] Let the variants of a heterogeneous entity differ in scale, fixed base pose and joint parameters. (#3497)
- fix: [MISC] Fix flaky interactive viewer recording test. (#3577)
- fix: [MISC] Fix spurious warning on scene reset with threaded recorders. (#3574)
- …and 24 more

## Architecture

- 0 containers · 1 bounded contexts · 0 dependency edges (baseline)
