# Changelog

## Score

- CAI 69 → 58 (-11.2)
- Rubric changed (rubric-2026.10.1 → rubric-2026.10.5) — scores are not directly comparable.

## Lenses

- Code Health 75 → 65 (-10.1)
- Architecture 87 → 87 (+0.1)
- Maturity 74 → 48 (-26.3)
- Readiness 62 → 62 (+0.0)
- Security 82 → 81 (-0.4)

## Resolved (79)

- DatasetReader.get_item (cognitive 18) (src/lerobot/datasets/dataset_reader.py)
- Documentation: no project overview (src/lerobot/policies/groot/README.md)
- Duplicated block (10 lines × 2) (src/lerobot/policies/pi0/modeling_pi0.py)
- Duplicated block (10 lines × 3) (src/lerobot/policies/pi0/modeling_pi0.py)
- Duplicated block (10–11 lines × 7) (src/lerobot/robots/koch_follower/koch_follower.py)
- Duplicated block (11 lines × 4) (src/lerobot/robots/koch_follower/koch_follower.py)
- Duplicated block (13 lines × 2) (src/lerobot/robots/koch_follower/koch_follower.py)
- Duplicated block (13 lines × 2) (src/lerobot/robots/koch_follower/koch_follower.py)
- Duplicated block (14 lines × 2) (src/lerobot/robots/koch_follower/koch_follower.py)
- Duplicated block (14 lines × 2) (src/lerobot/teleoperators/koch_leader/koch_leader.py)
- Duplicated block (14–15 lines × 2) (src/lerobot/policies/pi0/modeling_pi0.py)
- Duplicated block (17–20 lines × 2) (src/lerobot/datasets/video_utils.py)
- Duplicated block (21–22 lines × 2) (src/lerobot/rollout/strategies/dagger.py)
- Duplicated block (25–26 lines × 2) (src/lerobot/robots/so_follower/so_follower.py)
- Duplicated block (36–42 lines × 2) (examples/phone_to_so100/record.py)
- Duplicated block (5 lines × 2) (src/lerobot/policies/molmoact2/modeling_molmoact2.py)
- Duplicated block (56 lines × 2) (src/lerobot/policies/pi0/modeling_pi0.py)
- Duplicated block (6 lines × 2) (src/lerobot/motors/motors_bus.py)
- Duplicated block (6 lines × 2) (src/lerobot/policies/pi0/modeling_pi0.py)
- Duplicated block (6 lines × 2) (src/lerobot/policies/pi0/modeling_pi0.py)
- …and 59 more

## New (175)

- BatchedRandomAffine.__init__ (cognitive 21) (src/lerobot/transforms/transforms.py)
- BatchedRandomAffine.__init__ (cyclomatic 19) (src/lerobot/transforms/transforms.py)
- Change coupling: lekiwi.py ↔ so_follower.py (src/lerobot/robots/lekiwi/lekiwi.py)
- Change coupling: so_follower.py ↔ so_leader.py (src/lerobot/robots/so_follower/so_follower.py)
- ChunkRuntime.__init__ (cognitive 23) (src/lerobot/inference/execution.py)
- ChunkRuntime.__init__ (cyclomatic 23) (src/lerobot/inference/execution.py)
- ChunkRuntime.accept (cognitive 19) (src/lerobot/inference/execution.py)
- ChunkRuntime.accept (cyclomatic 18) (src/lerobot/inference/execution.py)
- ChunkRuntime.begin (cognitive 16) (src/lerobot/inference/execution.py)
- DM05Config.__post_init__ (cognitive 20) (src/lerobot/policies/dm05/configuration_dm05.py)
- DM05Config.__post_init__ (cyclomatic 21) (src/lerobot/policies/dm05/configuration_dm05.py)
- DM05CoreModelConfig.__init__ (cognitive 16) (src/lerobot/policies/dm05/core/modeling.py)
- DM05ForCausalLM.forward (cognitive 18) (src/lerobot/policies/dm05/core/modeling.py)
- DM05ForCausalLM.forward (cyclomatic 16) (src/lerobot/policies/dm05/core/modeling.py)
- DM05ForCausalLM.inference_action (cognitive 23) (src/lerobot/policies/dm05/core/modeling.py)
- DM05ForCausalLM.inference_action (cyclomatic 19) (src/lerobot/policies/dm05/core/modeling.py)
- DM05Policy._prepare_model_inputs (cognitive 29) (src/lerobot/policies/dm05/modeling_dm05.py)
- DM05Policy._prepare_model_inputs (cyclomatic 25) (src/lerobot/policies/dm05/modeling_dm05.py)
- DM05TokenizerProcessorStep.observation (cognitive 23) (src/lerobot/policies/dm05/processor_dm05.py)
- DM05TokenizerProcessorStep.observation (cyclomatic 19) (src/lerobot/policies/dm05/processor_dm05.py)
- …and 155 more

## Changes since last survey

- 36 commits — 25 feature/other, 11 fixes

## By area

- src/lerobot — 28 commits
- docs/source — 4 commits
- (root) — 2 commits
- .github/workflows — 1 commit
- tests/motors — 1 commit

## Notable commits

- fix: Fix: fix phone teleop enable signal, clarify the controls (#4730)
- fix: Revert "feat(rollout): add remote inference engine (#4836)" (#4936)
- fix: fix(datasets): pass the training seed to the streaming dataset (#4871)
- fix: fix(fastwam): device-agnostic default for Wan VAE and text encoder (#4677)
- fix: fix(hub): mark PEFT policies as adapters of their base model in the model card (#4952)
- fix: fix(motors): keep Feetech half-turn homing offsets representable (#4940)
- fix: fix(motors): remove trailing space from Feetech Acceleration_Multiplier name (#4926)
- fix: fix(pi0): cast the timestep embedding to the action dtype (#4078)
- fix: fix(pi05): drop dead state_proj from PEFT default targets (#4751)
- fix: fix(streaming): release HTTP response bodies without waiting for cyclic GC (#4903)
- fix: fix(unitree-g1): correctly clear the SDK dq field for position commands (#4664)
- change: Bump doc-builder workflow pin (#4854)
- change: Steerable external vlm (#4675)
- change: chore(dependencies): updating lower bounds on gym-pusht and gym-aloha dependencies (#4950)
- change: docs(rollout): improve remote inference docs (#4965)
- change: docs: add lerobot_camera_paxini to third-party sensors (#4606)
- change: feat(datasets): disk-less episode-pool video streaming (#3917)
- change: feat(flow-matching): explicit flow convention for the shared Euler solver (groot, evo1, wall_x) (#4075)
- change: feat(flow-matching): share sampling primitives across policies (groot, evo1, wall_x) (#4077)
- change: feat(flow-matching): share training-input construction across policies (#4631)
- …and 16 more
