S
Knowledge Pack Files
SideButton Marketing Website Knowledge Pack Files
Browse the source files that power the SideButton Marketing Website MCP server knowledge pack.
Available free v1.0.3 Browser
$
sidebutton install sidebutton.com Prerequisites
- Authenticated session (portal access)
- Cookie consent dismissed
- At least one online agent (for dispatch testing)
- Jira credentials configured in Settings > General (for Jira trigger tests)
Phase 1: Page Load & Structure
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 1.1 | Automations page loads | navigate to /portal/automations | H1 "Automations" visible |
| 1.2 | Automation count | snapshot | "N automations" text below heading |
| 1.3 | New Automation button | snapshot | button "+ New Automation" in top-right, sky blue outlined |
| 1.4 | Sidebar active | snapshot | "Automations" link active in sidebar navigation |
| 1.5 | Form hidden by default | snapshot | Create form not visible on initial load |
Phase 2: Empty State
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 2.1 | Empty state icon | snapshot (when 0 automations) | Refresh/cycle icon centered in content area |
| 2.2 | Empty state text | snapshot | "No automations yet" heading |
| 2.3 | Empty state hint | snapshot | "Automations trigger workflows based on events from Jira, SideButton, or a cron schedule" |
| 2.4 | Count shows 0 | snapshot | "0 automations" text below heading |
Phase 3: Create Form — Structure
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 3.1 | Open form | click button "+ New Automation" → snapshot | Form appears with Name, WHEN, WHAT sections |
| 3.2 | Close form (X) | click X button on form → snapshot | Form hidden, list visible |
| 3.3 | Toggle form | click "+ New Automation" twice → snapshot | Form opens then closes |
| 3.4 | Name input | snapshot | #form-name text input with placeholder "My automation" |
| 3.5 | Trigger type dropdown | snapshot | #form-trigger-type with options: "— Select Trigger —", "Jira", "SideButton", "Cron" |
| 3.6 | Workflow dropdown | snapshot | #form-workflow with "— Select Workflow —" default + 13 workflow options across all roles (SE, QA, PM, OPS, SD) |
| 3.7 | Workflow IDs format | evaluate JS to list #form-workflow options | Values use dash-separated IDs: se-work, qa-validate, pm-drive, pull-repos, sd-coverage (no agent_ prefix) |
| 3.8 | All roles in workflows | evaluate JS | All 5 roles present: SE (4), QA (4), PM (2), OPS (1), SD (1) = 12 workflows total |
| 3.9 | Agent dropdown | snapshot | #form-agent default "Any available agent", lists agents |
| 3.10 | Effort toggle buttons | snapshot | #form-effort-group with Max / High / Medium — Medium selected by default (sky highlight) |
| 3.11 | Cancel button | snapshot | #form-cancel-btn visible |
| 3.12 | Save button | snapshot | #form-save-btn sky blue button |
Phase 4: Trigger Type — Jira
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 4.1 | Select Jira trigger | select "Jira" in #form-trigger-type → snapshot | Jira trigger properties area appears in #trigger-properties |
| 4.2 | Jira unconfigured warning | snapshot (when Jira not configured) | Yellow warning banner: "Jira connection required" with "Configure Jira URL, email, and API token in Settings to enable filters." |
| 4.3 | Settings link in warning | snapshot | link "Settings" present inside warning banner, links to /portal/settings |
| 4.4 | Filters hidden when unconfigured | snapshot | No project/issue type/assignee/status dropdowns visible — replaced by warning |
| 4.5 | Project filter (when configured) | snapshot | #jira-project select dropdown visible |
| 4.6 | Issue type filter (when configured) | snapshot | #jira-issue-type select dropdown visible |
| 4.7 | Assignee search (when configured) | snapshot | #jira-user text input with datalist autocomplete |
| 4.8 | Status filter (when configured) | snapshot | #jira-status select dropdown visible |
| 4.9 | All filters optional | leave all Jira filters blank → save | Automation saves without Jira filters (matches all events) |
Phase 5: Trigger Type — Cron
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 5.1 | Select Cron trigger | select "Cron" in #form-trigger-type → snapshot | Cron-specific properties appear |
| 5.2 | Cron expression input | snapshot | #cron-schedule text input visible |
| 5.3 | Preset buttons | snapshot | .cron-preset buttons visible: "Every hour", "Daily 9am", "Weekdays 9am", "Weekly Mon 9am" |
| 5.4 | Click preset fills input | click "Daily 9am" preset → snapshot | #cron-schedule value populated with cron expression |
| 5.5 | Custom expression | type custom expression in #cron-schedule | Input accepts custom cron format |
Phase 6: Trigger Type — SideButton
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 6.1 | Select SideButton trigger | select "SideButton" in #form-trigger-type → snapshot | "SIDEBUTTON TRIGGER FILTERS" section heading appears |
| 6.2 | Workflow filter | snapshot | #sb-workflow labeled "Workflow (optional)", default "Any workflow". Lists all 13 workflows as Title-Case-Dash names |
| 6.3 | Event type filter | snapshot | #sb-event-type labeled "Event Type (optional)", default "Any event". Options: "Completed", "Started" |
| 6.4 | Layout: side-by-side | screenshot | Workflow and Event Type dropdowns are side-by-side; Agent on separate row below |
| 6.5 | Agent filter | snapshot | #sb-agent labeled "Agent (optional)", default "Any agent". Includes "Same agent (from triggering job)" option |
| 6.6 | Info text | snapshot | "Agent name and ticket URL (if present) from the triggering job will be passed to the dispatched job." visible below agent filter |
Phase 7: Workflow Params & Template Variables
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 7.1 | Select workflow shows params | select "SE Agent: Implement Fix + PR" in #form-workflow → snapshot | "WORKFLOW PARAMETERS" heading appears with param fields |
| 7.2 | Ticket URL param | snapshot | #param-ticket-url text input visible with help text: "Ticket URL passed to the workflow. Use {{trigger.ticket_url}} for auto-mapping." |
| 7.3 | Hint param | snapshot | #param-hint textarea, labeled "hint (optional)", placeholder "Static instructions for the workflow.." |
| 7.4 | ticket_url auto-fill (SideButton) | select SideButton trigger + workflow → snapshot | #param-ticket-url auto-filled with {{trigger.ticket_url}} |
| 7.5 | ticket_url auto-fill (Jira) | select Jira trigger + workflow → snapshot | #param-ticket-url auto-filled with {{trigger.ticket_url}} |
| 7.6 | ticket_url empty (Cron) | select Cron trigger + workflow → snapshot | #param-ticket-url is empty (no auto-fill for Cron) |
| 7.7 | Available vars — SideButton | snapshot below hint (SideButton trigger) | "Available: {{trigger.ticket_url}}, {{trigger.workflow}}, {{trigger.agent}}, {{trigger.event}}" |
| 7.8 | Available vars — Jira | snapshot below hint (Jira trigger) | "Available: {{trigger.ticket_url}}, {{trigger.project}}, {{trigger.assignee}}, {{trigger.status}}, {{trigger.issue_type}}, {{trigger.issue_key}}" |
| 7.9 | Available vars — Cron | snapshot below hint (Cron trigger) | "No trigger variables available" |
| 7.10 | Change workflow updates params | select different workflow → snapshot | Params section still shows ticket_url + hint (same for all workflows) |
| 7.11 | All workflows show same params | select OPS/PM/SD workflow → snapshot | ticket_url + hint params shown (same as SE/QA workflows) |
Phase 8: Create Automation (Happy Path)
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 8.1 | Create Jira automation | fill name + select Jira trigger + select workflow (e.g. "QA: Review PR Fix") + click Save | Automation appears in list, form closes |
| 8.2 | Create Cron automation | fill name + select Cron + enter expression + select workflow + Save | Automation appears with violet "Cron" badge |
| 8.3 | Create SideButton automation | fill name + select SideButton + select workflow + Save | Automation appears with emerald "SideButton" badge |
| 8.4 | Count updates | snapshot heading area | Automation count increases after creation |
| 8.5 | Default effort | create without changing effort → check saved config | Effort defaults to Medium (Sonnet) |
| 8.6 | Custom effort | select "Max" effort → save → verify | Effort saved as Max |
| 8.7 | Specific agent | select specific agent → save → verify | Agent saved correctly |
| 8.8 | With workflow params | fill ticket URL + hint → save → verify | Params saved in action_config |
Phase 9: Automation List — Row Structure
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 9.1 | Column headers | snapshot | "Automation" + "Actions" columns visible |
| 9.2 | Toggle switch | snapshot | [data-toggle-automation] visible, emerald for enabled |
| 9.3 | Automation name link | snapshot | Name is clickable link to /portal/automations/{id} |
| 9.4 | Trigger type badge | snapshot | Colored pill: Jira (blue), Cron (violet), SideButton (emerald) |
| 9.5 | Workflow label | snapshot | Formatted workflow name below automation name |
| 9.6 | Edit button | snapshot | Pencil icon link to /portal/automations/{id}/edit |
| 9.7 | Manual trigger button | snapshot | Play icon button |
| 9.8 | Delete button | snapshot | Trash icon button [data-delete-automation] |
Phase 10: Enable/Disable Toggle
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 10.1 | Disable automation | click toggle on enabled automation → snapshot | Toggle turns slate, row at 50% opacity |
| 10.2 | Re-enable automation | click toggle on disabled automation → snapshot | Toggle turns emerald, row at full opacity |
| 10.3 | Toggle non-destructive | disable → re-enable → snapshot | Automation preserved, no data lost |
| 10.4 | Toggle API call | check network or re-snapshot | PUT /api/automations/:id/toggle called |
Phase 11: Manual Trigger (List Page)
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 11.1 | Trigger enabled automation | click play button on enabled automation | Automation fires, dispatch count may increase |
| 11.2 | Trigger disabled automation | click play button on disabled automation | Verify behavior (should still trigger — play button fires regardless) |
Phase 12: Dispatch Count Badge
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 12.1 | Badge visible after dispatch | trigger an automation → snapshot | Amber "N jobs" badge appears on the row |
| 12.2 | Badge links to queue | click amber badge | Navigates to /portal/queue?automation_id={id} |
| 12.3 | No badge when 0 dispatches | snapshot automation with no dispatches | No dispatch count badge shown |
Phase 13: Edit Automation
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 13.1 | Navigate to edit | click pencil icon → verify URL | URL is /portal/automations/{id}/edit |
| 13.2 | Form pre-filled | snapshot edit page | Name, trigger type, workflow, agent, effort all pre-populated |
| 13.3 | Change name | modify name → save → verify | Name updated in list |
| 13.4 | Change trigger type | change from Jira to Cron → save → verify | Trigger type updated, badge changes color |
| 13.5 | Change workflow | select different workflow → save → verify | Workflow label updated in list |
| 13.6 | Cancel edit | click Cancel → verify | Returns to list, no changes saved |
Phase 14: Detail Page
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 14.1 | Navigate to detail | click automation name → verify URL | URL is /portal/automations/{id} |
| 14.2 | Config displayed | snapshot | Automation name, trigger type, workflow, agent, effort visible |
| 14.3 | Toggle on detail | click #detail-toggle → snapshot | Toggle state changes, #detail-toggle-label updates ("Enabled"/"Disabled") |
| 14.4 | Trigger button | snapshot | #trigger-btn button visible |
| 14.5 | Delete button | snapshot | #delete-btn button visible |
Phase 15: Manual Trigger Dialog (Detail Page)
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 15.1 | Open trigger dialog | click #trigger-btn → snapshot | #trigger-dialog modal appears |
| 15.2 | Ticket URL input | snapshot dialog | #trigger-ticket-url optional input visible |
| 15.3 | Dispatch without URL | click #trigger-confirm without URL → snapshot | Triggers successfully, #trigger-result shows success with job ID |
| 15.4 | Dispatch with URL | enter ticket URL → click #trigger-confirm → snapshot | Triggers with ticket URL passed to dispatched job |
| 15.5 | Cancel dialog | click #trigger-cancel → snapshot | Dialog closes, no dispatch |
Phase 16: Trigger Logs (Detail Page)
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 16.1 | Logs section visible | snapshot detail page | #logs-content container visible |
| 16.2 | Log entries after trigger | trigger automation → navigate to detail → snapshot | Log entries appear showing trigger event |
| 16.3 | Log entry fields | snapshot | Each log shows: matched status, dispatched job ID (if matched), timestamp |
| 16.4 | Pagination controls | snapshot (when >50 logs) | #logs-prev and #logs-next buttons, #logs-info text |
| 16.5 | Pagination navigation | click #logs-next → snapshot | Next page of logs loaded |
Phase 17: Delete Automation
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 17.1 | Delete from list | click trash icon → confirm → snapshot | Automation removed from list |
| 17.2 | Delete confirmation | click trash icon → snapshot | Confirmation prompt appears before deletion |
| 17.3 | Count decreases | snapshot heading area | Automation count decreases after deletion |
| 17.4 | Delete from detail | navigate to detail → click #delete-btn → confirm | Automation deleted, redirects to list |
Phase 18: Edge Cases
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 18.1 | Submit without name | leave name empty → click Save | Validation prevents save or shows error |
| 18.2 | Submit without trigger | leave trigger as "— Select Trigger —" → Save | Validation prevents save or shows error |
| 18.3 | Submit without workflow | leave workflow unselected → Save | Validation prevents save or shows error |
| 18.4 | Duplicate name | create two automations with same name | Verify behavior (may allow or reject) |
| 18.5 | Long name | enter very long name → save → snapshot | Name accepted, no layout break |
| 18.6 | Special characters in name | use <script>, quotes, etc. in name | No XSS, characters escaped properly |
| 18.7 | Invalid cron expression | enter "invalid" in #cron-schedule → save | Validation rejects or warns |
| 18.8 | Jira without config | select Jira trigger without Jira credentials in Settings | Yellow warning banner with "Jira connection required" and Settings link; filter controls hidden |
Phase 19: Cross-Module Integration
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 19.1 | Queue link from badge | click dispatch count badge → verify URL | /portal/queue?automation_id={id} shows filtered items |
| 19.2 | Dispatched jobs visible | trigger automation → navigate to Jobs → snapshot | Job appears in Jobs list with correct workflow |
| 19.3 | Queue items from automation | trigger automation → navigate to Queue | Queue item with source="automation" visible |
| 19.4 | Settings Jira dependency | remove Jira config → test Jira automation | Jira automation fails or shows config warning |
Automation Tips
- All form dropdowns (
#form-trigger-type,#form-workflow,#form-agent) are native<select>elements — useselect_optiontool, not click - Effort buttons (
#form-effort-group) are NOT a select — they are toggle buttons. Click the desired effort level directly - Trigger type change dynamically swaps the
#trigger-propertiescontent — always re-snapshot after changing trigger type - The
#form-cancel-btnID may differ between create and edit forms — use#form-cancel-btnor#form-cancel-btn-2 - Jira assignee (
#jira-user) uses datalist autocomplete — type partial name, then select from suggestions - Template variables (
{{trigger.ticket_url}}) are literal text in the input — they get resolved at dispatch time - ticket_url is auto-filled with
{{trigger.ticket_url}}for Jira/SideButton triggers; empty for Cron - Available variable hints change per trigger type — always re-snapshot after switching trigger type
- Workflow IDs use dashes without
agent_prefix (e.g.se-work,qa-validate,pm-drive) - All 13 workflows across all roles are available — not limited to SE/QA
- SideButton trigger: Workflow and Event Type are side-by-side; Agent is on a separate row
- Manual trigger from list (play button) fires immediately without dialog; manual trigger from detail page opens a dialog
- The detail page toggle (
#detail-toggle) is a separate endpoint from the list toggle ([data-toggle-automation]) — both call PUT/api/automations/:id/toggle - Dispatch count badge only appears when dispatch count > 0
- Delete uses browser
confirm()dialog — SideButton automation can handle this by clicking OK on the dialog - Trigger logs paginate at 50 per page (not infinite scroll like Queue/Jobs)
- Loop prevention: automation-dispatched jobs (source="automation") don't re-trigger automations
- Effort default is Medium (Sonnet) — differs from Queue which defaults to High (Opus)
- Jira unconfigured state: yellow warning banner replaces filter controls — test both states