Conversation
AI-assisted: Claude Opus 4.7
AI-assisted: Claude Opus 4.7
AI-assisted: Claude Opus 4.7
AI-assisted: Claude Opus 4.7
AI-assisted: Claude Opus 4.7
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
AI-assisted: Claude Opus 4.7
AI-assisted: Claude Opus 4.7
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
AI-assisted: Claude Opus 4.8
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
AI-assisted: Claude Opus 4.8
AI-assisted: Claude Opus 4.8
AI-assisted: Claude Opus 4.8
AI-assisted: Claude Opus 4.8
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
AI-assisted: Claude Opus 4.8
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
…s_dir AI-assisted: Claude Opus 4.8
AI-assisted: Claude Opus 4.8
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
AI-assisted: Claude Opus 4.8
AI-assisted: Claude Opus 4.8
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
release: 0.29.0
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Promotes accumulated
developwork tomain.mainis fully contained indevelop(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 onmainafterward.