SideButton Knowledge Module
SideButton Portal — Workflows — Knowledge Module
SideButton knowledge module — UI selectors, data model, and page states documenting Portal — Workflows.
sidebutton install sidebutton 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 (useagent-hostor{hostname}), real IP addresses (use203.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 "Workflows". Now 16 workflows (was 12). New
csmrole added (3 workflows: csm-daily-pulse, csm-discovery, csm-health-monitor). New SE workflowse-review-merge. All workflows now exposeentry_pathinput — every terminal.run-style workflow acceptsentry_pathtemplate variable. pm-sprint inputs expanded: previously hint-only, now exposesproject_key,capacity,hint,entry_path. Pack header now reads "SideButton Default Pack · {registry-name} (4)" with a non-default pack count. CSM badge has dark-grey/charcoal styling (distinct from PM purple). Read-only list — no "+ New Workflow" button (workflows are defined in knowledge-pack YAML files). Rows link to/portal/workflows/{id}. Auth0 login required.
Portal — Workflows
What This Is
Workflow management page for Fleet Control -- lists all registered workflows grouped by source pack, with enable/disable toggles, role badges, descriptions, slugs, step counts, source badges, and last-updated timestamps. Each workflow links to a detail page showing the full step definition including step types (terminal.open, terminal.run, poll), agent prompts, input parameters, and configuration. Workflows are YAML-defined automation templates that get dispatched to agents as jobs.
URL Patterns
| Pattern | Description |
|---|---|
/portal/workflows | Workflow list |
/portal/workflows/{id} | Workflow detail (by numeric ID) |
Browser tab title: List = "Workflows - SideButton Fleet", Detail = "{slug} - SideButton Fleet"
Page Structure
Workflow List (/portal/workflows)
+--[Sidebar]--+--[Main Content]------------------------------------------+
| | H1: "Workflows" |
| Workflows | "N workflows" |
| (active) | "SideButton Default Pack" (pack group header) |
| | |
| | WORKFLOW SOURCE UPDATED (column headers)|
| | |
| | [Toggle] [Badge] Title [default] Nm ago |
| | Description (truncated) |
| | slug N step |
| | ... |
+-------------+-----------------------------------------------------------+
Workflow Detail (/portal/workflows/{id})
+--[Sidebar]--+--[Main Content]------------------------------------------+
| | < Back to workflows |
| Workflows | |
| (active) | H1: Workflow Description [Toggle] Enabled |
| | slug N step Created date Updated date |
| | |
| | STEPS |
| | [dot] Step Name [Role Badge] |
| | Description text |
| | |
| | input params: key: {{input.key}} |
| | |
| | [terminal.open badge] Agent: Name {{entry_path}} |
| | [terminal.run badge] |
| | Agent prompt text (full instructions) |
| | |
| | [dot] Monitor task reports [poll badge] |
| | Poll description |
| | |
| | RECENT JOBS |
| | [dot] slug — {ticket_key or 'queued'} #ID time ago |
| | ... |
+-------------+-----------------------------------------------------------+
Key Elements
Workflow List
| Element | Selector / Ref | Notes |
|---|---|---|
| Page heading | heading "Workflows" | H1 |
| Workflow count | Below heading | "N workflows" |
| Pack group header | Below count | Pack source names joined by " · " — e.g. "SideButton Default Pack · {registry-name} (4)". Shows all registered packs with workflow counts for non-default packs. Non-default pack name is styled in orange/accent color (not a link in accessibility tree) |
| Column headers | Above first row | "WORKFLOW", "SOURCE", "UPDATED" |
| Enable/disable toggle | button "Disable workflow {slug}" | Green toggle switch per row; toggles workflow enabled/disabled state. Button label always says "Disable workflow {slug}" regardless of current state (enabled or disabled) — cannot determine toggle state from accessibility tree |
| Workflow row | link (each workflow) | Clickable, navigates to /portal/workflows/{id} |
| Role badge: CSM | Dark-grey/charcoal pill with "CSM" | NEW 2026-04-06 — Customer Success Management workflows |
| Role badge: PM | Purple circle with "PM" | Project Management workflows |
| Role badge: QA | Purple circle with "QA" | Quality Assurance workflows |
| Role badge: SE | Green circle with "SE" | Software Engineering workflows |
| Role badge: SD | Orange circle with "SD" | Skill Discovery workflows |
| Role badge: OPS | Green circle with "OPS" | Operations workflows |
| Workflow title | Bold text | e.g. "PM Agent: Drive Ticket" |
| Workflow description | Grey text below title | Truncated with "..." if long |
| Workflow slug | Grey monospace text | e.g. "pm-drive" |
| Step count | Grey text | "N step" |
| Source badge | Grey pill | "default" for built-in workflows |
| Relative time | Right column | "Nm ago" or "Nh ago" |
Workflow Detail
| Element | Selector / Ref | Notes |
|---|---|---|
| Back link | link "Back to workflows" | Chevron left + text, returns to list |
| Workflow description (H1) | heading | H1 with full workflow description (NOT the short title) |
| Enable/disable toggle | button "Disable workflow" | Green toggle next to H1, shows "Enabled" or "Disabled" text. Button label always says "Disable workflow" regardless of current state — use visible "Enabled"/"Disabled" text to determine state, not button label |
| Slug | Monospace text | Workflow slug identifier |
| Step count | Text | "N step" |
| Created date | Text | "Created M/D/YYYY, H:MM:SS AM/PM" |
| Updated date | Text | "Updated M/D/YYYY, H:MM:SS AM/PM" |
| STEPS section | "STEPS" label (uppercase) | Contains all step definitions |
| Step indicator | Blue dot | Left of step name |
| Step name | Bold in step area | e.g. "PM Agent: Drive Ticket", "SE Agent: Implement Fix + PR", "CSM Agent: Daily Pulse" |
| Step role badge | [CSM] / [PM] / [QA] / [SE] / [SD] / [OPS] | Small role pill next to step name |
| Step description | Text below name | Workflow description repeated |
| Input params | key: {{input.key}} format | Template variables for job dispatch (e.g. ticket_url, hint) |
| Step type: terminal.open | Green/teal terminal.open badge | Opens terminal on agent, shows "Agent: {Name}" + {{entry_path}} |
| Step type: terminal.run | Red/coral terminal.run badge | Contains full agent prompt/instructions in dark code block |
| Step type: poll | poll badge | "Monitor task reports" with polling description |
| RECENT JOBS section | "RECENT JOBS" label (uppercase) below steps | List of recent job executions for this workflow (up to 10 shown) |
| Recent job row | link per job | Color-coded status dot + "slug — {ticket_key or 'queued'}" (bold) + #ID + relative time; links to /portal/jobs/{id} |
| Job status dot: running | Red/orange dot | Currently executing job |
| Job status dot: completed | Green dot | Successfully completed job |
| Job status dot: failed/cancelled | Grey dot | Failed, timed-out, or cancelled job |
Data Model
Workflow
| Field | Type | Description |
|---|---|---|
| id | number | Workflow ID (auto-increment, changes when workflows are re-registered; e.g. 259-270 for default pack and 3127-3144 for non-default pack as of 2026-04-26). Non-contiguous ranges occur after re-registration |
| title | string | Short title (e.g. "PM Agent: Drive Ticket") — shown on list |
| description | string | Full description — shown as H1 on detail page and as subtext on list |
| slug | string | URL-safe identifier (e.g. "pm-drive") |
| role | string | "csm" / "pm" / "qa" / "se" / "sd" / "ops" |
| enabled | boolean | Whether workflow is active (toggle state) |
| source | string | Source pack name (e.g. "default", "{registry-name}") |
| step_count | number | Number of steps (always shows "1 step") |
| created_at | string (datetime) | Creation timestamp |
| updated_at | string (datetime) | Last update timestamp |
Workflow Step
| Field | Type | Description |
|---|---|---|
| name | string | Step display name (e.g. "SE Agent: Implement Fix + PR") |
| role | string | Step role identifier |
| description | string | Step description |
| type | string | "terminal.open" / "terminal.run" / "poll" |
| agent_name | string | Agent label for terminal steps (e.g. "Agent: SE Work") |
| path | string | Working directory — usually {{entry_path}} template variable; pull-repos uses fixed ~/workspace |
| prompt | string | Full agent prompt/instructions for terminal.run steps |
| input | object | Template input parameters ({{input.key}} syntax) |
Known Workflows (as of 2026-04-26)
entry_path is now a standard input on every workflow except pull-repos (which uses fixed ~/workspace). The "Inputs" column below lists the workflow-specific params; entry_path is always also present unless noted otherwise.
| Slug | Role | Title | Inputs (excl. entry_path) | Agent Name |
|---|---|---|---|---|
| csm-daily-pulse | CSM | CSM Agent: Daily Pulse | hint | Agent: CSM Daily Pulse |
| csm-discovery | CSM | CSM Agent: Customer Discovery | hint | Agent: CSM Discovery |
| csm-health-monitor | CSM | CSM Agent: Health Monitor | hint | Agent: CSM Health Monitor |
| pm-drive | PM | PM Agent: Drive Ticket | ticket_url, hint | Agent: PM Drive Ticket |
| pm-sprint | PM | PM Agent: Sprint Lifecycle | project_key, capacity, hint | Agent: PM Sprint Lifecycle |
| pull-repos | OPS | Ops: Pull All Repos | (none — uses fixed ~/workspace path, no entry_path) | Agent: Pull All Repos |
| qa-followup | QA | QA: Re-review PR After Fixes | ticket_url, hint | Agent: QA Re-review PR |
| qa-new-ticket | QA | QA: Test Live Site (New Ticket) | ticket_url, hint | Agent: QA Test Live |
| qa-regression | QA | QA: Regression Test (Live Site) | ticket_url, depth, hint | Agent: QA Regression (Live) |
| qa-validate | QA | QA: Review PR Fix | ticket_url, hint | Agent: QA Review PR Fix |
| sd-coverage | SD | SD Agent: Fill Skill Module | hint | Agent: SD Coverage |
| se-followup | SE | SE Agent: Apply Review Feedback | ticket_url, hint | Agent: SE Followup |
| se-rca | SE | SE Agent: Root Cause Analysis | ticket_url, hint | Agent: SE RCA |
| se-rca-fix | SE | SE Agent: RCA + Fix + PR | ticket_url, hint | Agent: SE RCA+Fix |
| se-review-merge | SE | SE Agent: Review + Merge PR | ticket_url, hint | Agent: SE Review + Merge |
| se-work | SE | SE Agent: Implement Fix + PR | ticket_url, hint | Agent: SE Work |
States & Variations
| State | Trigger | Visual Indicator |
|---|---|---|
| List view | /portal/workflows | All workflows listed with toggles, role badges, source badges |
| Detail view | /portal/workflows/{id} | Full step definition with prompts |
| Workflow enabled | Default state | Green toggle, "Enabled" text on detail |
| Workflow disabled | Toggle clicked | Toggle off state, "Disabled" text on detail |
| With recent jobs | Workflow has been executed | "RECENT JOBS" section at bottom with job links |
| Without recent jobs | No executions yet | No recent jobs section shown |
| Workflow with standard SE/QA inputs | Has ticket_url + hint + entry_path params | Three input param lines below step description (all SE/QA workflows + pm-drive) |
| Workflow with hint-only style | Has hint + entry_path params | Two input param lines (csm-*, sd-coverage) |
| Workflow with extra inputs | Has additional params beyond standard | qa-regression shows depth; pm-sprint shows project_key + capacity |
| Workflow without inputs | No input params (pull-repos only) | No input params section; uses fixed ~/workspace path instead of {{entry_path}} |
| Recent jobs: running | Job currently executing | Red/orange status dot |
| Recent jobs: completed | Older finished jobs | Green status dot |
| Recent jobs: failed/cancelled | Timed-out, errored, or cancelled jobs | Grey status dot |
| Invalid workflow ID | Navigate to /portal/workflows/99999 | Redirects to workflow list (no error page) |
| Long description | Workflow with long description | Truncated with "..." on list, full text as H1 on detail |
| Long H1 in accessibility tree | Detail page with long description | H1 text truncated in accessibility snapshot (e.g. "Find the lowest-coverage module, explore it in the browser, improve its skill fi") — full text in page content |
| Multi-pack header | Multiple pack sources registered | Pack group header shows all pack names joined by " · " with counts for non-default packs |
| Toggle updates timestamp | Toggle enabled/disabled on any workflow | UPDATED column refreshes to "Just now" on list page |
Common Tasks
1. Browse workflows
- Navigate to
/portal/workflows - See all workflows grouped by pack ("SideButton Default Pack")
- Column headers: WORKFLOW, SOURCE, UPDATED
2. View workflow detail
- Click any workflow row (the
linkelement, not the toggle) - See full step definitions, input parameters, agent prompts
- Back link at top returns to list
3. Enable/disable a workflow
- On list page: click the toggle switch (left of role badge) for the target workflow
- On detail page: click the toggle next to the H1 heading
- Toggle text changes between "Enabled" / "Disabled"
4. Understand workflow steps
- On detail page, read the STEPS section
terminal.open= opens a terminal session on the agent at{{entry_path}}terminal.run= executes the agent prompt (main work instructions)poll= monitors for task completion (15s interval, 2h timeout)
5. View recent job history for a workflow
- On detail page, scroll to "RECENT JOBS" section
- Each row shows: color-coded status dot + "slug — {ticket_key or 'queued'}" + job ID + relative time
- Click any job row to navigate to
/portal/jobs/{id}
Tips
- Workflows are organized by role: CSM (customer success), PM (planning), QA (testing), SE (engineering), SD (skill discovery), OPS (operations)
- The
terminal.runstep contains the full agent prompt -- this is the main instruction set - Input parameters use
{{input.key}}template syntax and are filled at dispatch time {{entry_path}}in terminal.open is resolved at dispatch time based on agent configuration- Workflow IDs are numeric (not slugs) in the URL pattern
- Role badges are color-coded: PM/QA use purple circles, SE/OPS use green circles, SD uses orange, CSM uses dark-grey/charcoal
- The H1 on the detail page is the workflow description, not the short title
- Source badges show "default" for built-in workflows from SideButton Default Pack
- Browser tab title on detail pages uses the workflow slug (e.g. "pm-drive - SideButton Fleet")
Gotchas
- H1 is the description, not the title: The detail page H1 shows the full description text (e.g. "Drive a ticket to completion — plan, dispatch SE/QA, track PRs, merge, validate, close. Idempotent."), not the short title ("PM Agent: Drive Ticket"). The short title appears as the step name instead.
- "Enabled" not "Active": Status is shown as a toggle switch with "Enabled"/"Disabled" text, not a green "Active" badge as in older versions
- Toggle vs row click: The enable/disable toggle and the workflow row link are separate clickable elements — clicking the toggle does not navigate to the detail page
- URL uses numeric ID: Workflow detail URL uses numeric IDs (
/portal/workflows/{id}, not a slug like/portal/workflows/pm-drive) - Invalid ID redirects: Navigating to a non-existent workflow ID (e.g.
/portal/workflows/99999) silently redirects to the workflow list — no error page or toast - No create/edit UI: The workflow list page has no "New Workflow" button -- workflows are managed via YAML files and the SideButton CLI, not through the portal UI
- Step type badges are color-coded:
terminal.open= green/teal,terminal.run= red/coral,poll= grey — all monospace font - Full prompts visible: The detail page shows the complete agent prompt text for
terminal.runsteps in a dark code block — these can be very long - No filter/search: Unlike Jobs and Queue, the workflow list has no status filter tabs, search box, or dropdown filters
- All workflows show "1 step": The step count shows "1 step" even though workflows have multiple sub-steps (terminal.open, terminal.run, poll) — this represents one logical agent task
- Recent Jobs format: Only appears on detail page for workflows that have been executed; shows up to 10 jobs. Format is "slug — {ticket_key or 'queued'}" with color-coded dots (red/orange=running, green=completed, grey=failed/cancelled). The text after "—" shows the job source label, NOT the execution status — status is indicated only by dot color. Each row links to
/portal/jobs/{id} - Descriptions truncated on list: Long workflow descriptions are truncated with "..." on the list page; full text shown on detail page as H1
- entry_path is a template variable: The terminal.open path shows
{{entry_path}}which is resolved at dispatch time — except pull-repos which uses the fixed path~/workspace entry_pathis now a universal input: As of 2026-04-06 every workflow exceptpull-reposexposes anentry_pathtemplate parameter (resolved at dispatch time). pull-repos still has zero inputs and uses a hard-coded~/workspacepath- Input params vary by workflow: SE/QA workflows + pm-drive use
ticket_url + hint + entry_path; CSM workflows + sd-coverage usehint + entry_path; pm-sprint usesproject_key + capacity + hint + entry_path; qa-regression addsdepthbetween ticket_url and hint; pull-repos has no inputs at all - Agent names are unique per workflow: Each workflow shows a distinct agent name in terminal.open (e.g. "Agent: SE Work", "Agent: QA Regression (Live)") — these correspond to agent configurations in Fleet Control
- Toggle button label never changes: On the list page, the button always reads
"Disable workflow {slug}"and on the detail page"Disable workflow"— regardless of whether the workflow is currently enabled or disabled. You cannot determine the toggle state from the accessibility tree; use the visible "Enabled"/"Disabled" text or screenshot instead - Toggle updates updated_at: Toggling enabled/disabled immediately updates the workflow's
updated_attimestamp, which shows as "Just now" in the UPDATED column - Multi-pack header: The pack group header now shows all registered pack sources joined by " · " (e.g. "SideButton Default Pack · {registry-name} (2)") with counts for non-default packs. Previously documented as only "SideButton Default Pack"
- Workflow IDs are dynamic: IDs change when workflows are re-registered (e.g. after reinstall). Don't hardcode IDs in tests — navigate via list page click instead
- Long H1 truncation in accessibility tree: Detail page H1 for workflows with long descriptions gets truncated in the accessibility snapshot. Use
snapshot(includeContent=true)to get the full text from page content - Recent jobs ordered by time, not ID: Recent jobs are sorted by most recent execution time, not by job ID. IDs may appear out of sequence within the same time period