Repository navigation
Conversation
This was referenced Oct 2, 2026
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #327 +/- ##
==========================================
+ Coverage 88.21% 88.39% +0.18%
==========================================
Files 227 239 +12
Lines 36147 38534 +2387
Branches 2324 2732 +408
==========================================
+ Hits 31886 34061 +2175
- Misses 4257 4468 +211
- Partials 4 5 +1
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
geonnave
force-pushed
the
site-editor-p2
branch
from
October 4, 2026 02:38
fafc6b8 to
95b759d
Compare
geonnave
force-pushed
the
site-editor-p2
branch
from
October 15, 2026 10:56
95b759d to
c6a6c1f
Compare
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
… page Any web page in the browser can send requests to 127.0.0.1 with a valid Host header, and behind a permissive CORS policy read the replies, so the Host check alone let it save site.toml; a server bound beyond loopback took any Host. The peer address, Origin and Sec-Fetch-Site are checked. AI-assisted: Claude Opus 5.5
…ng tables A patched file is read back and must give the model that was sent, so a layout the patcher does not follow is refused rather than written. AI-assisted: Claude Opus 5.5
…adable files AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
…e saving AI-assisted: Claude Opus 5.5
geonnave
force-pushed
the
site-editor-p2
branch
from
October 15, 2026 11:09
c6a6c1f to
fe52c36
Compare
Breaking: schema 3 calibration files are refused, so a calibration is collected again. swarmit's own calibration reader still expects schema 3 and needs its matching change before the dashboard reads these files. AI-assisted: Claude Opus 5.5
… block AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
…'s next round AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
…tangle Breaking, cross-repo: the messages and the config page (magic SWRP, 872 bytes) only match a swarmit bootloader and net core that store stations by mask, and swarmit's Python must accept mask messages before it relays them. Robots below device info 4 are refused with a reflash. AI-assisted: Claude Opus 5.5
…y-run AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
…s of their own AI-assisted: Claude Opus 5.5
Breaking wire change, landing with DotBot-libs' 16-bit calibrated field: every advertisement field after the mask moves by one byte and the vendored dotbot_control.wasm is rebuilt at ABI 3 from that change. With the one-byte mask, a calibration naming station 8 or above read every sandbox robot as missing it and resent homographies on each advert. AI-assisted: Claude Opus 5.5
… join AI-assisted: Claude Opus 5.5
…angles A station that never sees part of the site yields no sweep pair there, so the extent drops nothing a station could solve, whereas the box around its spins dropped areas such as a staging strip the robots never spun in. AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
A robot with no heading first gets a 40 mm probe move toward its first point, and its batch once it has a heading and the probe is done. While waypoints_awaiting_heading is set, the waypoint report and the mode are the probe's, so a client watching mode alone sees an early arrival. AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
…overage AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
… a placed one AI-assisted: Claude Opus 5.5
…body AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
… a file A placement's id comes from its stations, not its tag or anchor, so the same move saved twice, or a move into the source's own site, landed on an existing path; save_placed keeps that file and refuses the source's id. AI-assisted: Claude Opus 5.5
…ew file AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
…editor AI-assisted: Claude Opus 5.5
…on stills AI-assisted: Claude Opus 5.5
…on save AI-assisted: Claude Opus 5.5
geonnave
force-pushed
the
site-editor-p2
branch
from
October 15, 2026 12:29
fe52c36 to
84ad3e1
Compare
This branch has not been deployed
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.
Stacked on #326 (calibration placement), which sits on #315 (the site editor) and #343 (the top of the LH2 multi-station stack). Merges after them; until then the diff also carries their commits.
Comfort for the site editor, no file format change:
site.toml. The still is the.jpgthatcamera-calibrate collectsaves beside a registration, warped server side with OpenCV at 5 mm per pixel; without OpenCV or the image, the camera is listed with "no still saved" and nothing is drawn.Routes:
GET /api/backdrops(the site's calibrations and cameras, from the pack'scalibrations/and~/.dotbot/calibrations/<site>/),GET /api/backdrops/camera/{id8}.png.Not done: editing an inline
[sites.<name>]table, which this phase was planned to include. Inline site tables are gone from the config (sites are packs only), so there is nothing to edit.Plan: rendered copy https://claude.ai/artifact/LHUXjhx1nMWifC2oGRBayt, source https://github.com/DotBots/dotbot-workspace/blob/main/plans/site-editor/plan.html (both internal).
A calibration or camera file that cannot be read, or a calibration made against another anchor (a free-mode one before it is placed, or one from before an anchor change), is skipped rather than turning the whole listing into a 500 or being drawn in the wrong frame. A camera whose homography is not 3 x 3, or a machine without OpenCV, gets no still. Stills are capped at 4096 px on their long side and their URL carries the image's mtime and the area's rectangle, so the browser fetches a new one when either moves; the listing is read again after every save and reload. A new selection starts a new undo step, an undo that puts another area at the selected index drops the selection, and shortcuts work while a checkbox holds the focus.
Validation. pytest: no backdrop for a site without files; a spin calibration of the site served by its centres; a synthetic camera registration with its still warped onto
dev-corneras a 200 x 200 PNG, and a 404 for an unknown camera. vitest: the history (steps, coalescing, the dropped redo branch, the limit), undo and redo of a field edit from the buttons and the keys, nudges by a step, a millimetre and ten steps undone as one, a backdrop offered only when present and drawn when ticked.npm run lint, typecheck and build;pre-commit run --all-files; full pytest 1806 passed, vitest 862 passed; also unreadable and other-frame files skipped, the still's content checked rather than its size, a capped still, a still URL changing with its area, two selections' nudges undone as two steps, keys in a field left to it. By hand, headless, against a copy of a real 2 x 4 m pack with a corner calibration and a camera registration beside it: both backdrops drawn when ticked (the still lands on its area with the markers where they belong),dev-cornernudged and the nudge undone with Ctrl+Z, in both themes.dotbot/site_backdrops.pydotbot/tests/test_site_backdrops.pydotbot/console-web/src/siteEditor/SiteEditor.tsxdotbot/console-web/src/siteEditor/siteEditor.test.tsxdotbot/console-web/src/siteEditor/Canvas.tsxdotbot/console-web/src/siteEditor/Inspector.tsxdotbot/console-web/src/siteEditor/history.test.tsdotbot/console-web/src/siteEditor/history.tstypes.ts,dotbot/site_editor.py,api.ts