RecurringPanel
The recurring panel of a spec: its switch, its settings, its runs and their trend.
| Inherits | QWidget |
| Group | libtrove |
In the namespace octomy::trove::workspace. Declared in src/libs/libtrove/trove/workspace/RecurringPanel.hpp.
Detailed description
trove-recurring §TRC-D-10. The panel is a part of the aggregate page of a spec in the Spec tab. Any spec can become recurring, so every spec shows the panel. It is closed for a spec that was never recurring, and open for one that was.
The switch
"Normal" and "recurring" are not two kinds (owner ruling R2, §TRC-D-1). The switch turns the schedule on and off. With the switch off, every setting stays visible and editable, greyed, with the line "Recurring is off: the settings are kept, and Run now still works".
The settings
- The schedule, in the words of clockwork, with its next time. A button opens it in the Schedules app. Clockwork owns the rule.
- The probes, each with its last value. A probe is edited in ProbeEditorDialog.
- The template unit that each run copies, and the budget: "all" when empty (owner ruling R5).
- Trust, with the badge "lands on main" in the warning color. Turning trust on asks the operator each time (owner ruling R4).
- The landing of a trusted run: the delete limit, the window, the quiet minutes, the land mode and the verify step that must pass on the exact commit. With no verify step, nothing lands (§TRC-D-8, L6).
- Run now, which works with the switch on or off.
The history and the chart
A table of runs (RecurringHistoryModel) for the probe that the selector names, newest first. A double click opens a run's work unit. Below it, the before and after values of each run as lines, with StackedAreaChartWidget, and the drift between runs as bars, with BarComparisonWidget. A probe that was deleted stays in the selector: its samples stay, and its line ends where it was deleted.
Writes and reads
Every write is a call of a task through SpecWorkspaceActions, as the work-unit editor does (trove-spec-workspace §SW-5). The reads go to the store. refresh() reads again after a write of any writer, and the history rows that changed flash (flash::rows).
See also SpecWorkspace, RecurringHistoryModel, ProbeEditorDialog.