Uh oh!
There was an error while loading. Please reload this page.
Add RoboticWidget/ScheduleWidget for IRobotic/IRoboticScheduler (#825) - #155
Merged
Conversation
RoboticWidget: running indicator, Start/Stop, current-task panel (name, target, obsnum, started, ETA/countdown), next-up + cant_run_reason. ScheduleWidget: schedule table (start/end/task/target/state/priority), "Re-schedule now" (proxy -> run()), Start/Stop. Both registered in DEFAULT_WIDGETS/DEFAULT_ICONS/DEFAULT_CONFIG. Requires pyobs-core with IRobotic/IRoboticScheduler, which is on develop but unreleased -- see specs/2026-08-31-irobotic-widgets.md. test/robotic.yaml added for manual/visual testing against DummyMastermind + DummyScheduler.
…lity Column widths now fit their content (start/end/task/target/state/ priority vary a lot) instead of the designer's equal-width default. test/robotic.yaml: raised blocked_probability to 0.6 so the "next up" panel is visible more often during manual testing -- it's only populated during a simulated "can't run" wait, by design (matches the real Mastermind), so it's often empty at the 0.2 default.
labelAutonomousWarning had no maximumHeight and was rendering huge in practice (pre-existing pyobs-gui issue, unrelated to #825, surfaced while visually testing this branch's test/robotic.yaml since DummyMastermind auto-starts running). Capped to 32px. ScheduleWidget: switched from per-column ResizeToContents to Stretch (equal-width columns filling the full table width) -- looked bad with content-fitted widths.
pyobs-core 2.1.0 is now released, resolving this PR's earlier blocker. CI was failing pyrefly because uv.lock still pinned 2.0.0. Verified locally against a real (non-editable) sync of the published package: pytest, ruff, and pyrefly all clean.
Uh oh!
There was an error while loading. Please reload this page.
thusser added a commit
that referenced
this pull request
Aug 31, 2026
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 freeto 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.
Summary
pyobs-core's side of #825 (
IRobotic/IRoboticSchedulerinterfaces, wired intoMastermind/Scheduler) landed on pyobs-core'sdevelop(commit17968cb8, PR pyobs/pyobs-core#826). This is the pyobs-gui half: two new widgets, following the design inpyobs-core/specs/design/irobotic.mdand this repo's own plan (specs/2026-08-31-irobotic-widgets.md).RoboticWidget(registered onIRobotic): running indicator, Start/Stop, current-task panel (name, target, obsnum, started, ETA/countdown), next-up +cant_run_reason.ScheduleWidget(registered onIRoboticScheduler): schedule table (start/end/task/target/state/priority), "Re-schedule now" (proxy →run()), Start/Stop.Both follow the existing
BaseWidgetconventions (ACL gating viapermitted(), error surfacing viarun_background, not-READYdisabling) with no special-casing, and are registered inDEFAULT_WIDGETS/DEFAULT_ICONS/DEFAULT_CONFIG.pyobs-corehas not released a version containingIRobotic/IRoboticScheduleryet. This repo'spyproject.tomlpinspyobs-core>=2.0.0,<3, and the installed2.0.0predates these interfaces. I developed and tested this against a local editable install of pyobs-core'sdevelopcheckout — that override is venv-only, not committed here. This PR can't pass a cleanuv sync/CI install until pyobs-core ships a release with these interfaces; hold this PR (or bump thepyobs-corefloor as part of merging it) until then.Test plan
uv run pytest— 59 passed (16 new:tests/test_roboticwidget.py,tests/test_schedulewidget.py), tested against a local editable pyobs-coredevelopinstallruff check/ruff format --checkcleanpyrefly checkclean (0 errors)pyobs test/robotic.yaml(new,DummyMastermind+DummyScheduler+ GUI) — all three modules reachREADY,DummyMastermindruns a simulated task, no widget-side errors in the logAlso fixed while here
specs/index.mdline describing this as "proposed... start here" — pyobs-core side had already landed.pyobs-core/specs/design/irobotic.md's ACL-gating doc citation pointed at the wrong repo (pyobs-gui/specs/plans/...instead ofpyobs-core/specs/plans/...) — fixed directly in pyobs-core, separate from this diff.