Repository navigation
Conversation
This was referenced Oct 2, 2026
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #329 +/- ##
==========================================
+ Coverage 88.21% 88.43% +0.22%
==========================================
Files 227 240 +13
Lines 36147 39142 +2995
Branches 2324 2872 +548
==========================================
+ Hits 31886 34616 +2730
- Misses 4257 4521 +264
- 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-p4
branch
from
October 4, 2026 02:39
60e10e8 to
74fea33
Compare
geonnave
force-pushed
the
site-editor-p4
branch
from
October 15, 2026 10:56
74fea33 to
3e9b2b7
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-p4
branch
from
October 15, 2026 11:09
3e9b2b7 to
823a58f
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
…obots AI-assisted: Claude Opus 5.5
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
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
…moving ones AI-assisted: Claude Opus 5.5
…leave omitted tables AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
AI-assisted: Claude Opus 5.5
…s charger 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
… name AI-assisted: Claude Opus 5.5
geonnave
force-pushed
the
site-editor-p4
branch
from
October 15, 2026 12:29
823a58f to
96f4a05
Compare
This was referenced Oct 15, 2026
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 #328 (walls and obstacles), on #327, #326, #315 and the LH2 stack to #343. Merges after them; until then the diff also carries their commits.
Things on the floor become part of a site pack, read by every surface in this PR:
SiteSection.objects, a kind from the four above (anything else is refused),Site.objectsandSite.objects_of(kind).GET /controller/sitecarriesobjects.chargerobject, and the queue lines up with it. A site without one keeps today's derived point on staging's far edge. Its README says how to add one.B) places a charger on a click, and the inspector sets its name, kind, position, heading and comment. Objects move by drag or arrows, with Undo, and are checked for unique names and for lying inside the extent. The patcher now writes[areas.*]and[objects.*]through one function, so objects get the areas' guarantees: an untouched object is left byte for byte, a rename keeps its place and comment, a zero heading is not written.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 robot with a learned battery model charges on a charger too. Object names may hold a comma (only an area name is read as an
x,y,w,hliteral), inline objects are refused like inline areas, and a body that leaves outobjectsleaves the file's objects alone.Validation. pytest: objects read, refused for an unknown kind, served and round-tripped through the REST model; the patcher's byte-identical round trip, a move and rename keeping the comment and heading, an add without a zero heading; the charging-station layout taking its charger from the site; in the simulator, a robot on a charger gains a twelfth of a full charge in ten seconds while one off it drains. vitest: the map draws an object; the editor places a charger, turns it into a dock, renames it and saves it on the grid; name and extent checks.
npm run lint, typecheck and build;pre-commit run --all-files; full pytest 1841 passed, vitest 871 passed.By hand, headless: a charger added to a new pack through the editor's REST save;
dotbot run simulator --site charged --robots 4;python -m dotbot.examples.charging_station.charging_stationagainst it queues the robots at x = 3200 and charges each at (3200, ~3820), the charger's place from the pack rather than the derived (2000, 4000), then parks them.dotbot/tests/test_site_objects.pydotbot/site_toml.pydotbot/console-web/src/siteEditor/Inspector.tsxdotbot/console-web/src/siteEditor/Canvas.tsxdotbot/console-web/src/siteEditor/SiteEditor.tsxdotbot/dotbot_simulator.pydotbot/console-web/src/MapView.tsxdotbot/models.py,edit.ts,charging_station.py,siteObjects.ts,dotbot/site.py,edit.test.ts,dotbot/config.py,siteEditor.test.tsx,types.ts,README.md,test_site_editor.py,types.ts,dotbot/site_editor.py,barrierLayer.test.tsx,plant.py,api.ts,test_server.py,test_qrkey_app.pyDocs (the site pack format page) follow after review.