Skip to content

RobotError is waldoctl's; type the sync tools - #37

Merged
Jepson2k merged 3 commits into
mainfrom
feat/thin-python-binding
Sep 4, 2026
Merged

Jepson2k merged 3 commits into
mainfrom
feat/thin-python-binding

Conversation

@Jepson2k

@Jepson2k Jepson2k commented Sep 4, 2026

Copy link
Copy Markdown
Collaborator

Part of the coordinated feat/thin-python-binding work across waldoctl, par6 and Waldo-Commander; the branch name matches so the cross-repo CI resolves this branch instead of the tag.

RobotError comes from waldoctl. A frontend represents a refused command the same way whichever backend raised it, so the refusal type belongs to the contract, not to this backend. Same six fields and the same wire list in both directions, and it is an exception rather than a frozen dataclass, so a client can raise it as-is. make_error, the catalog and extract_robot_error are unchanged.

One consequence: the tool-error attribution rebuilds the error from its wire form instead of calling dataclasses.replace on it. A replace on an exception does not survive the copy the controller state makes, and it raised RobotError.__init__() missing 5 required positional arguments in place.

Typing. The sync client and the robot factory now hold SyncTool, which is what make_sync_tool actually returns.

Pin moves to waldoctl v0.11.2.

Tests: 197 unit and 80 integration pass. One unit test fails locally for a missing rtree module, which also fails on untouched main and is an environment gap, not a code change.

🤖 Generated with Claude Code

https://claude.ai/code/session_014Bo12kumRx9PHnY9bL8qgn

A frontend represents a refused command the same way whichever backend
raised it, so the refusal type is the contract's: same six fields, same
wire list in both directions, and an exception rather than a dataclass so
a client can raise it as-is. make_error, the catalog and
extract_robot_error are unchanged. The tool-error attribution rebuilds
the error from the wire, because a dataclass replace on an exception does
not survive the copy the state makes of it.

The sync client and the robot factory hold SyncTool, which is what
make_sync_tool returns, and the waldoctl pin moves to v0.11.2.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Bo12kumRx9PHnY9bL8qgn
Jepson2k and others added 2 commits September 4, 2026 02:24
The release that carries the shared RobotError this branch adopts.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Bo12kumRx9PHnY9bL8qgn
Adding 91 to the live port runs past 65535 whenever the ephemeral range
hands out a high one, and connect() then raises OverflowError instead of
timing out — the macOS runners hit it. A port the kernel just handed back
with nothing bound to it is dead by construction and cannot overflow.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Bo12kumRx9PHnY9bL8qgn
@Jepson2k
Jepson2k merged commit 4d83eaa into main Sep 4, 2026
25 of 26 checks passed
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