Choose when a report runs prototype
Table of Contents
| Item | Where |
|---|---|
| Prototype | the prototype |
| Gemini review | none |
| Group | Reporting prototypes |
1. Summary
This prototype argues where scheduling lives: on the report, in a schedule list,
or on a calendar. It carries three structural variants switched with ?variant,
and it answers to
Choose when a report runs.
It is throwaway. It reads no service, and the page says plainly which parts of a scheduler it cannot show.
2. Detail
2.1. The question
A schedule is one field on a report definition, but "what runs tomorrow morning" is a question about the whole set. Those two readings want different screens, and the open question is which one earns the space.
2.2. The three variants
Switch with the bottom bar, or with ?variant.
| Variant | Name | The structural argument |
|---|---|---|
A |
On the report | Scheduling is a field group on the report: a cadence and a time, edited in place, with the next fire times under it. |
B |
A schedule list | One row per schedule, scanned and edited together, so the whole week is answerable in one view. |
C |
A calendar | A weekly grid of when reports fire, each report in its slots, so clashes and quiet nights are visible before they happen. |
All three carry the same four actions beside a schedule, and none of them folds one action into another.
2.3. The four actions are four
Run now starts one run at once and changes no schedule: it sends
reporting.v1.ops.trigger_report_instance. Pause keeps the schedule and stops it
firing. Play starts it firing again on the same expression. Unschedule removes the
schedule, so the definition becomes on demand: it sends
reporting.v1.ops.unschedule_report_definitions.
Pause and Unschedule are the pair people confuse, so the page says what separates
them. A paused schedule keeps its expression and its scheduler job, and firing
starts again after Play. An unscheduled definition keeps neither, so there is
nothing to resume. Pause and Play have no operation. The scheduler job carries
is_active in ores_scheduler_job_definitions_tbl, so the data can express a
paused schedule and nothing exposes it to a reporting screen. The paused row the
page draws, and the Pause and Play buttons, are a fixture, and the amber note says
so.
2.4. What the page refuses to invent
Three operations exist: reporting.v1.ops.trigger_report_instance,
reporting.v1.ops.schedule_report_definitions and
reporting.v1.ops.unschedule_report_definitions, and a definition carries a
schedule expression. There is no pause or play operation, no read or write of a
scheduler job from this screen, and no time zone on the schedule. The calendar
variant shows an installation clock and says the times are derived from the
expression, and the note says a built screen could not show a job's state, its
last firing or its next due time. A scheduler dashboard drawn as though the
server served it would be a lie a reviewer could not see.
2.5. What a schedule does and does not reach
A schedule sets when the run starts. It does not change the report's inputs, its portfolio or its outputs. Run now starts one run and leaves the schedule alone. Pause stops the firing and keeps the schedule, and Unschedule removes it. None of the four touches a run already produced or cancels a run in flight. Only a tenant administrator may schedule, and only for reports their own party owns; every other role reads the cadence and nothing more. The page states the party constraint rather than hiding it behind a disabled button.
2.6. What is fake
The cadences, the next fire times, the reports and the paused schedule are mock. Nothing reads a server, and the application has no reporting UI today. Pause and Play have no operation, so the paused row and those two buttons are a fixture. The next fire times are computed from the expression in the page, which is what a person is actually judging when they set a cadence.
2.7. Where the code lives
doc/prototypes/reporting/choose-when-a-report-runs/. Three files, plain HTML,
CSS and JavaScript, no framework and no build step.
2.8. The verdict
None yet. This page is on the branch that proposes it and waits for review.
2.9. What it does not settle
The time zone, which the schedule does not carry at all. Until it does, a calendar that draws a local week is drawing a promise the server cannot keep.
3. See also
- Reporting prototypes — the group, and the axis this prototype turns on.
- Reporting journeys — the five journeys these answer to.