Bootstrap a schedule that does not exist yet. The worker no longer creates these, so a fresh environment relies on this. The workflow type is passed as a string (the registered workflow name); the action's task queue defaults to the service's configured queue.
Describe a single report's schedule. Returns status: "not_scheduled"
(not an error) when the schedule does not exist — the create-bootstrap
affordance keys off exactly this.
Past runs come back with outcome: "started"; call enrichRuns to
resolve terminal outcomes (a per-run workflow describe).
Resolve terminal outcomes for the given runs by describing each workflow
execution once. Best-effort per run: a run whose execution can't be
described (retention-aged-out, transient) keeps its prior outcome.
Runs already "running" are left as-is.
Pause a schedule with an audit note (carries the actor id).
Trigger a single immediate run, overriding the overlap policy for this one
action so a manual run is never silently dropped by a SKIP policy.
Returns REPORT_SCHEDULE_NOT_FOUND (not a throw) when the schedule is
missing, so the UI can steer the operator to create it first.
Resume a paused schedule with an audit note (carries the actor id).
Edit a schedule's cadence and policies in place. The workflow action (type / args / task queue) is preserved from the existing schedule; only the spec and policies the operator controls are replaced.
Operator-facing control plane for report Temporal schedules, backing the admin-dashboard Reports surface. The dashboard is the sole master of these schedules: the temporal-worker no longer upserts them, so create / edit / pause / trigger here are authoritative and survive worker deploys.
Modeled on CacheBusterService: it wraps an infra client (Temporal, not Valkey), and a missing schedule is returned as data (
status: "not_scheduled") rather than thrown, because "this report has no schedule yet" is a state the page must render, not a crash. Genuine non-functional faults (Temporal unreachable, gRPC error) still throw.