Skip to content

Panels → main: plugin tools + planner/status fixes#20

Merged
Jepson2k merged 9 commits into
mainfrom
refactor/commander-public-api
Jun 23, 2026
Merged

Panels → main: plugin tools + planner/status fixes#20
Jepson2k merged 9 commits into
mainfrom
refactor/commander-public-api

Conversation

@Jepson2k

Copy link
Copy Markdown
Collaborator

Brings the panel plugin-tool registry work into main (it landed in refactor/commander-public-api after the cpa→main merge #18), plus the kind-wilkinson fixes:

  • S1-7: motion_planner.start() fails fast on a dead worker instead of blocking ~30 s on ready_event.
  • S1-8: broaden the _pin_to_core affinity-pin except to (psutil.Error, OSError, ValueError, …).
  • S2-9: register plugin tools in the dry-run subprocess so select_tool("plugin") no longer crashes the preview.
  • S2-10: reset stale ToolStatus fields before populate_status after a tool switch.
  • native_tools rename: _native_toolsnative_tools to follow the waldoctl ABC.

Verified green: parol6 69 (planner/controller/dry-run/status/tool/registry).

⚠️ Merge all three repos' refactor/commander-public-api → main together — the native_tools rename couples the waldoctl ABC and this impl.

🤖 Generated with Claude Code

Jepson2k and others added 9 commits June 11, 2026 13:01
…honors rpy

register_plugin_tools() runs at Controller init, motion_planner_main (spawn
re-imports the registry), and Robot init (SelectToolCmd validates client-side
before sending); _PLUGIN_KEYS keeps _build_tools native-only regardless of
construction order. get_tool_transform's variant branch overrides origin/rpy
field-independently to match the client path; _plugin_tool_transform uses
waldoctl.resolve_variant_tcp and warns before identity on unknown keys.
_ToolsCollection replaced by waldoctl.ToolsCollection. Cold-start home
timeout 30s; variant-rpy unit regression.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Remove the three "wire round-trip" tests in test_tcp_offset.py that only
construct SetTcpOffsetCmd/TcpOffsetResultStruct and assert the fields back —
they restate the struct definitions, exercise no encode/decode, catch no bug.
The planner-routing and apply_tool behavioral tests stay.

Add the no-tautological-tests rule to CLAUDE.md Testing Guidelines.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Remove construct-echo/default tests in test_movecart_command.py (5),
test_reset_command.py (2, dropping the now-empty TestResetCommandParsing),
test_query_commands_actions.py (2), and the hardware-config assertions in
test_gripper_ramp.py (2). The validation tests (bad-input raising),
execute_step side-effect tests, pose-conversion tests, and tick-range
derivation stay. Broaden the CLAUDE.md rule to name the categories.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Resolve the motion_planner_main conflict by keeping BOTH the plugin-tool
registration (panels) and the avoid_core affinity drop (refactor's planner-
startup fix). Brings refactor's tests.yml branch-match fix so CI installs the
matching waldoctl@feat/panel-extensions-v2 (CameraSpec/ToolsCollection/
resolve_variant_tcp/iter_plugin_tool_specs) instead of the stale pinned tag,
plus the JIT-warmup, ephemeral-port, and tautological-test cleanups.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
parol6: plugin tools in every process registry + variant TCP rpy (panel-extensions stack)
…cept

- MotionPlanner.start() polls is_alive() and bails on a dead worker instead
  of blocking the full 30s, then 'continuing anyway' with a dead planner [S1-7]
- _pin_to_core broadens its except to psutil.Error/OSError/ValueError so a
  benign affinity failure on a restricted host can't crash the controller [S1-8]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…e ToolStatus on tool switch

- DryRunRobotClient registers plugin tools in its spawn-mode subprocess so a
  dry-run select_tool() of a plugin tool no longer crashes in apply_tool [S2-9]
- update_from_state resets ToolStatus value fields before populate_status so a
  no-op populate (NONE/passive/plugin tools) doesn't broadcast the previous
  tool's engaged/part_detected/positions [S2-10]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
NumPy 2.5.0 (released 2026-06) violates numba 0.6x's numpy<2.5 pin, breaking
collection on Python 3.12+ (3.11 resolves an older numpy and passes). Bound
numpy to what numba supports.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Jepson2k Jepson2k merged commit a24cf43 into main Jun 23, 2026
34 of 52 checks passed
Jepson2k added a commit that referenced this pull request Jun 24, 2026
The panels merge (#20) brought code importing CameraSpec/ToolsCollection,
which the old v0.2.0 pin lacks — main CI has been red since. v0.4.0 has them.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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