Skip to content

Tasks

View .md

A task tracks an alert condition of one subscription over time. When a run of a subscription with task creation on returns rows, Beacon opens a task. Later runs update it, and a run that returns no rows resolves it. In between, people claim it, set its priority, snooze it and log what they find.

Tasks

  • One open task per subscription. Later runs update the open task instead of creating another.
  • Resolves itself. A run that returns 0 rows resolves the open task.
  • Context. A task links to its subscription, query, runs and notifications.
  • Team workflow. Priority, assignee, watchers, snooze, an SLA indicator and an investigation log.

Notifications say that something happened; tasks track whether someone dealt with it.

Task creation is set when you create the subscription; a subscription cannot be edited afterwards.

  1. In Subscriptions (/beacon/subscriptions), click New subscription.
  2. Tick Create a task and keep it open while the query returns rows.
  3. Finish and save the subscription.

With task creation on, recipients are optional: a subscription can alert through the task list alone. Without it, at least one recipient is required. See Subscriptions.

Every run of the subscription that executes its query (scheduled or manual) updates the task, whatever the notification status of the run:

Run resultOpen task?What happens
more than 0 rowsNoA new open task is created with the run’s row count.
more than 0 rowsYesThe open task’s latest row count and timestamps are updated.
0 rowsNoNothing.
0 rowsYesThe task is resolved automatically.

When a run returns 0 rows while a task is open, Beacon resolves it at the time of the run with the note:

Auto-resolved: Query returned 0 results

An automatically resolved task records no resolver and keeps its assignee. It stays in the history with its note.

A task is resolved by its assignee: claim it first (assign it to yourself), then resolve it. An Admin may also resolve a task that nobody is assigned to; to resolve a task assigned to someone else, an Admin first reassigns it to themselves.

  1. Open the task and click Resolve (or press R).
  2. Optionally add resolution notes (up to 2,000 characters).
  3. Confirm.

The task records who resolved it, when, and the notes. Resolve is offered only to those who may resolve; the server refuses others with 403 and says to claim the task first. A resolution is never overwritten: resolving a resolved task fails. If the condition comes back on a later run, a new task opens; a resolved task is not reopened, so each incident keeps its own history.

FieldWhat it is
Latest result countRow count of the most recent run
ExecutionsRuns of the subscription since the task was created
Unique countsDistinct row counts seen since the task was created, a volatility signal
NotificationsNotifications sent while the task was open
PriorityCritical, High, Normal (default) or Low, shown as P1 to P4
AssigneeThe user working the task (none by default)
Snoozed untilWhile in the future, the task is snoozed
WatchersUsers following the task
ResolutionResolved flag, time, resolving user and notes

A task with 40 executions and 1 unique count returned the same row count every time: a stable condition. One with 40 executions and 25 unique counts changes on almost every run: a moving or growing problem.

Open Tasks in the navigation (/beacon/tasks). The list shows only tasks of subscriptions in projects you can read.

  • Columns: Id, Created, Subscription (with the query name), Latest, Execs, Unique and Status (Unresolved or Resolved). Click a header to sort.
  • Filter: Unresolved (default), Resolved or All.
  • Paging: 20 tasks per page, on the server. Filters, sort and page are kept in the URL.

Click a row to open the task.

The task page (/beacon/tasks/{id}) shows:

  • Header: the task, its age and the Resolve action.
  • SLA banner: time left against the subscription’s SLA hours, or 24 hours when the subscription sets none. For a resolved task it shows who resolved it and when.
  • KPIs: latest row count, executions, notifications and age.
  • Result trend: the row counts of the subscription’s last 100 runs.
  • Tabs:
TabContents
ActivityTimeline of the task: creation, runs, comments, resolution
ExecutionsThe last 50 runs of the subscription with time, duration, notification status and row count
NotificationsNotifications sent for the subscription while the task was open
RelatedUp to 20 other tasks from subscriptions on the same query, archived ones included

The result trend and the Executions tab list only runs you may read. A project-restricted API key or MCP caller sees the runs its projects may read, by the rule notifications follow.

Every task has a comment thread. Comments record author and time, show newest first, and stay after resolution, so the next person who meets the same condition can read them (the Related tab leads there).

ActionWho may do it
AssignAnyone who can edit may assign an unassigned task to themselves. The assignee may hand it over or release it. Assigning to someone else, or reassigning a task assigned to someone else, is an Admin’s.
Watch / UnwatchFollow a task you are not assigned to; the watcher count shows on the task.
ResolveThe assignee; an Admin only while nobody is assigned.
SnoozeThe assignee or an Admin. Not on a resolved task.
PriorityThe assignee or an Admin. Not on a resolved task.

With Beacon user management, the assignee must be an existing, enabled user. A host without it accepts the id its sessions present.

Resolving, assigning, snoozing and setting the priority are written only while the task still has the state the check saw. If someone resolves or reassigns it in between, the request fails (400) and nothing is overwritten.

On the task page, when you are not typing in a field:

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

Tasks identify people by their user’s external id (Users.ExternalId), however they sign in. An API key acts as its owner. In a host without Beacon user management, the id is the NameIdentifier the session presents. The task detail’s assignedToCaller says whether the signed-in caller is the assignee. For a task whose subscription an AI actor manages, the detail names the actor’s creator by display name, or as “User {id}” (hasOwner, ownerDisplayName), never by user name or external id.

“Admin” means a user holding the Admin role; a disabled or archived user is never an Admin. To anyone but an Admin, a task that does not exist is refused (403) like a task that is not theirs.

Routes under /beacon/api (the paths below start at /tasks). A scoped API key needs the Execute scope for the POST routes.

MethodRouteWhat it does
GET/tasksList tasks. Filters subscriptionId, resolved; paging page (zero-based), pageSize (default 20, at most 200), sort (for example -id).
GET/tasks/{id}Task detail.
POST/tasks/{id}/resolveResolve, with optional resolutionNotes. The resolver is the caller.
GET/tasks/{id}/executionsRecent runs of the task’s subscription (the runs the caller may read).
GET/tasks/{id}/relatedTasks from other subscriptions on the same query.
GET/tasks/{id}/result-historyRow counts for the trend chart (the runs the caller may read).
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 the priority.
POST/tasks/{id}/watch, /tasks/{id}/unwatchFollow or stop following the task.

Subscription

  • Query: SELECT * FROM payments WHERE status = 'failed' AND created_at > NOW() - INTERVAL '1 hour'
  • Cron: */15 * * * * (every 15 minutes)
  • Create a task and keep it open while the query returns rows: ticked

What happens

  1. A run finds 12 failed payments: a task opens with latest result count 12.
  2. The next runs find 12, 15, 18: the same task updates; executions climb and unique counts show it is growing.
  3. An engineer presses A to claim it, sets the priority to High and logs findings.
  4. After the payment provider recovers, a run returns 0 rows: the task resolves with Auto-resolved: Query returned 0 results.
  5. If failures come back next week, a new task opens, and the old one is in the Related tab.
SymptomCause
No task after the subscription ranTask creation is off on the subscription, or the run returned 0 rows (a 0-row run never opens a task).
No second task while one is openExpected: at most one open task per subscription; the open task is updated.
The task closed on its ownA run returned 0 rows. The resolution note reads Auto-resolved: Query returned 0 results.
The execution count looks lowIt counts runs since the task was created, not since the subscription was created.
Resolve is missingYou are not the assignee. Claim the task first (A), or ask an Admin.