S

SideButton Knowledge Module

SideButton Portal — Jobs — Knowledge Module

SideButton knowledge module — UI selectors, data model, and page states documenting Portal — Jobs.

Available free v1.1.0 Browser
$ sidebutton install sidebutton
Download ZIP

PRIVACY CONVENTION: This skill file must describe the PAGE — elements, selectors, layouts, states, and public UI copy (placeholder text, button labels, default headings). It must NOT record tenant-specific data visible to a logged-in user: real ticket keys (use PROJ-123), real agent hostnames (use agent-host or {hostname}), real IP addresses (use 203.0.113.10), real workflow/automation IDs (use {id}), real user names or emails, real Jira host (use {tenant}.atlassian.net), real registry names (use {registry-name}), or real automation display names. When re-verifying, generalize observed values before writing them into this file.

VERIFIED 2026-04-26: H1 "Jobs". Filter tabs are 6 link elements: All, Running, Waiting, Completed, Failed, Cancelled. Active filter pill is dark grey solid (NOT green/blue as earlier notes claimed). Controls: textbox "Search tickets…", combobox with label "Workflow" (id workflow-filter-select, 29 options including legacy agent_* and dash IDs), combobox with label "Agent". NEW (Apr 2026): job rows show cost + model inline in the format {Workflow} #{id} {effort} 1 step {duration} ${cost} {model_short} — visible on jobs created after cost-tracking landed; older jobs omit ${cost} {model}. Token-usage span on each row reads "N in · N,NNN out · N turns · claude-opus-4-7" (model with claude- prefix in span; without prefix in row text). NEW (Apr 2026): LLM USAGE card on detail page — large dark card showing model name (top-right), Cost / Turns / Input Tokens / Output Tokens stat columns, Cache read / Cache write / Prompt sha row, and PER STEP breakdown table. NEW: yellow "Status mismatch" inline alert above Temporal timeline when portal status diverges from orchestrator status. NEW: floating "Report a Bug" button in viewport bottom-right (global to portal, anchored to viewport). Effort badges use distinct background colors per level (NOT all green): MAX = purple, HIGH = orange/amber, MEDIUM = dark grey. Auth0 login required.

Portal — Jobs

What This Is

Job execution history page -- lists all workflow jobs that have been dispatched to agents. Shows a filterable, searchable list of jobs with status badges, workflow names, ticket references, agent assignments, step counts, durations, and relative timestamps. Each job links to a detail page showing input parameters, step execution timeline with task progress, expandable step logs, and output/error cards. Jobs are created when workflows are dispatched to agents (via Run Workflow, Run Job, Queue dispatch, or Automation trigger). Supports cancel (running/waiting) and resend (failed/cancelled) actions.

URL Patterns

PatternDescription
/portal/jobsJob list (all)
/portal/jobs?status=runningFiltered to running jobs
/portal/jobs?status=waitingFiltered to waiting jobs
/portal/jobs?status=completedFiltered to completed jobs
/portal/jobs?status=failedFiltered to failed jobs
/portal/jobs?status=cancelledFiltered to cancelled jobs
/portal/jobs/{id}Job detail view
/portal/jobs/{id}?from_status={status}Job detail with back-link context to filtered list

Page Structure

Job List (/portal/jobs)

+--[Sidebar]--+--[Main Content]------------------------------------------+
|  Chat       |  H1: "Jobs"                                               |
|  Agents     |  "{N} jobs"  (e.g. "2551 jobs")                          |
|  Jobs *     |                                                           |
|  Queue      |  [Filter Tabs: All | Running N | Waiting | Completed | Failed | Cancelled] |
|  Automations|                                                           |
|  Workflows  |  [Search: "Search tickets..."]  Workflow [▼]  Agent [▼]   |
|  Settings   |                                                           |
|             |  ITEM                              AGENT         STATUS   |
|             |  [dot] Workflow Name  TICKET  #ID                         |
|             |        [EFFORT]  N step  Nm Ns  $X.XX  model-short        |
|             |                          [avatar] agent-name              |
|             |                                   [Status Badge]  time ago |
|             |                                   [Cancel/Resend]          |
|             |  ...                                                      |
|             |  Loading more...                                          |
|             |                                       [Report a Bug ⌶]    |
+-------------+-----------------------------------------------------------+

New in Apr 2026: each row's secondary line includes inline $X.XX cost and a model-short tag (e.g. opus-4-7, sonnet-4-6). These render only on jobs created after cost-tracking shipped — older jobs render the secondary line without $cost model. Each row also exposes a hidden <span> with the verbose "N in · N,NNN out · N turns · claude-{model}" summary (visible in the accessibility tree, used as a tooltip).

Job Detail (/portal/jobs/{id})

+--[Sidebar]--+--[Main Content]------------------------------------------+
|             |  < Back to jobs                                           |
|  Jobs *     |                                                           |
|             |  H1: workflow-slug — ticket/source  [Status Badge]       |
|             |                                          [Cancel/Resend]  |
|             |  Job #N  [avatar] agent  [EFFORT]  Nm Ns  Created {date} |
|             |  pipeline-id (green monospace)                            |
|             |                                                           |
|             |  [INPUT card]                                             |
|             |    hint: focus: /customers/ID/tasks                       |
|             |    (or trigger_* fields for automation jobs)              |
|             |                                                           |
|             |  [LLM USAGE card]  ← NEW Apr 2026                         |
|             |    LLM USAGE                          claude-opus-4-7     |
|             |                                                           |
|             |    COST    TURNS   INPUT TOKENS   OUTPUT TOKENS           |
|             |    $9.79   128     208            62,084                  |
|             |                                                           |
|             |    Cache read 11,565,708  Cache write 392,651             |
|             |    Prompt sha 8065ecd866c2                                |
|             |                                                           |
|             |    PER STEP                                               |
|             |    #1  agent_sd_coverage      62,292 tok  128t  $9.79     |
|             |                                                           |
|             |  [ERROR card] (failed jobs only)                          |
|             |    Step N (step-name) failed: error message               |
|             |                                                           |
|             |  [Status mismatch alert] (yellow inline, when divergent)  |
|             |    ⚠ Status mismatch: portal says "failed" but            |
|             |       orchestrator says "COMPLETED"                       |
|             |                                                           |
|             |  [Temporal Timeline] OR [Temporal unreachable]            |
|             |    Job: STATUS | N events | size KB | short_id           |
|             |    Init          Nms    N activities                      |
|             |    Agent Setup   Nms    N activities                      |
|             |    Execution     Nm Ns                                    |
|             |      runAndMonitor  Nm Ns                                |
|             |        workflow: agent_workflow  agent: agent-name        |
|             |    Teardown      Nms    N activities                      |
|             |                                                           |
|             |  [OUTPUT card] (completed jobs only)                      |
|             |    "Workflow X completed on agent-name"                   |
|             |                                                           |
|             |                                       [Report a Bug ⌶]    |
+-------------+-----------------------------------------------------------+

Key Elements

Job List

ElementSelector / RefNotes
Page headingheading "Jobs"H1
Job countBelow heading"N jobs" summary
Filter: Alllink "All"Green pill (bg-emerald-500/20 text-emerald-400) when active
Filter: Runninglink "Running"Shows count badge (e.g. "Running 3") when jobs are running
Filter: Waitinglink "Waiting"
Filter: Completedlink "Completed"
Filter: Failedlink "Failed"Blue pill when active as selected filter
Filter: Cancelledlink "Cancelled"6th status filter tab
Search textboxtextbox "Search tickets…"Searches by ticket reference (e.g. "PROJ-123")
Workflow filtercombobox / label "Workflow" / #workflow-filter-selectNative <select>, default "All workflows". Options populate dynamically from job data — currently 29 options including legacy agent_* IDs (e.g. agent_se_work) and dash IDs (e.g. se-work); display labels are Title Case
Agent filtercombobox / label "Agent"Native <select>, default "All agents"
Column header: ITEMAbove job rowsLeft column
Column header: AGENTAbove job rowsMiddle column
Column header: STATUSAbove job rowsRight column
Job rowlink (each job)Clickable, navigates to /portal/jobs/{id}
Status dot (green)Left of workflow nameCompleted
Status dot (red)Left of workflow nameFailed
Status dot (blue, pulsing)Left of workflow nameRunning
Status dot (grey)Left of workflow nameCancelled / Waiting
Workflow nameBold text in rowTitle case display name (e.g. "SE Rca Fix", "QA Validate", "Pull Repos")
Ticket referenceOrange/cyan text after namee.g. "PROJ-123" — only present when job has a linked ticket
Job IDGrey texte.g. "#3121"
Agent avatarimg inside agent linkSmall green circle with agent avatar image
Agent name linklink "agent-name"Links to /portal/agents, shows agent hostname
Effort badge[MAX] / [HIGH] / [MEDIUM]Pill badge — color varies per level: MAX = purple, HIGH = orange/amber, MEDIUM = dark grey (NOT all green; earlier docs were wrong)
Step countGrey text"N step" (singular)
DurationGrey text"Nm Ns" format (e.g. "6m 31s", "5m 46s") or "Ns" for short durations
Inline costGreen text after duration$X.XX (e.g. $9.79, $0.127) — only present on jobs with cost-tracking data; older jobs omit
Inline model tagGrey text after costShort model name (e.g. opus-4-7, sonnet-4-6, opus-4-6) — paired with inline cost
Token usage span<span> inside row link, e.g. span "208 in · 62,084 out · 128 turns · claude-opus-4-7"Full LLM usage summary (with claude- prefix). Visible in accessibility snapshot — likely a tooltip on hover
Completed badgeStatus areaGreen dot + "Completed"
Failed badgeStatus areaRed dot + "Failed"
Running badgeStatus areaBlue dot + "Running"
Cancelled badgeStatus areaGrey dot + "Cancelled"
Waiting badgeStatus areaAmber dot + "Waiting"
Relative timeRight side"Nm ago", "Nh ago", "Nd ago"
Cancel buttonbutton "Cancel"On running/waiting jobs — cancels the job
Resend buttonbutton "Resend"On failed and cancelled jobs — re-dispatches the job
Resended buttonbutton "Resended"Shown after a job has already been resent — disabled/grey state
Loading moreBottom of list"Loading more..." text, infinite scroll trigger (50 items/page)

Job Detail

ElementSelector / RefNotes
Back linklink "Back to jobs"Chevron left + text, returns to job list
Workflow headingH1 textFormat: "workflow-slug — ticket-key" or "workflow-slug — queued"
Status badgeNext to heading"Completed" / "Failed" / "Running" / "Cancelled" with colored dot
Cancel buttonbutton "Cancel"On running/waiting jobs only, top-right, blue outline
Resend buttonbutton "Resend"On failed/cancelled jobs, top-right, blue outline. Changes to "Resended" after use
Job numberBelow heading"Job #N"
Agent avatar linklink > img "agent-name"Green circle avatar, links to /portal/agents
Agent nameBelow headingAgent hostname next to avatar
Effort badgeBelow heading"MAX" / "HIGH" / "MEDIUM" green pill
DurationBelow heading"Nm Ns" format (ticks live on running jobs)
Created dateBelow headingFull date string, e.g. "Created 4/2/2026, 9:33:59 PM"
Pipeline IDBelow metadataGreen/teal monospace text, e.g. "pipeline-job-4227"
Temporal Workflow IDspan "Temporal Workflow ID"Visible in accessibility tree, links to Temporal tracking
INPUT cardDark card below metadata"Input" header, key-value pairs of input parameters
INPUT trigger variablesInside INPUT cardAutomation-triggered jobs show: trigger_ticket_url, trigger_project, trigger_assignee, trigger_status, trigger_issue_key, trigger_issue_type
INPUT ticket URLInside INPUT cardClickable cyan link when input contains a URL (e.g. Jira ticket)
INPUT hintInside INPUT card"hint:" field showing dispatch instructions (e.g. "Jira webhook: jira:issue_updated", "focus: /customers/ID/tasks")
LLM USAGE card (NEW Apr 2026)Dark card below INPUT"LLM USAGE" header (left) + full model name claude-opus-4-7 / claude-sonnet-4-6 / claude-opus-4-6 (top-right). Stat columns + cache + per-step block. Hidden when no LLM telemetry exists for the job
LLM Cost statFirst column under "COST" labelLarge green dollar value (e.g. $9.79, $0.127)
LLM Turns statSecond column under "TURNS"Plain number (e.g. 128, 8)
LLM Input Tokens statThird column under "INPUT TOKENS"Plain number — non-cached prompt input (e.g. 208, 14)
LLM Output Tokens statFourth column under "OUTPUT TOKENS"Plain number with thousands comma (e.g. 62,084, 2,264)
Cache readBelow stat rowLabel "Cache read" + monospace number (e.g. 11,565,708)
Cache writeBelow stat rowLabel "Cache write" + monospace number (e.g. 392,651, 11,008)
Prompt shaBelow stat rowLabel "Prompt sha" + 12-char hex prefix (e.g. 8065ecd866c2)
PER STEP tableBottom of LLM USAGE cardHeading "PER STEP" + one row per executed step
Per-step rowInside PER STEPFormat: #{idx} + step_name (monospace) + {N,NNN} tok + {N}t (turns) + ${cost} (green)
ERROR cardRed background cardShown on failed jobs only, "Error" header + "Step N (step-name) failed" + error message
Status mismatch alert (NEW Apr 2026)Yellow inline alert above timelineReads "Status mismatch: portal says 'X' but orchestrator says 'Y'" — appears when portal/Temporal status differ
Temporal TimelineBelow ERROR/alertFull job execution timeline from Temporal orchestrator
Timeline summaryFirst line of timeline"Job: STATUS | N events | size KB | short_id"
Timeline: Init phaseTimeline rowDuration (ms) + activity count (e.g. "3 activities")
Timeline: Agent Setup phaseTimeline rowDuration (ms) + activity count (e.g. "4 activities")
Timeline: Execution phaseTimeline rowDuration (Nm Ns) — main execution time
Timeline: runAndMonitorSub-row under ExecutionDuration + "workflow: {workflow_id} agent: {agent-name}"
Timeline: Teardown phaseTimeline rowDuration (ms) + activity count (e.g. "5 activities")
Temporal unreachableReplaces timelineShown when Temporal workflow history is unavailable (old jobs, cancelled jobs, service down)
OUTPUT cardDark card at bottomShown on completed jobs. "Output" header + monospace green completion message of shape Workflow {workflow_slug} completed on {agent_hostname}

Data Model

Job

FieldTypeDescription
idnumberJob ID (auto-increment)
pipeline_idstringPipeline tracking ID (e.g. "pipeline-job-3121")
namestringDisplay name format: "{workflow_id} — {ticket_key|queued}"
statusstring"pending" / "running" / "waiting" / "completed" / "failed" / "cancelled"
effort_levelstring"max" / "high" / "medium" (optional — may be absent)
inputstring (JSON)Key-value map of input parameters (ticket_url, hint, etc.)
outputstringCompletion message (on completed jobs)
errorstringError message (on failed jobs)
ticket_urlstringFull Jira ticket URL (optional)
ticket_keystringJira ticket key e.g. "PROJ-123" (optional)
current_stepnumberIndex of currently executing step
stepsstring (JSON)Array of pipeline step definitions
started_atstring (datetime)When job started executing
completed_atstring (datetime)When job finished
created_atstring (datetime)Job creation timestamp
slack_channel_idstringSlack channel for notifications (optional)
slack_thread_tsstringSlack thread timestamp (optional)

Temporal Timeline (Job Detail)

The job detail page fetches execution history from the Temporal orchestrator. When available, it renders a phase-based timeline. When unavailable, it shows "Temporal unreachable".

FieldTypeDescription
statusstringTemporal workflow status: "COMPLETED" / "FAILED" / "RUNNING" / "CANCELLED"
event_countnumberTotal events in workflow history (e.g. "83 events")
data_sizestringHistory data size (e.g. "14.9 KB")
short_idstringShort hex workflow run ID prefix (e.g. "019d500e")

Timeline Phases

PhaseDescription
InitWorkflow initialization (~15-20ms, 3 activities)
Agent SetupAgent environment preparation (~24-25ms, 4 activities)
ExecutionMain workflow execution — contains runAndMonitor sub-entry showing workflow ID + agent name
TeardownCleanup and reporting (~38-48ms, 4-5 activities)

LLM Usage (Job Detail card — NEW Apr 2026)

The detail page renders an LLM USAGE card aggregating token, cost, and cache telemetry from the agent's LLM calls. The card is omitted when telemetry is unavailable.

FieldTypeDescription
modelstringFull Claude model id, e.g. claude-opus-4-7, claude-sonnet-4-6, claude-opus-4-6 (rendered top-right of card)
coststringTotal cost in USD, formatted with $ prefix and 2-3 decimals (e.g. $9.79, $0.127)
turnsnumberTotal LLM round-trips (e.g. 128)
input_tokensnumberNon-cached input tokens (e.g. 208)
output_tokensnumberOutput tokens, comma-separated (e.g. 62,084)
cache_readnumberCache hit token count, comma-separated (e.g. 11,565,708)
cache_writenumberCache write token count, comma-separated (e.g. 392,651)
prompt_shastring12-char hex prefix of prompt SHA (e.g. 8065ecd866c2)
per_steparrayPer-step usage breakdown

Per-Step Usage Row

FieldTypeDescription
indexnumber1-based step index, displayed as #1, #2, ...
step_namestringStep identifier (e.g. agent_sd_coverage, agent_pull_repos) — monospace
tokensnumberTotal tokens consumed in this step (e.g. 62,292 tok)
turnsnumberTurns in this step, suffixed t (e.g. 128t)
coststringStep cost (e.g. $9.79) — green text

Input Trigger Variables (Automation-triggered jobs)

Jobs triggered by Jira automations include trigger context in the INPUT card:

FieldTypeDescription
trigger_ticket_urlstringFull Jira ticket URL from trigger event
trigger_projectstringJira project key (e.g. "MVP")
trigger_assigneestringJira account ID of assignee
trigger_statusstringJira issue status at trigger time (e.g. "To Do", "In Review")
trigger_issue_keystringJira issue key (e.g. "MVP-1601")
trigger_issue_typestringJira issue type (e.g. "Bug", "Story")

States & Variations

StateTriggerVisual Indicator
All filter activeDefault / click "All"Active filter pill is dark grey solid background (NOT green/blue — earlier docs were wrong)
Running filter?status=runningOnly running jobs shown, Running tab active. Count badge ("Running 3") only when jobs are actually running
Completed filter?status=completedOnly completed jobs shown
Failed filter?status=failedOnly failed jobs shown
Waiting filter?status=waitingOnly waiting jobs shown
Cancelled filter?status=cancelledOnly cancelled jobs shown
Running count badgeRunning jobs existRunning tab shows count badge (e.g. "Running 3")
Job completedFinished successfullyGreen dot + "Completed" badge
Job failedError occurredRed dot + "Failed" badge
Job runningIn progressBlue pulsing dot + "Running" badge, live-ticking duration
Job waitingBlocked at gateAmber dot + "Waiting" badge
Job pendingNot yet started"Pending" badge
Job cancelledUser cancelledGrey dot + "Cancelled" badge
Effort: Maxeffort_level = "max"Purple "MAX" pill badge
Effort: Higheffort_level = "high"Orange/amber "HIGH" pill badge
Effort: Mediumeffort_level = "medium"Dark grey "MEDIUM" pill badge
Inline cost+model presentJob has cost-tracking telemetryRow shows ${cost} {model_short} after duration (e.g. $9.79 opus-4-7)
Inline cost+model absentOlder job (pre-cost-tracking)Row stops at duration; no $ or model in row text
LLM USAGE card presentDetail page, telemetry availableCard with cost/turns/tokens/cache/per-step breakdown renders below INPUT
LLM USAGE card absentDetail page, no LLM telemetryLLM USAGE card omitted entirely (e.g. cancelled before any LLM call)
Status mismatch alertPortal status ≠ Temporal statusYellow inline alert above timeline reads Status mismatch: portal says "X" but orchestrator says "Y"
Ticket reference presentJob linked to ticketOrange/cyan ticket key text next to workflow name
Cancel availableJob is running or waiting"Cancel" button shown in list row and detail top-right
Resend availableJob is failed or cancelled"Resend" button shown in list row and detail top-right
Already resentResend was clicked"Resended" button shown (disabled/past tense)
Detail: Temporal timelineTemporal history availablePhase-based timeline: Init → Agent Setup → Execution → Teardown with durations and activity counts
Detail: Temporal unreachableTemporal history unavailable"Temporal unreachable" text replaces timeline (old jobs, cancelled jobs, service down)
Detail: Temporal status mismatchPortal vs orchestrator differERROR card may show "Status mismatch: portal says 'failed' but orchestrator says 'COMPLETED'"
Detail: ERROR cardJob has failureRed "Error" card above timeline with "Step N (step-name) failed" + error detail
Detail: OUTPUT cardJob completedDark "Output" card below timeline with green completion message
Detail: trigger variablesAutomation-triggered jobINPUT card shows trigger_ticket_url, trigger_project, trigger_assignee, trigger_status, trigger_issue_key, trigger_issue_type
Empty: All tabNo jobs dispatched, "All" activeLightning bolt icon + "No jobs yet" heading + "Run a workflow from the agents page to create a job" hint
Empty: Running tabNo running jobs, "Running" activeLightning bolt icon + "No running jobs" heading + same hint
Empty: Waiting tabNo waiting jobs, "Waiting" activeLightning bolt icon + "No waiting jobs" heading + same hint
Empty: Completed tabNo completed jobs, "Completed" activeLightning bolt icon + "No completed jobs" heading + same hint
Empty: Failed tabNo failed jobs, "Failed" activeLightning bolt icon + "No failed jobs" heading + same hint
Empty: Cancelled tabNo cancelled jobs, "Cancelled" activeLightning bolt icon + "No cancelled jobs" heading + same hint
Agent filter hiddenNo agents registered or no jobsAgent dropdown not rendered in filter bar; only Workflow filter shown
Workflow filter emptyNo jobs existWorkflow dropdown only shows "All workflows" — options populate dynamically from job data
Infinite scrollScroll to bottom"Loading more..." appears, loads next 50 jobs

Common Tasks

1. View job list

  1. Navigate to /portal/jobs
  2. See all jobs with status, workflow name, ticket ref, agent, step count, duration, time

2. Filter jobs by status

  1. Click filter tab (Running / Waiting / Completed / Failed / Cancelled)
  2. List filters to matching jobs, URL updates to ?status={status}

3. Search by ticket reference

  1. Click the "Search tickets..." textbox
  2. Type ticket reference (e.g. "PROJ-123")
  3. List filters to matching jobs

4. Filter by workflow

  1. Click the "Workflow" dropdown (native <select>)
  2. Select a workflow name (e.g. "SE Rca Fix", "QA Validate")
  3. List filters to jobs for that workflow

5. Filter by agent

  1. Click the "Agent" dropdown (native <select>)
  2. Select an agent name
  3. List filters to jobs for that agent

6. View job detail

  1. Click any job row in the list
  2. See workflow name, ticket ref, status, input parameters, step execution timeline

7. View Temporal timeline

  1. On job detail page, see the timeline section below INPUT/ERROR
  2. Timeline shows 4 phases: Init, Agent Setup, Execution, Teardown with durations
  3. Execution phase shows runAndMonitor sub-entry with workflow ID and agent name
  4. If Temporal is unreachable, shows "Temporal unreachable" instead

8. Cancel a running or waiting job

  1. On a running/waiting job (list or detail), click the "Cancel" button
  2. Job transitions to "Cancelled" status

9. Resend a failed or cancelled job

  1. On a failed/cancelled job (list or detail), click the "Resend" button
  2. Job is re-dispatched — button changes to "Resended" (disabled)

Tips

  • Jobs are created when workflows are dispatched via Run Workflow button, Run Job on agent, Queue dispatch, or Automation trigger
  • The effort level maps to LLM model: Max/High = Opus, Medium = Sonnet — confirmed by inline model_short text on rows (opus-4-7 for max/high, sonnet-4-6 for medium)
  • Inline $cost model_short was added in Apr 2026 cost-tracking. Use it as a quick filter heuristic when scanning lists for expensive runs
  • The LLM USAGE card is the canonical source for total spend per job — sum the Cost field across rows for fleet-level totals. The PER STEP table itemizes per pipeline step
  • Cache read typically dwarfs input_tokens because of system-prompt + skill-pack caching; large cache_read with low input_tokens is the expected, healthy pattern
  • Prompt sha identifies the canonical prompt build — same SHA across jobs means identical static prompt content, useful for reproducibility checks
  • The token-usage span on each row ("N in · N,NNN out · N turns · claude-{model}") is the same data the LLM USAGE card aggregates; both are absent on jobs without telemetry
  • Pipeline ID format is pipeline-job-{id}
  • Job list shows relative timestamps ("Nm ago", "Nh ago"); detail page shows absolute timestamps
  • The Temporal timeline shows 4 phases (Init, Agent Setup, Execution, Teardown) — Execution contains the actual workflow run with agent name
  • Workflow names appear as Title Case in the list (e.g. "SE Rca Fix") but as slugs in detail headings (e.g. "se-rca-fix")
  • Heading format on detail page: "workflow-slug — ticket-key" (when ticket linked) or "workflow-slug — queued" (from queue)
  • Agent names link to /portal/agents page
  • Automation-triggered jobs show trigger context variables in INPUT (trigger_ticket_url, trigger_project, trigger_assignee, trigger_status, trigger_issue_key, trigger_issue_type)
  • INPUT card may contain hint: field showing extra dispatch instructions or automation trigger context (e.g. "Jira webhook: jira:issue_updated")
  • Queued jobs (non-automation) show only standard params (ticket_url, hint) without trigger_* variables
  • Infinite scroll loads 50 items per page
  • Job links from filtered views include ?from_status={status} for back-navigation context

Gotchas

  • Cancel works on running AND waiting: Both running and waiting jobs can be cancelled
  • Resend button: Apr 2026 — current accessibility tree exposes only button "Resend" on failed/cancelled rows. Earlier docs claimed a "Resended" disabled state appears post-click; this could not be reverified non-destructively in the Apr 2026 pass. Treat the post-click label as needs verification and avoid double-clicking Resend in automation
  • No delete: There is no UI to delete jobs from history
  • Effort badge colors are NOT all green: Earlier docs were wrong. As of Apr 2026: MAX = purple, HIGH = orange/amber, MEDIUM = dark grey. Color-based selectors must use per-level CSS classes, not a single shared green class
  • Inline cost/model only on telemetry-present jobs: Older jobs and any job created before cost-tracking shipped omit the $cost model_short segment. Don't rely on its presence to detect "completed"; rely on the explicit Status badge instead
  • LLM USAGE card may be absent: Cancelled-before-execution jobs and very old jobs render the detail page without the LLM USAGE card. Tests must guard with if card present rather than assuming presence
  • Status mismatch alert is a real failure signal: When the yellow ⚠ Status mismatch alert renders, the portal DB and Temporal disagree about the job outcome. The portal-side status drives the badge and Resend availability; the Temporal-side status drives the timeline. Investigators should check both to find the truth
  • "Report a Bug" floating button: Anchored to viewport bottom-right on every portal page (not just Jobs). Don't snapshot it as Jobs-specific; it's global to /portal/*
  • Status dots: Colored dots match status: green=completed, red=failed, blue=running (pulsing), amber=waiting, grey=cancelled
  • Workflow/Agent dropdowns: Native <select> elements — use select_option() to interact
  • Search scope: "Search tickets..." searches by ticket reference only, not by workflow name or agent
  • Temporal unreachable: Older jobs, cancelled jobs, and jobs during Temporal outages show "Temporal unreachable" instead of the phase timeline — OUTPUT/ERROR cards still display from portal DB
  • Temporal status mismatch: A job's portal status and Temporal status can differ — e.g., portal shows "Failed" but Temporal shows "COMPLETED". The ERROR card shows the mismatch detail
  • Cancelled jobs: Often show "Temporal unreachable" rather than a timeline — no step-level detail available
  • Live duration: Running jobs show a ticking duration counter
  • hint field: The INPUT card may show a hint: field with automation context (e.g. "Jira webhook: jira:issue_updated") — this helps trace how the job was triggered
  • Empty state per filter: Each filter tab shows its own empty state heading — "No running jobs", "No completed jobs", etc. Only the All tab says "No jobs yet". The hint text is always the same
  • Dynamic dropdown options: Workflow and Agent filter dropdowns populate dynamically from existing job data. An account with 0 jobs shows only "All workflows" and no Agent dropdown at all
  • Workflow filter dual IDs: Historical jobs use legacy agent_* prefixed IDs (e.g. agent_se_work); newer jobs use dash-separated IDs (e.g. se-work). Both appear in the Workflow filter dropdown since it populates from job data
  • Workflow filter select ID: The select element has id="workflow-filter-select" — useful for targeted automation
  • Page title format: List page: "Jobs - SideButton Fleet". Detail page: "Job #{id} - SideButton Fleet"
  • No Show details expandable: The old <details> expandable with RESOLVED INPUT/OUTPUT is gone — replaced by Temporal timeline phases