Conversation
# Conflicts: # waldo_commander/components/named_setup.py # waldo_commander/components/skill_library.py
# Conflicts: # waldo_commander/components/skill_library.py
…ed-device-signals # Conflicts: # waldo_commander/components/named_setup.py
The status broadcast already carries the digital I/O vector, so the wait reads it there: a level is seen on the tick the controller publishes it, with no poll interval between reads to cross and no query per poll. The poll_interval and observation_timeout parameters are gone with the loop. Silence stays distinguishable from a level that never arrived: a status predicate that never runs means no broadcast reached the client, which raises ConnectionError rather than reporting a timeout. A mapping the controller's I/O layout no longer fits also still raises -- wait_status logs a raising predicate and carries on, which would otherwise surface as a timeout. SKIP=ty: pre-existing DryRunRobotClient.skill_capabilities diagnostic. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Rebinding a mapping saved for another arm changes the setup's signals signature without changing any widget value, and only widget changes refreshed the unsaved-edit indicator -- so Load took the no-dialog path and discarded the rebinding silently. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ed-device-signals # Conflicts: # tests/test_handeye_panel_integration.py # waldo_commander/components/handeye_calibration.py # waldo_commander/components/skill_library.py
# Conflicts: # waldo_commander/components/skill_library.py
# Conflicts: # waldo_commander/components/skill_library.py
isinstance against the DryRunClient protocol resolves members statically and never matches the preview wrapper or the skill guard; is_dry_run asks the way a call would. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N8zt66KjkzgZLtQuSfJd9r
# Conflicts: # pyproject.toml
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.
Name existing digital channels under Setup → Signals, then use the saved mappings from Python or insert a fixed call from the Skills panel. Saving a mapping does not write an output. Read and Write query the controller, with write readback confirmation and the existing browser control lease.
Reusable read_signal, wait_signal, and write_signal skills support both sync and async programs. Waits return typed matched/timeout outcomes; lost communication and unconfirmed writes remain errors. Cancellation requests the backend's existing Stop behavior. Preview requires an explicit constant SignalFixture and advances its simulated clock when a wait times out. A missing fixture stays visible as an unresolved editor diagnostic rather than an unexpected application error.
Validation: five Commander regression/browser checks passed, covering saved mapping/export, live read/write, timeout, cancellation, disconnection, generated Python insertion/run, and explicit-fixture preview workflows passed on PAROL6 fake serial. The named-signal UI and skills also passed against par6d --sim. Chromium layout verification used hardware WebGL on Raspberry Pi.
Stacked on #53. Coordinated branch:
feat/named-device-signals. Requires the companion waldoctl and backend changes; dependency pins target waldoctl v0.16.0 and PAROL6 v0.10.0.Companion PRs: ctl, p0, p6.
CI follow-ups: classify short final I/O reads correctly when Windows timers expire early; verify subdirectory programs by actually running them; recheck native completion before treating an idle automatic-calibration move as a Stop. The completion/Stop interleaving failed deterministically before the fix and passes with the full automatic-calibration workflow.
Program Stop now terminates the subprocess and sends a bounded native Stop before clearing the run state; unconfirmed stops remain errors. A real motion cancellation regression failed before the fix and passes along with a subsequent MCP-launched program. The UI cancellation test waits for native execution and the eventual result, and the signal browser test waits through tab transitions before clicking.
TCP settings now refresh each page from controller readback even when another page has already updated the shared calibration cache; this addresses stale inputs observed in macOS CI. The existing tool-change/reload workflow passes locally.
Signal controls use shorter labels and fit the compact Setup form. Pending signal mappings are included when saving the setup.
Screenshots — revised interface, PAROL6 and PAR6
Captured in Chromium on September 10 from the combined feature stack; shared panels may include later PRs. PAROL6 uses fake serial; PAR6 uses
par6d --sim.PAROL6 — saved signal mapping and controller readback.
PAR6 — saved signal mapping and controller readback.