Skip to content

Merge develop into main#273

Merged
geonnave merged 222 commits into
mainfrom
develop
Jun 5, 2026
Merged

Merge develop into main#273
geonnave merged 222 commits into
mainfrom
develop

Conversation

@geonnave

@geonnave geonnave commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Promotes accumulated develop work to main.

main is fully contained in develop (no main-only commits), so this is a clean merge with nothing to reconcile. Opening for review and merge; the real (non-rc) version bump (where applicable) and the release tag follow on main afterward.

geonnave added 30 commits May 18, 2026 18:08
AI-assisted: Claude Opus 4.7
AI-assisted: Claude Opus 4.7
AI-assisted: Claude Opus 4.7
DotBot unification: cli scaffold
Renames the module dirs (calibration_app→app, calibration_cli→cli,
calibration_exporter→exporter) and rewires dotbot_lh2_calibration.*
imports to dotbot.calibration.*. The C firmware stays in its own
repo (out of scope for this Phase 2 fold).

AI-assisted: Claude Opus 4.7
The original test in dotbot-lh2-calibration called calculate_camera_point
with positional args from a pre-LH2Counts signature; fixed during the
carry-over, golden values kept.

AI-assisted: Claude Opus 4.7
dotbot calibrate now runs the Textual TUI by default and exposes
`dotbot calibrate export PATH` for the C-header exporter. Runtime
deps (opencv-python, textual) stay gated behind pip install
dotbot[calibrate]; ImportError prints an install hint instead of
a traceback.

AI-assisted: Claude Opus 4.7
Three modules (cli, nrf_flash, config sample) move in unchanged —
provision's internal imports were already relative. The standalone
dotbot-provision PyPI package enters a one-cycle deprecation.

AI-assisted: Claude Opus 4.7
Drops the lazy-attach + ImportError-tolerance shim for provision;
the package is now in-tree. swarmit stays lazy-loaded (Phase 6).

AI-assisted: Claude Opus 4.7
Adds [provision] (intelhex) and replaces [calibrate]'s package dep
with opencv-python + textual. [testbed] keeps swarmit only.
Backwards-compat console_scripts (dotbot-provision,
dotbot-calibration, dotbot-calibration-exporter) now resolve to
the vendored module paths.

AI-assisted: Claude Opus 4.7
After Phase 2's fold, calibrate's backend is in-tree and uses dotbot's
own modules — no longer subject to the swarmit-style protocol-registry
collision that motivated the subprocess workaround.

AI-assisted: Claude Opus 4.7
setup.cfg ignores dotbot/calibration and dotbot/provision in pytest's
--doctest-modules walk: those packages import textual/cv2/intelhex
which live behind extras and aren't installed in the test env.
Plus black 25.11.0 reformat (multi-line single-arg calls collapsed
to one line) and one bare except: → except Exception: in
lighthouse2.

AI-assisted: Claude Opus 4.7
CI doesn't install [calibrate] extras; importorskip cv2 keeps the
test green when opencv-python is absent. Runs unchanged with the
extra installed.

AI-assisted: Claude Opus 4.7
dotbot/calibration and dotbot/provision come from standalone PyPI
packages that themselves had ~0% test coverage. Folding them in
shouldn't tank codecov for the rest of the codebase. Real tests
for these modules are a tracked follow-up.

AI-assisted: Claude Opus 4.7
Two new tests exercise the ImportError branches in dotbot/cli/calibrate.py
(when [calibrate] extras aren't installed). Bumps patch coverage on
the new cli/calibrate.py code from ~0% to most of its body.

AI-assisted: Claude Opus 4.7
Project coverage uses target=auto + 1% tolerance so it tracks main
and catches long-term rot; patch coverage is informational-only so
vendoring / refactor PRs don't block on diff coverage they can't
realistically hit. Reviewers still see the patch number in the PR
comment.

AI-assisted: Claude Opus 4.7
dotbot-provision / dotbot-calibration / dotbot-calibration-exporter
never shipped from dotbot-python — the names belonged to the
standalone PyPI packages, which keep their own scripts during their
own deprecation cycle. Adding the aliases here would imply those
console_scripts were ever part of this package.

AI-assisted: Claude Opus 4.7
`dotbot calibrate` runs the TUI by default but the subcommand was
invisible in `dotbot calibrate --help`. Add `dotbot calibrate tui`
as a discoverable alias that shares the same loader. Picked up the
matching install-hint test for parity with the export fallback.

AI-assisted: Claude Opus 4.7
Module-level SERIAL_PORT_DEFAULT = get_default_port() called
list_ports.comports() at import time, so even `dotbot calibrate
--help` enumerated serial ports. Switch to a Click default-factory
so the call only fires when the TUI actually runs.

AI-assisted: Claude Opus 4.7
…aphy_matrix

cv2 is only needed for the capture/compute path; the export path
reads/writes bytes only. Moving the import inside the one function
that uses it lets `dotbot calibrate export` work without
opencv-python installed — operators using remote LH2 calibration
no longer need the 50 MB wheel.

AI-assisted: Claude Opus 4.7
Path.exists() follows symlinks, so a dangling symlink reports the
file as missing without saying why (the file appears in `ls` but
its target is gone — typically after the local source tree was
rebuilt or relocated). Now the error message includes the broken
target so the operator knows to re-fetch.

AI-assisted: Claude Opus 4.7
Rename leaves room for future calibration types (calibrate-imu,
calibrate-color) without restructuring. Subcommands now collect /
apply / export. `apply --bare/--sandbox <path>` is stubbed today
— the sandbox path extends dotbot/provision/ for partial config
rewrites; the bare path is gated on bare-metal firmware work.
OTA / swarm-wide counterparts will land under
`dotbot testbed calibrate-lh2` (see plans/ideas/).

AI-assisted: Claude Opus 4.7
geonnave added 28 commits June 4, 2026 12:17
Drives the first bot in a circle over plain HTTP. Adds `requests` as a
dep: the demo (and the docs scripting example) talk to the controller
with no async and no internal client, so it doubles as a copy-paste
template; the internal httpx-based client stays for the richer examples.

AI-assisted: Claude Opus 4.8
AI-assisted: Claude Opus 4.8
The scripting example moved into the simulator guide (not removed); the
page now leads with install, then the no-hardware simulator, then the
"Deploy a real swarm" path.

AI-assisted: Claude Opus 4.8
The cache moves to user-level ~/.dotbot/artifacts/ (shared across dirs;
override DOTBOT_ARTIFACTS_DIR), as <source>-<version>/ dirs + a manifest, so
swarmit and DotBot-firmware (independent version schemes) never collide.
`fw fetch` pulls from both sources, downloading every .hex/.bin a release
lists via the GitHub API (fixing the silent .bin 404s). `device flash <app>`
searches the cache, preferring a local build over the newest release.

AI-assisted: Claude Opus 4.8
`dotbot fw fetch` with no args now resolves the pinned versions (swarmit from the installed package, dotbot-firmware from a declared constant) instead of the latest release; pass `-f latest` for the old behavior.

AI-assisted: Claude Opus 4.8
Aligns the no-`-f` default with `dotbot fw fetch` so both stage the same `swarmit-<version>/` cache dir; pass `-f latest` for the old behavior.

AI-assisted: Claude Opus 4.8
The key was never read - $DOTBOT_ARTIFACTS_DIR is the cache-location override. A config that still sets it now fails (extra keys are forbidden).

AI-assisted: Claude Opus 4.8
Pure move: flash.py keeps the device-flashing engine and imports fetch_assets/resolve_fw_root back from fetch.py for flash_role's auto-fetch (one-way dep, no cycle). No behavior change.

AI-assisted: Claude Opus 4.8
dotbot: README swarm-first rework + fetch defaults to latest
AI-assisted: Claude Opus 4.8
AI-assisted: Claude Opus 4.8
AI-assisted: Claude Opus 4.8
AI-assisted: Claude Opus 4.8
@geonnave geonnave merged commit dbe0fe0 into main Jun 5, 2026
12 checks passed
@geonnave geonnave deleted the develop branch June 5, 2026 06:32
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