Skip to content

The two-month review: 92 defects fixed across the sim, the firmware and the CLI (4.36.0) - #555

Merged
1e0ng merged 2 commits into
mainfrom
review-fixes
Oct 9, 2026
Merged

1e0ng merged 2 commits into
mainfrom
review-fixes

Conversation

@1e0ng

@1e0ng 1e0ng commented Oct 9, 2026

Copy link
Copy Markdown
Owner

A review of every change since 2026-08-07 (177 commits): 24 review passes over 12 subsystem slices, two verifiers per finding, 92 defects confirmed and fixed, plus 11 regressions a second review of the fixes caught. Every fix ships with a dedicated test that fails on the old code. The CHANGELOG 4.36.0 entry lists everything by area; the headline user-visible changes:

  • Hub firmware: DriveBase.reset() on encoder servos raises mid-move and re-zeroes an ICM-45686 heading (the 1.93.0 contract); QTR pin claims last one program; a move armed against faster opposite motion tracks its real profile (signed entry ramp); a short carry segment hands over at the reachable speed; curve(0) after a brake is a move, not a stop; a long-held late start press no longer kills the run; log durations survive the ticks wrap.
  • Sim runtime: the reset pose follows adopted wheels; every run ends coasted with the gyro off; stale pending stops, task-motor torque on a wheel slot, then= validation and open-loop Servo.run() fixed; speed changes re-anchor; maps export atomically, check references, keep the user's name, import cleanly, and an unconvertible legacy map no longer hides the others.
  • Brick library: stud tubes recorded as studs, phantom pin holes over axle holes, the 24-tooth gear's missing axle hole (bundle rebuilt: 32123, 32269, 32270, 32474, 33299, 3648 only); zip-slip and .. reference refusals; coarser packing for long parts; alias shadowing; the web page refuses out loud.
  • Desktop sim: undo carries path and unsaved state; refusal banner, magnet-seat undo points, drag heights; mesh-record/component-cycle/root/cylinder-axis validation; drafts land after the last change and an undo to clean drops them; window title; orbit direction; bad files end the launch; route loading refuses what it cannot place; the run-server reader survives any line; imports wait for a running program; Save changes writes the map shown.
  • CLI: servo-id -n runs through the launcher; the upload lock works across accounts; unversioned firmware asks before flashing; pre-1.92.0 hubs are re-probed; clean upload output; bare openbricks sim FILE.
  • CI: the rolling latest release publishes on main pushes again (it had skipped since 4.2.0); the versioned release and the PyPI upload now wait for every test job.

Local verification: Rust 225 passed (+ the known stale-extension real-runtime failure, CI rebuilds it), clippy clean; host suite 1030 passed (+ the 9 known stale-extension failures and one CI-only docstring test); C cores ASan/UBSan clean; unix MicroPython and CPython firmware legs green; patch coverage 97% on both sides; offline docs rebuilt.

🤖 Generated with Claude Code

https://claude.ai/code/session_016higr4k4yNohYeKod1f1HY

openbricks and others added 2 commits October 9, 2026 20:31
…nd the CLI (4.36.0)

A review of every change since 2026-08-07 (177 commits, 24 review
passes over 12 subsystem slices, two verifiers per finding) found 92
defects; all are fixed here, each with a dedicated test that fails on
the old code, plus eleven regressions a second review of the fixes
caught. The CHANGELOG entry lists them by area; the user-visible
changes are:

- hub: encoder-servo DriveBase.reset() raises mid-move and re-zeroes an
  ICM-45686 heading (the 1.93.0 contract); a QTR array's pin claims
  last one program; the signed entry ramp, the carry-handover clamp,
  curve(0) clearing the stop rule, the late start-press marker;
  run-log edge counts and ticks-wrap-safe durations.
- sim runtime: the reset pose follows adopted wheels; every run ends
  coasted with the gyro off; stale pending stops, task-motor torque
  left on a wheel slot, then= validation as the hub, open-loop
  Servo.run(); speed changes re-anchor; maps export atomically, check
  their references, keep the user's name, import cleanly, list an
  unconvertible legacy map instead of hiding every other one.
- brick library: stud tubes, phantom pin holes, the 24-tooth gear's
  axle hole (bundle rebuilt: 32123, 32269, 32270, 32474, 33299, 3648),
  zip-slip and `..` reference refusals, coarser packing for long
  parts, alias shadowing, a web page that refuses out loud.
- desktop sim: undo carries path and unsaved state; the refusal banner,
  magnet-seat undo points, drag heights; validation of mesh records,
  component cycles, roots and cylinder axes; drafts land after the
  last change and an undo to clean drops them; window title; orbit
  direction; bad files end the launch; route loading refuses what it
  cannot place; the run-server reader survives any line; imports wait
  for a running program; Save changes writes the map shown.
- CLI: servo-id -n runs through the launcher; the upload lock works
  across accounts; unversioned firmware asks before flashing; old hubs
  are re-probed; upload output is clean; bare `openbricks sim FILE`.
- CI: the rolling `latest` release publishes on main pushes again
  (skipped since 4.2.0); the versioned release and the PyPI upload wait
  for every test job.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016higr4k4yNohYeKod1f1HY
The new carry-handover check used M_PI, which clang exposes under
-std=c11 and GCC does not; the core's own guard now covers the test.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016higr4k4yNohYeKod1f1HY
@codecov

codecov Bot commented Oct 9, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 97.50642% with 68 lines in your changes missing coverage. Please review.
✅ Project coverage is 97.39%. Comparing base (21f744c) to head (870e848).
⚠️ Report is 213 commits behind head on main.

Files with missing lines Patch % Lines
tools/sim/src/main.rs 82.66% 13 Missing ⚠️
tools/sim/src/sim.rs 92.40% 12 Missing ⚠️
tools/sim/src/simulate.rs 98.27% 10 Missing ⚠️
tools/sim/src/app.rs 97.42% 8 Missing ⚠️
tools/sim/src/route.rs 97.27% 6 Missing ⚠️
tools/openbricks/openbricks_dev/_uplock.py 81.81% 4 Missing ⚠️
tools/sim/src/fetch.rs 94.28% 4 Missing ⚠️
tools/sim/src/assembly.rs 98.69% 3 Missing ⚠️
tools/openbricks/openbricks_sim/mapfile.py 96.92% 2 Missing ⚠️
tools/sim/src/bundle.rs 97.01% 2 Missing ⚠️
... and 4 more
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #555      +/-   ##
==========================================
+ Coverage   95.72%   97.39%   +1.67%     
==========================================
  Files          50       88      +38     
  Lines        5192    32646   +27454     
==========================================
+ Hits         4970    31796   +26826     
- Misses        222      850     +628     
Flag Coverage Δ
c-core 97.57% <93.33%> (+2.05%) ⬆️
openbricks-dev 99.55% <92.72%> (+0.53%) ⬆️
openbricks-py 97.03% <100.00%> (+1.28%) ⬆️
openbricks-sim 97.72% <98.74%> (+4.55%) ⬆️
sim-rs 97.14% <97.46%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@1e0ng
1e0ng merged commit 8a11623 into main Oct 9, 2026
35 checks passed
@1e0ng
1e0ng deleted the review-fixes branch October 9, 2026 12:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant