Skip to content

Enforce held-object geometry and explicit reconciliation - #47

Draft
Jepson2k wants to merge 9 commits into
feat/demonstration-recordingfrom
feat/held-object-geometry
Draft

Enforce held-object geometry and explicit reconciliation#47
Jepson2k wants to merge 9 commits into
feat/demonstration-recordingfrom
feat/held-object-geometry

Conversation

@Jepson2k

@Jepson2k Jepson2k commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

Track held geometry under the PAROL6 flange and exempt only declared contact pairs. Attach/detach requires confirmed whole-world application; invalid contact names preserve the previous geometry. Reference or controller-context changes invalidate declarations and gate arm motion until explicit reconciliation or removal. Live and dry-run clients expose the same readback and capability. These declarations neither operate the gripper nor confirm a grasp or estimate payload.

Completion waits now query the exact command result. A tool can finish independently while arm motion is paused; finishing that tool cannot falsely complete the paused or cancelled arm command. The controller retains 1024 successful indices, including every command consumed by a blend. Unknown, cancelled, and expired results remain unconfirmed, and a controller session change during a wait raises ConnectionError. Client and controller must both support the new query. Replies to timed-out queries are filtered by response type so they cannot satisfy a different query.

Depends on #46 and the companion waldoctl attachment contract.

Validation: real fake-serial regressions reproduced false completion of paused or cancelled arm work, late-response confusion, and missed controller restarts. Restart detection also watches independent status broadcasts when the command socket stops receiving after a peer reset. The latest change passes 16 controller/tool/lifecycle/error checks and 13 Commander pause, nested-skill, blended-stepping, recording, restart, and project-import workflows. Formatting and type checks pass. Query and acknowledgement receives preserve caller cancellation when a controller reply arrives concurrently, avoiding the Python 3.11 wait_for cancellation race observed in CI. The integration workflow cancels a query on arrival of a real controller reply and confirms subsequent queries still work. The latest CI run passes all twelve combinations of Linux, macOS, Windows and Python 3.11–3.14, plus lint. Each primary suite contains 314 cases (306 passed and eight separately executed examples skipped on Linux/macOS; 305 passed and the additional SIGKILL-only test skipped on Windows). All eight examples also pass in their separate job step on every combination.

Companion PRs: waldoctl, par6, Waldo-Commander.

Jepson2k and others added 8 commits September 8, 2026 04:55
…ams with ERROR

set_shapes checked all eight slots of the homed array, but the firmware
byte only carries six joints, so every attachment declaration was refused
on hardware (the fake serial path fills all eight, which is why tests were
green). While the attachment context is stale, every fire-and-forget jog
or servo datagram was answered with an ERROR nobody awaited; the client
dequeued those replies on its next unrelated request and raised for a
command the server never refused. Streamed datagrams are now dropped (and
logged once per epoch); acked commands are still refused explicitly.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…d-object-geometry

# Conflicts:
#	parol6/client/async_client.py
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