Overview
Your AI builds a feature and marks the ticket ready for testing. Superflow’s QA agents review the deployed site against the ticket’s own acceptance checklist, write every finding back to the ticket, and move it to your fix column. Your coding agent fixes, resubmits, and the cycle repeats until the ticket lands in Done. There is no polling and no glue server: Jira Automation and Superflow’s workflow engine talk to each other directly over webhooks.How it works
A single QA pass runs as one workflow execution. A status change in Jira dispatches the run; the verdict returns as a signed webhook that Jira Automation turns into a comment, labels, and a status move.The ticket’s journey
Superflow decides which arrow fires; Jira Automation moves the card.Ticket states and labels
What you need
A Superflow workspace
A Jira project
A deployed site URL
Your Superflow API base URL
https://staging.velt.dev; your account team will confirm your host.POST with the headers x-velt-api-key and x-velt-auth-token, and the body wrapped as {"data": ...}. Responses come back as {"result": ...}.
Setup
Create the UAT Checker agent
Create the workflow definition
Create three Automation rules in Jira
qa, remove ai-fix, remove uat-passed), then Send web request with Wait for response enabled:x-velt-api-key and x-velt-auth-token (hidden) with the request. The correlationId — the issue key — is what routes results back to the right ticket; it rides every webhook Superflow sends.Rule 2 — QA-findings. Trigger: Incoming webhook, with work-item criteria set to No work items from the webhook. Generate the secret it offers — that is the <FINDINGS_WEBHOOK_SECRET> used in step 2.Add a For: JQL branch, key = {{webhookData.correlationId}}, holding three actions: a Comment rendering every finding, Edit labels (add ai-fix, remove qa), and Transition to Fix.<JIRA_INCOMING_WEBHOOK_URL_PASSED>. Comment ✅ Superflow QA — UAT passed, all agents clean, Edit labels (add uat-passed, remove qa), Transition to Done.Pick your Done status explicitly in the destination dropdown; the default Copy from trigger work item does not work for webhook-triggered rules.Connect the webhooks and write the first ticket
POST /v2/workflow/definitions/update with ifVersion set to the current version.Then write tickets with one convention: the description is the UAT checklist, a numbered list of concrete, checkable statements about the deployed page.Move the ticket to QA and watch. Findings arrive as a comment in about one to two minutes, pinned to the exact elements on your live page in the Superflow project.Driving it from your own system
If your software factory prefers direct API calls, or you use a different tracker, the same engine is fully drivable over REST. Jira Automation is just one possible client.Troubleshooting
Moving to QA does nothing
Moving to QA does nothing
ai-fix blocks re-runs, because the fixed ticket still wears the label when it re-enters QA. Let the rule’s own label action clear it instead.Dispatch returns 401
Dispatch returns 401
x-velt-auth-token, or key and token from different workspaces. Also check the hidden headers — they can blank when a rule is re-saved.Rule shows success but no run starts (200 with deduplicated: true)
Rule shows success but no run starts (200 with deduplicated: true)
idempotencyKey resolves to the same value every time, so the 24h dedup window swallows every run after the first. Known trap: Jira’s new flow editor renders {{now.format("...")}} as empty. Simplest fix — omit the field entirely.Run completes but no Jira comment
Run completes but no Jira comment
X-Automation-Webhook-Token. The rule’s Audit log shows each delivery.Agent step fails with already-exists
Agent step fails with already-exists
Findings comment shows counts only
Findings comment shows counts only
agentResultsSummary.summary. Iterate agentFindings instead — see the Rule 2 template above.Agents can't produce pinned comments
Agents can't produce pinned comments
Re-running QA right after a deploy repeats the old findings
Re-running QA right after a deploy repeats the old findings
A status is missing from the rule editor's dropdowns
A status is missing from the rule editor's dropdowns
Good to know
- Each QA pass is one workflow execution, correlated by ticket key. The back-and-forth is driven by ticket state, not a long-running process.
- The verdict is unanimous. One finding from any agent fails the pass. Tune the agent set to match how strict the gate should be.
- Findings in the webhook payload carry title, description, severity, and source URL — top 50 per agent by severity. For surgical detail (exact page text, suggested fix, element selector) fetch the agent execution with
includeResults: true. - Loop guard: cap retries with a “QA passes” counter field incremented by Rule 2, and a Rule 1 condition that stops dispatching past your limit — escalate to a human instead.
Coming next
- Native Jira connector: richer formatted comments, screenshots attached to findings, per-ticket run history, replacing the Automation-rule templates.
- Ticket references as a first-class field on runs — today the ticket key travels as
correlationId. - Cross-run loop accounting per ticket: pass counter, max-passes guard, and serialization of overlapping passes, inside Superflow instead of Jira fields.
- Per-ticket deployed URLs via a custom field — today the URL is set per rule; preview-deploy-per-ticket works by passing it in
triggerContext.page.url. - The same loop for Linear, Azure DevOps, and Slack-based trackers — the engine side is tracker-agnostic already.