Bug Triage Assistant
Shared 11/16/2025
4 views
Visual Workflow
JSON Code
{
"id": "lcsB2d4s60tqiPQb",
"meta": {
"instanceId": "7de897db6fbc7fb58e78ecbb97e38045ae0d605d054ce90260b335debf6da26a",
"templateCredsSetupCompleted": true
},
"name": "bug-triage-assistant",
"tags": [],
"nodes": [
{
"id": "943ef694-d0c6-4564-bec4-3c679219c7bf",
"name": "Bug Form Trigger",
"type": "n8n-nodes-base.formTrigger",
"position": [
0,
0
],
"webhookId": "c99582cb-f92c-4e65-8fc3-def91dff367c",
"parameters": {
"options": {},
"formTitle": "Bug",
"formFields": {
"values": [
{
"fieldLabel": "Title",
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "Description",
"requiredField": true
}
]
},
"formDescription": "Write the bug title to raise the issue"
},
"typeVersion": 2.3
},
{
"id": "0cd6a38c-f59d-41c3-8d68-7db06318e7dd",
"name": "Jira: Fetch Labels",
"type": "n8n-nodes-base.httpRequest",
"position": [
224,
0
],
"parameters": {
"url": "https://surnr.atlassian.net/rest/api/3/label",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "jiraSoftwareCloudApi"
},
"credentials": {
"jiraSoftwareCloudApi": {
"id": "DwU5Izvj4ptW318v",
"name": "Jira SW Cloud account"
}
},
"typeVersion": 4.3
},
{
"id": "9f0175bb-c956-428b-9446-47681ddcfd20",
"name": "Triage Prompt Builder",
"type": "n8n-nodes-base.code",
"position": [
448,
0
],
"parameters": {
"jsCode": "// Get incoming item\nconst data = $input.first().json;\n\n// Extract labels array\nconst incomingLabels = Array.isArray(data.values) ? data.values : [];\n\n// Convert labels to comma-separated string\nconst labelsText = incomingLabels.join(\", \");\n\n// Read title + description from the form node\nconst title = $('Bug Form Trigger').first().json.Title || \"(no title)\";\nconst description = $('Bug Form Trigger').first().json.Description || \"(no description)\";\n\n// Build system message (schema handled separately in structured output settings)\nconst system_message = `You are an automated triage assistant for engineering issues.\n\nYou will receive:\n- issue title\n- full description\n- a list of incoming labels\n\nYour job is to:\n 1) Normalize and return the most relevant labels (lowercase strings).\n 2) Infer the work_type (Bug, Story, Task, Incident, Spike).\n 3) Infer the priority (Highest, High, Medium, Low, Lowest).\n 4) Produce a concise short_summary (8–12 words, <140 chars).\n\nIncoming labels (raw): ${labelsText}\n\n**REQUIREMENTS**\n- Return ONLY a single JSON object.\n- It MUST strictly follow the JSON Schema provided separately in the structured output settings.`;\n\n// Build user message\nconst user_message = `Title: ${title}\nDescription:\n${description}`;\n\n// Return messages for LLM node\nreturn {\n system_message,\n user_message\n};\n"
},
"typeVersion": 2
},
{
"id": "2cbb5bcf-4c24-48d4-8d03-6f08a32d6358",
"name": "Categories Reported Bug",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
672,
0
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1",
"cachedResultName": "GPT-4.1"
},
"options": {
"textFormat": {
"textOptions": {
"type": "json_schema",
"schema": "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"object\",\n \"required\": [\"labels\", \"work_type\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"labels\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"Normalized labels relevant to the issue (lowercase).\"\n },\n \"work_type\": {\n \"type\": \"string\",\n \"enum\": [\"Bug\", \"Story\", \"Task\", \"Incident\", \"Spike\"],\n \"description\": \"Normalized work type / issue type.\"\n }\n }\n}"
}
}
},
"responses": {
"values": [
{
"role": "system",
"content": "={{ $json.system_message }}"
},
{
"content": "={{ $json.user_message }}"
}
]
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"id": "CdlaLof92KmjuyxP",
"name": "OpenAi account 2"
}
},
"typeVersion": 2
},
{
"id": "fc8470b0-fa2c-4247-802f-48c1d83af96d",
"name": "Jira: Search Related Issues",
"type": "n8n-nodes-base.jira",
"position": [
1024,
0
],
"parameters": {
"limit": 25,
"options": {
"jql": "=project = Engineering AND issuetype = {{ $json.output[0].content[0].text.work_type }} AND labels in ({{ $json.output[0].content[0].text.labels.map(v => `\"${v}\"`).join(\", \") }}) ORDER BY updated DESC"
},
"operation": "getAll"
},
"credentials": {
"jiraSoftwareCloudApi": {
"id": "DwU5Izvj4ptW318v",
"name": "Jira SW Cloud account"
}
},
"typeVersion": 1
},
{
"id": "3d49629b-2558-467e-9800-2ba20ef1711f",
"name": "Issues Prompt Builder",
"type": "n8n-nodes-base.code",
"position": [
-16,
304
],
"parameters": {
"jsCode": "function cleanJiraIssues(response) {\n if (!Array.isArray(response)) return [];\n\n // Helper to safely extract nested fields\n const safe = (obj, path, fallback = \"\") =>\n path.reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj) ?? fallback;\n\n // Shorten long text fields\n const snip = (text, max = 400) => {\n if (!text) return \"\";\n const s = String(text);\n return s.length <= max ? s : s.substring(0, max) + \"…\";\n };\n\n return response.map(issue => {\n issue = issue.json\n const f = issue.fields || {};\n\n // Extract last 2 comments safely\n const comments = safe(f, [\"comment\", \"comments\"], []);\n const latest_comments = Array.isArray(comments)\n ? comments.slice(-2).map(c => {\n const author =\n safe(c, [\"author\", \"displayName\"]) ||\n safe(c, [\"author\", \"emailAddress\"]) ||\n \"unknown\";\n const body = c.body || c.bodyText || c.renderedBody || \"\";\n return `${author}: ${snip(body)}`;\n })\n : [];\n\n // Extract attachments (max 5)\n const attachments = Array.isArray(f.attachment)\n ? f.attachment.slice(0, 5).map(a => a.filename || a.id || \"\")\n : [];\n\n // Normalize labels\n const labels = Array.isArray(f.labels)\n ? f.labels.map(l => String(l).toLowerCase())\n : [];\n\n // Assignee\n const assigneeObj = f.assignee || null;\n const assignee = assigneeObj\n ? assigneeObj.emailAddress ||\n assigneeObj.displayName ||\n assigneeObj.accountId ||\n \"\"\n : \"\";\n\n return {\n key: issue.key,\n summary: f.summary || \"\",\n description: snip(f.description || \"\", 600), // small snippet, optional\n status: safe(f, [\"status\", \"name\"], \"\"),\n labels,\n priority: safe(f, [\"priority\", \"name\"], \"\"),\n updated: f.updated || f.created || \"\",\n assignee,\n latest_comments,\n attachments\n };\n });\n}\n\n// ------------------------\n// CALL IT:\n// ------------------------\n\nconst response = $input.all()\n\nconst cleaned = cleanJiraIssues(response);\n\n\nconst system_prompt = `You are an automated engineering triage assistant.\n\nYou will receive:\n- an incoming report (title + description),\n- a list of related Jira issues.\n\nYour job: produce a single JSON object containing only these fields:\n\"summary\", \"description\", \"work_type\", \"priority\", \"labels\", \"assignees\", \"linked_issues\".\n\nREQUIREMENTS (READ CAREFULLY)\n1. **Return ONLY** a single JSON object and nothing else — no commentary, no explanation, no markdown, no code fences. The object must exactly match the provided JSON Schema. \n2. Do not include any additional properties beyond those in the schema. If a value is unknown, return an empty string or empty array as appropriate. \n3. 'labels' and 'assignees' must be arrays of strings (primary candidate first). Use emails or canonical usernames when available. \n4. 'work_type' must be one of: 'Bug', 'Story', 'Task', 'Incident', 'Spike'. \n5. 'priority' must be one of: 'Highest', 'High', 'Medium', 'Low', 'Lowest'. \n6. 'linked_issues' must be an array of objects with exactly these properties: 'key' (string), 'score' (number between 0 and 1), 'reason' (short string). Include only issues you used to decide. \n7. 'description' should be an actionable issue description (problem statement, repro steps if available, observed vs expected, short logs/snippets, and recommended immediate next step(s)). Keep it concise but complete. \n8. Prefer existing owners from related issues for 'assignees' where reasonable; briefly base choice on who is the last assignee or most recently active (you will not output the reasoning beyond the 'linked_issues.reason' strings). \n\nReturn precisely one JSON object that validates against the provided schema.`\n\n\nfunction safeGet(obj, key, fallback = \"\") {\n return (obj && obj[key] !== undefined && obj[key] !== null) ? obj[key] : fallback;\n}\n\nconst data = $('Bug Form Trigger').first().json\n\nconst incomingTitle = safeGet(data, \"Title\", \"(no title provided)\");\nconst incomingDescription = safeGet(data, \"Description\", \"(no description provided)\");\n\nconst issues = cleaned\n\nlet relatedIssuesText = \"\";\n\nissues.forEach((issue, idx) => {\n relatedIssuesText += `\n${idx + 1})\nkey: ${issue.key}\nsummary: ${issue.summary}\ndescription: ${issue.description}\nstatus: ${issue.status}\nassignee: ${issue.assignee || \"\"}\nlabels: ${JSON.stringify(issue.labels || [])}\npriority: ${issue.priority || \"\"}\nupdated: ${issue.updated || \"\"}\nlatest_comments: ${JSON.stringify((issue.latest_comments || []).map(c => c))}\n`;\n});\n\n// Now build the final user prompt\nconst user_prompt = `\nIncoming Report:\nTitle: ${incomingTitle}\n\nDescription:\n${incomingDescription}\n\n\nRelated Jira Issues (Top ${issues.length}):\n${relatedIssuesText}\n\nInstructions:\n- Analyze the incoming report and the related issues above.\n- Produce ONLY one JSON object that strictly conforms to the JSON Schema supplied (summary, description, work_type, priority, labels, assignees, linked_issues).\n- If appropriate, reference related issues by putting them inside \"linked_issues\" with a short one-line reason.\n- Use the related issues to choose assignees (prefer existing owners).\n- Keep description actionable: problem statement, repro steps if available, observed vs expected, short logs, and next steps.\n- Return ONLY the JSON object, no extra text.\n`.trim();\n\n\nreturn {system_prompt, user_prompt};\n"
},
"typeVersion": 2
},
{
"id": "b9200fce-555d-49e3-a578-1ce9fd9907b3",
"name": "Jira: Create Issue",
"type": "n8n-nodes-base.jira",
"position": [
720,
304
],
"parameters": {
"project": {
"__rl": true,
"mode": "list",
"value": "10000",
"cachedResultName": "Engineering"
},
"summary": "={{ $json.output[0].content[0].text.summary }}",
"issueType": {
"__rl": true,
"mode": "list",
"value": "10006",
"cachedResultName": "Bug"
},
"additionalFields": {
"labels": "={{ $json.output[0].content[0].text.labels }}",
"assignee": {
"__rl": true,
"mode": "list",
"value": "712020:a43399b8-6fe1-4b95-973e-3a06b599b9f6",
"cachedResultName": "alice"
},
"priority": {
"__rl": true,
"mode": "list",
"value": "2",
"cachedResultName": "High"
},
"description": "={{ $json.output[0].content[0].text.description }}"
}
},
"credentials": {
"jiraSoftwareCloudApi": {
"id": "DwU5Izvj4ptW318v",
"name": "Jira SW Cloud account"
}
},
"typeVersion": 1
},
{
"id": "32206f37-a615-42c2-afa7-cb5bd33f2b07",
"name": "Generate Issue Content",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
288,
304
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1",
"cachedResultName": "GPT-4.1"
},
"options": {
"textFormat": {
"textOptions": {
"type": "json_schema",
"schema": "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"object\",\n \"required\": [\n \"summary\",\n \"description\",\n \"work_type\",\n \"priority\",\n \"labels\",\n \"assignees\",\n \"linked_issues\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"summary\": {\n \"type\": \"string\",\n \"maxLength\": 140,\n \"description\": \"One-line Jira summary (8-12 words preferred).\"\n },\n \"description\": {\n \"type\": \"string\",\n \"description\": \"Actionable issue description: problem statement, repro steps if available, observed vs expected, short logs/snippets, recommended immediate next steps.\"\n },\n \"work_type\": {\n \"type\": \"string\",\n \"enum\": [\"Bug\", \"Story\", \"Task\", \"Incident\", \"Spike\"]\n },\n \"priority\": {\n \"type\": \"string\",\n \"enum\": [\"Highest\", \"High\", \"Medium\", \"Low\", \"Lowest\"]\n },\n \"labels\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"Normalized labels (lowercase, no spaces).\"\n },\n \"assignees\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" },\n \"description\": \"Suggested assignees\"\n },\n \"linked_issues\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\"key\", \"score\", \"reason\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"key\": { \"type\": \"string\" },\n \"score\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 1 },\n \"reason\": { \"type\": \"string\", \"maxLength\": 300 }\n }\n },\n \"description\": \"List of related issue keys used in the decision with confidence scores and short reason.\"\n }\n }\n}\n"
}
}
},
"responses": {
"values": [
{
"role": "system",
"content": "={{ $json.system_prompt }}"
},
{
"content": "={{ $json.user_prompt }}"
}
]
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"id": "CdlaLof92KmjuyxP",
"name": "OpenAi account 2"
}
},
"typeVersion": 2
},
{
"id": "490ea4bf-91a6-4f9d-8e5e-1fcfa4de66f4",
"name": "Jira: Link Issues",
"type": "n8n-nodes-base.httpRequest",
"position": [
1056,
304
],
"parameters": {
"url": "https://surnr.atlassian.net/rest/api/2/issueLink",
"method": "POST",
"options": {
"response": {
"response": {
"neverError": true
}
}
},
"jsonBody": "={\n \"type\": {\n \"id\": \"10003\"\n },\n \"outwardIssue\": {\n \"key\": \"{{ $json.key }}\"\n },\n \"inwardIssue\": {\n \"key\": \"{{ $('Generate Issue Content').item.json.output[0].content[0].text.linked_issues[0].key }}\"\n }\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "jiraSoftwareCloudApi"
},
"credentials": {
"jiraSoftwareCloudApi": {
"id": "DwU5Izvj4ptW318v",
"name": "Jira SW Cloud account"
}
},
"typeVersion": 4.3
},
{
"id": "c2134571-683e-4efb-a87d-f5107724ecfb",
"name": "PRD Prompt Builder",
"type": "n8n-nodes-base.code",
"position": [
-16,
624
],
"parameters": {
"jsCode": "const system_prompt = `You are an expert product and engineering documentation assistant for the Engineering Project at Company Insights.\nYou generate high-quality, detailed, and actionable documents in HTML format. \nYou understand software architecture, frontend/backend systems, data models, API behavior, user flows, triage processes, and engineering constraints.\n\n====================\nPROJECT CONTEXT (KNOWN TO YOU)\n====================\n- The project is the \"Engineering\" software project under the Jira key **KAN**.\n- It contains issues for frontend, backend, payments, checkout, admin UI, upload pipeline, legacy browser support, and platform infrastructure.\n- The codebase includes:\n • A modern SPA frontend (React/Next.js/TypeScript) \n • A microservice backend (Node.js + REST/GraphQL) \n • Authentication + payments modules \n • File upload subsystem \n • A mix of legacy components (IE11 support, migration paths, older UI modules) \n- Teams contributing to this project include:\n • Frontend Team \n • Payments Team \n • Platform Team \n • Admin UI Team \n- Bugs often relate to:\n • Tokenization issues \n • Checkout crashes \n • Rendering failures \n • Upload failures (chunking / large files) \n • Regression issues during releases \n- Stories often require:\n • UX improvements \n • Admin tooling \n • Feature enhancements \n • Rewriting legacy parts \n- Documentation style expected: PRD-style, Confluence-ready HTML, structured, precise.\n\n====================\nYOUR OBJECTIVE\n====================\nWhenever the user provides:\n- A task/problem description \n- One or more related Jira issues \n- Additional context, logs, or symptoms \n\nYou will produce a **complete, well-structured, Confluence-ready PRD document in HTML format**, containing:\n\n1. **Summary / TL;DR**\n2. **Background & Context**\n3. **Problem Statement**\n4. **Current Behavior**\n5. **Expected Behavior**\n6. **Motivation / Why this matters**\n7. **Related Issues (with bullet links)**\n8. **Use Cases / User Scenarios**\n9. **Proposed Solution**\n10. **Technical Requirements**\n11. **Architecture Notes** \n - data flow \n - API changes \n - component impact \n12. **Acceptance Criteria** (very detailed, bullet-pointed)\n13. **Dependencies & Assumptions**\n14. **Risks & Mitigations**\n15. **Open Questions**\n16. **Appendix** \n - logs \n - screenshots \n - reproducible test cases \n - any provided raw data\n\n====================\nOUTPUT REQUIREMENTS\n====================\n- Output **only HTML**, no explanations outside the document.\n- Expand the user’s short input into a full, long, professional PRD document.\n- Use clean HTML headings (H1, H2, H3).\n- If the user message includes related Jira issues, convert them into a **Related Issues** section.\n- If the user message hints at technical implications, expand details deeply using your project context knowledge.\n- Always fill every section, even if the user didn’t provide explicit information—make reasonable inferences.\n- If logs or attachments are provided, include them in an **Appendix**.\n- Write as though you're creating documentation for engineers, PMs, and QA.\n\n====================\nTONE & STYLE\n====================\n- Very clear \n- Professional \n- Concise but thorough \n- Written for engineering and product stakeholders \n- Avoid fluff; maximize clarity and depth \n\n====================\nFINAL INSTRUCTION\n====================\nGiven the user's task description and the list of related Jira issues, produce a **fully-fleshed PRD-style documentation** in **HTML** with all required sections, ready for Confluence.\nDo not include title in content since it is send separately.\nDo **not** return JSON; only return the HTML and use single Apostrophe only, don't use double.\n`\n\nlet user_prompt = $('Issues Prompt Builder').first().json.user_prompt\n\nuser_prompt += `New Jira issue Id: ${$('Jira: Create Issue').first().json.key}\\nSummary:${$('Generate Issue Content').first().json.output[0].content[0].text.summary}\\nDescription:${$('Generate Issue Content').first().json.output[0].content[0].text.description}`\n\nreturn { system_prompt, user_prompt}"
},
"typeVersion": 2
},
{
"id": "ab55137f-9158-4e95-8adb-1700a3a731f0",
"name": "Generate PRD Content",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
288,
624
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1",
"cachedResultName": "GPT-4.1"
},
"options": {
"textFormat": {
"textOptions": {
"type": "json_schema",
"schema": "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"object\",\n \"required\": [\"title\", \"content\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"title\": {\n \"type\": \"string\",\n \"description\": \"The title of the generated document.\"\n },\n \"content\": {\n \"type\": \"string\",\n \"description\": \"The full documentation content in HTML format.\"\n }\n }\n}\n"
}
}
},
"responses": {
"values": [
{
"role": "system",
"content": "={{ $json.system_prompt }}"
},
{
"content": "={{ $json.user_prompt }}"
}
]
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"id": "CdlaLof92KmjuyxP",
"name": "OpenAi account 2"
}
},
"typeVersion": 2
},
{
"id": "b556c210-4a64-4880-9be1-2d0b32d37ac0",
"name": "Confluence: Create Docs",
"type": "n8n-nodes-base.httpRequest",
"position": [
720,
624
],
"parameters": {
"url": "https://surnr.atlassian.net/wiki/api/v2/pages",
"method": "POST",
"options": {},
"jsonBody": "={ \"spaceId\": \"65871\", \"title\": \"{{ $json.output[0].content[0].text.title }}\", \"body\": { \"storage\": { \"value\": {{ JSON.stringify($json.output[0].content[0].text.content) }}, \"representation\": \"storage\" } } }",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "jiraSoftwareCloudApi"
},
"credentials": {
"jiraSoftwareCloudApi": {
"id": "DwU5Izvj4ptW318v",
"name": "Jira SW Cloud account"
}
},
"typeVersion": 4.3
},
{
"id": "b78118eb-96e4-4b0c-bf2b-21ff93e87c31",
"name": "Jira: Attach Docs",
"type": "n8n-nodes-base.httpRequest",
"position": [
1056,
624
],
"parameters": {
"url": "=https://surnr.atlassian.net/rest/api/3/issue/{{ $('Jira: Create Issue').item.json.id }}/remotelink",
"method": "POST",
"options": {},
"jsonBody": "={\n \"object\": {\n \"url\": \"{{ $json._links.base + $json._links.webui }}\",\n \"title\": \"{{ $json.title }}\"\n }\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "jiraSoftwareCloudApi"
},
"credentials": {
"jiraSoftwareCloudApi": {
"id": "DwU5Izvj4ptW318v",
"name": "Jira SW Cloud account"
}
},
"typeVersion": 4.3
}
],
"active": true,
"pinData": {
"Bug Form Trigger": [
{
"json": {
"Title": "Saved Payment Token Not Displayed on Checkout for Returning Users",
"formMode": "test",
"Description": "A returning user with an already-saved payment token is unable to see their saved card option on the Checkout page.",
"submittedAt": "2025-11-15T00:00:26.609+05:30"
}
}
]
},
"settings": {
"executionOrder": "v1"
},
"versionId": "40f80222-f1ac-4a01-8349-003340c3510d",
"connections": {
"Bug Form Trigger": {
"main": [
[
{
"node": "Jira: Fetch Labels",
"type": "main",
"index": 0
}
]
]
},
"Jira: Link Issues": {
"main": [
[
{
"node": "PRD Prompt Builder",
"type": "main",
"index": 0
}
]
]
},
"Jira: Create Issue": {
"main": [
[
{
"node": "Jira: Link Issues",
"type": "main",
"index": 0
}
]
]
},
"Jira: Fetch Labels": {
"main": [
[
{
"node": "Triage Prompt Builder",
"type": "main",
"index": 0
}
]
]
},
"PRD Prompt Builder": {
"main": [
[
{
"node": "Generate PRD Content",
"type": "main",
"index": 0
}
]
]
},
"Generate PRD Content": {
"main": [
[
{
"node": "Confluence: Create Docs",
"type": "main",
"index": 0
}
]
]
},
"Issues Prompt Builder": {
"main": [
[
{
"node": "Generate Issue Content",
"type": "main",
"index": 0
}
]
]
},
"Triage Prompt Builder": {
"main": [
[
{
"node": "Categories Reported Bug",
"type": "main",
"index": 0
}
]
]
},
"Generate Issue Content": {
"main": [
[
{
"node": "Jira: Create Issue",
"type": "main",
"index": 0
}
]
]
},
"Categories Reported Bug": {
"main": [
[
{
"node": "Jira: Search Related Issues",
"type": "main",
"index": 0
}
]
]
},
"Confluence: Create Docs": {
"main": [
[
{
"node": "Jira: Attach Docs",
"type": "main",
"index": 0
}
]
]
},
"Jira: Search Related Issues": {
"main": [
[
{
"node": "Issues Prompt Builder",
"type": "main",
"index": 0
}
]
]
}
}
}