Skip to content

Tasks

Tasks turn alerting subscription results into trackable work items. When a scheduled query finds rows that need attention, Beacon opens a task that stays open — accumulating executions, notifications, and investigation notes — until the underlying condition clears or someone resolves it.

Tasks

A task represents an ongoing alert condition for one subscription. Instead of receiving a separate notification for every scheduled run that finds rows, you get a single task that tracks the condition over time:

  • One open task per subscription — repeated runs update the existing unresolved task rather than creating duplicates
  • Auto-resolution — when a run returns 0 rows, the open task is automatically resolved
  • Full context — each task links back to its subscription, query, execution history, and notifications
  • Team workflow — priority, assignee, watchers, snooze, SLA tracking, and an investigation log

Tasks complement Notifications: notifications tell you something happened, tasks track whether it’s been dealt with.

Tasks are created by subscriptions with the Create Tasks option enabled.

  1. Create or edit a subscription
  2. Enable Create Tasks
  3. Save

On every scheduled (or manual) execution of that subscription, Beacon records the run in execution history and then creates or updates the task for that subscription — regardless of whether a notification was sent.

When a subscription run with Create Tasks enabled completes:

Run resultExisting unresolved task?What happens
> 0 rowsNoA new unresolved task is created with the run’s result count
> 0 rowsYesThe existing task is updated — latest result count and last-notification timestamp refresh
0 rowsNoNothing — there is no condition to alert on, so no task is created
0 rowsYesThe task is auto-resolved

This means the task list only ever shows at most one unresolved task per subscription, and that task always reflects the latest state of the alert condition.

When a run returns 0 rows while a task is open, Beacon resolves it automatically and stamps the resolution notes with:

Auto-resolved: Query returned 0 results

The resolved timestamp is set to the time of the run. No user action is required — if the data problem fixed itself (or someone fixed it upstream), the task closes itself.

Any open task can be resolved manually from the task detail page:

  1. Open the task and click Resolve (or press R)
  2. Optionally add resolution notes (up to 2000 characters) describing what was done
  3. Confirm

The task records who resolved it, when, and the notes. If the condition recurs on a later run, a new task is created — the resolved task is not reopened, so each incident keeps its own history.

Each task carries:

FieldDescription
Latest result countRow count from the most recent run — the current “size” of the alert condition
ExecutionsNumber of subscription executions since the task was created
Unique countsNumber of distinct result counts seen since the task was created — a volatility signal
NotificationsNotifications sent while this task was open
PriorityCritical, High, Normal (default), or Low
AssigneeThe user investigating the task (unassigned by default)
Snoozed untilWhen set in the future, the task is considered snoozed until that time
WatchersUsers following the task
ResolutionResolved flag, timestamp, resolving user, and resolution notes

Reading executions vs. unique counts: a task with 40 executions and 1 unique count has returned the same result count on every run — a stable condition. A task with 40 executions and 25 unique counts is fluctuating on nearly every run — likely a moving or growing problem.

Open Tasks in the left navigation (/tasks).

The list shows one row per task with: id, created (relative time), subscription and query name, latest result count, execution count, unique result counts, and status (Unresolved / Resolved). Results are paginated (25 per page). Click any row to open the detail view.

Filter by status: Unresolved (default), Resolved, or All.

Clicking a task opens the detail view (/tasks/{id}) with:

  • Hero — task identity, age, and a Resolve action
  • SLA banner — shows time remaining against the SLA. The SLA comes from the subscription’s SLA hours setting; if the subscription doesn’t define one, a 24-hour default is used for display. For resolved tasks, the banner shows who resolved it and when.
  • KPI grid — latest result count, execution count, notification count, and task age at a glance

A chart of the subscription’s result counts over the most recent 100 executions. Use it to see whether the condition is growing, shrinking, stable, or oscillating.

TabContents
ActivityTimeline of task events — creation, executions, comments, resolution
ExecutionsThe last 50 subscription executions with timestamp, duration, notification status, and result count
NotificationsNotifications sent for this subscription while the task was open, with their result payloads
RelatedOther tasks from subscriptions that use the same query — the last 20, including archived ones — so you can see how previous incidents of the same condition played out

Every task has a comment thread. Add notes as you investigate — findings, hypotheses, links to fixes. Comments record the author and timestamp and are shown newest first. They persist after resolution, so the next person hitting the same condition can read the history (the Related tab gets them there).

From the detail page’s side rail and actions:

  • Assign — assign the task to a user (or yourself) to signal ownership
  • Watch / Unwatch — follow a task you’re not assigned to; the watcher count is visible on the task
  • Snooze — suppress the task until a chosen time (useful when a fix is deployed but the next run hasn’t confirmed it yet)
  • Priority — set Critical, High, Normal, or Low

On the task detail page (when not typing in a field):

KeyAction
ROpen the Resolve dialog
AAssign the task to yourself
SSnooze for 1 hour
CFocus the comment box

Tasks are available under /beacon/api/tasks (cookie or API-key authentication):

MethodRouteDescription
GET/tasksList tasks — filter by subscriptionId, resolved; supports sorting and paging
GET/tasks/{id}Task detail
POST/tasks/{id}/resolveResolve with optional resolutionNotes
GET/tasks/{id}/executionsRecent executions for the task’s subscription
GET/tasks/{id}/relatedTasks from other subscriptions on the same query
GET/tasks/{id}/result-historyResult-count data points for the trend chart
GET/tasks/{id}/commentsComment thread
POST/tasks/{id}/commentsAdd a comment
POST/tasks/{id}/assignSet (or clear) the assignee
POST/tasks/{id}/snoozeSet (or clear) the snooze time
POST/tasks/{id}/prioritySet priority
POST/tasks/{id}/watch / /unwatchFollow / unfollow the task

Subscription:

  • Query: SELECT * FROM payments WHERE status = 'failed' AND created_at > NOW() - INTERVAL '1 hour'
  • Cron: */15 * * * * (every 15 minutes)
  • Create Tasks: enabled

What happens:

  1. A run finds 12 failed payments → task opens with latest result count 12
  2. The next runs find 12, 15, 18 → the same task updates; executions climb, unique counts show it’s growing
  3. An engineer assigns themselves (A), sets priority to High, and logs findings in the investigation log
  4. After the payment provider recovers, a run returns 0 rows → the task auto-resolves with Auto-resolved: Query returned 0 results
  5. If failures reappear next week, a new task opens — and the old one is one click away in the Related tab

No task appeared after the subscription ran

Check that Create Tasks is enabled on the subscription, and that the run actually returned rows — 0-row runs never open a new task.

A second task didn’t open while one is already unresolved

Expected. Beacon maintains at most one unresolved task per subscription; the existing task’s latest result count and timestamps update instead.

Task closed on its own

A run returned 0 rows and auto-resolution fired. The resolution notes will read Auto-resolved: Query returned 0 results.

Execution count on the list differs from what I expected

The list counts executions since the task was created, not the subscription’s lifetime executions.

  • Subscriptions — schedule the queries that create tasks
  • Control Tower — see open task counts across all subscriptions at a glance
  • Notifications — delivery channels for the same subscription runs
  • Anomaly Detection — alert on unusual result-count patterns instead of fixed conditions