{ "id": "U1xUqDLvBYYSU6EU", "meta": { "instanceId": "8d54a4232b4618928ac9df0152e207cb858f5f9ffa6f3ba2d31d941bdcaec9d7", "templateCredsSetupCompleted": true }, "name": "Jira Retrospective", "tags": [], "nodes": [ { "id": "b91c4727-8c63-4bf3-8101-6282aa6f592c", "name": "Jira Get All Issues", "type": "n8n-nodes-base.jira", "position": [ 60, 60 ], "parameters": { "options": {}, "operation": "getAll" }, "credentials": { "jiraSoftwareCloudApi": { "id": "AqnrDWxoCa8luriP", "name": "Jira SW Cloud account" } }, "typeVersion": 1 }, { "id": "4cf0689c-2a1f-4a90-81f4-d3483c63fc96", "name": "Jira Get All Comments", "type": "n8n-nodes-base.jira", "position": [ 280, 60 ], "parameters": { "options": {}, "issueKey": "={{ $json.key }}", "resource": "issueComment", "operation": "getAll" }, "credentials": { "jiraSoftwareCloudApi": { "id": "AqnrDWxoCa8luriP", "name": "Jira SW Cloud account" } }, "typeVersion": 1 }, { "id": "26803742-1a94-4969-878b-2f757aced4f8", "name": "AI Agent", "type": "@n8n/n8n-nodes-langchain.agent", "position": [ 940, 60 ], "parameters": { "text": "=comments = {{ $json.concatenated_Comment }}\ndescription = {{ $json.Description }}\ntitle = {{ $json.Title }}\nstatus = {{ $json.EpicStatus }}\nepic_name = {{ $json.EpicName }}\n", "options": { "systemMessage": "=You are an AI assistant specialized in creating comprehensive Agile retrospective documents. Your task is to analyze the provided information about a completed task and generate an insightful **Lessons Learned** report formatted in **clean Markdown**, optimized for seamless conversion to Google Docs.\n\n---\n\n### 📥 Input Format\nYou will receive structured input containing:\n* `epic_name`: The broader initiative or project category\n* `title`: The specific task or user story name\n* `description`: A concise explanation of what the task involved\n\n---\n\n### 📤 Output Instructions\nGenerate a detailed **Lessons Learned** report using the following **Markdown** structure:\n\n# LESSONS LEARNED REPORT\n\n**Epic:** {epic_name} \n**Date:** {{$today.format('yyyy-MM-dd')}}} \n**Task:** {title} \n**Description:** {description}\n\n## Key Findings\n\n* Clear, specific insight about a technical challenge encountered\n* Process-related discovery that impacted delivery\n* Team dynamics observation or workflow improvement identified\n* {Add more if needed}\n\n## Comments & Observations\n\n{Write 2–3 paragraphs with:}\n\n* Specific examples from task execution\n* Feedback or quotes from team members (if available)\n* Comparisons to prior approaches\n* Unexpected challenges or positive surprises\n\n## Actionable Recommendations\n\n1. Specific, implementable action to address a finding\n2. Concrete suggestion for process improvement\n3. Recommendation for knowledge sharing or team development\n4. {Add more as needed}\n\n## Metrics & Impact\n\n{When possible, include:}\n\n* Time saved or efficiency gained\n* Quality improvements\n* User/customer feedback\n* Cost implications\n\n## Tags\n\n`#lessons-learned` `#{normalized_epic_name}` `#{relevant_technology}` `#{improvement_area}`\n\n---\n\n### 📝 Guidelines\n\n1. **Be specific** – use real details, not vague statements\n2. **Stay relevant** – stick to the task and its broader context\n3. **Focus on learning** – prioritize transferable insights\n4. **Balance** – include both wins and challenges\n5. **Actionability** – make every suggestion doable\n6. **Concise yet clear** – avoid fluff; write for impact\n7. **Formatting Guidelines for Google Docs compatibility:**\n * Use only asterisks (*) for bullet points, never hyphens (-)\n * Add two spaces after each line in lists for proper line breaks\n * Always leave a blank line before and after headings\n * Avoid using underscores (_) in text; use hyphens (-) instead\n * For emphasis, use consistently **bold** for important points and *italics* for supplementary information\n * When mentioning code or technical terms, use `single backticks`, never triple backticks\n * Use a pipe-separated format for tables as shown in the template\n * Keep paragraphs short (3-5 sentences) for better readability\n8. **Metadata Handling:** Include the epic name and task title exactly as provided in the input, without modification\n9. **Date Format:** Use YYYY-MM-DD format for the date for consistent sorting and display\n10. **Tags:** Keep tags lowercase, with hyphens instead of spaces, and relevant to the content\n\n---" }, "promptType": "define" }, "typeVersion": 1.9 }, { "id": "29e37c80-68a4-490a-8952-2dcf974ff8d3", "name": "OpenAI Chat Model", "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", "position": [ 920, 280 ], "parameters": { "model": { "__rl": true, "mode": "list", "value": "gpt-4o-mini" }, "options": {} }, "credentials": { "openAiApi": { "id": "f3KRKVUp9GyRxd6U", "name": "OpenAi account" } }, "typeVersion": 1.2 }, { "id": "da5e365b-cc69-4bdd-bd58-e5b2ecb17387", "name": "Edit Fields", "type": "n8n-nodes-base.set", "position": [ 500, 60 ], "parameters": { "options": {}, "assignments": { "assignments": [ { "id": "84fcaf69-4234-46be-9fa7-15026c60fed4", "name": "EpicName", "type": "string", "value": "={{ $('Jira Get All Issues').item.json.fields.parent.fields.summary }}" }, { "id": "a7890a6b-1d0d-4486-908e-d3db571b89af", "name": "EpicStatus", "type": "string", "value": "={{ $('Jira Get All Issues').item.json.fields.parent.fields.status.statusCategory.name }}" }, { "id": "c2c58d73-17a8-47b5-beb6-8295905cd8c2", "name": "Title", "type": "string", "value": "={{ $('Jira Get All Issues').item.json.fields.summary }}" }, { "id": "baa10a35-ab3e-490f-b9ed-e661a6e9f4aa", "name": "Description", "type": "string", "value": "={{ $('Jira Get All Issues').item.json.fields.description }}" }, { "id": "5da4ae54-07e6-41b8-bd51-054fe56beb5f", "name": "Comment", "type": "string", "value": "={{ $json.body.content[0].content[0].text }}" } ] } }, "typeVersion": 3.4 }, { "id": "9718b066-e28f-41ea-97c2-559cbd894764", "name": "Summarize", "type": "n8n-nodes-base.summarize", "position": [ 720, 60 ], "parameters": { "options": {}, "fieldsToSplitBy": "EpicName, EpicStatus, Title, Description", "fieldsToSummarize": { "values": [ { "field": "Comment", "separateBy": "\n", "aggregation": "concatenate" } ] } }, "typeVersion": 1.1 }, { "id": "1d37efb7-09f1-43a7-a6c0-77d07b1f7a6b", "name": "Google Docs", "type": "n8n-nodes-base.googleDocs", "position": [ 1280, 60 ], "parameters": { "simple": false, "actionsUi": { "actionFields": [ { "text": "={{ $json.output }}", "action": "insert" } ] }, "operation": "update", "documentURL": "14X5gcowEprmL6ORyoo9tIrWWEB1HlhkixXUelesCLXs" }, "credentials": { "googleDocsOAuth2Api": { "id": "Qe3TZG3K1euzTr3n", "name": "Google Docs account" } }, "typeVersion": 2 }, { "id": "bfab4af8-1f26-45b0-952b-1bd5f411d5f4", "name": "Jira Trigger", "type": "n8n-nodes-base.jiraTrigger", "position": [ -380, 180 ], "webhookId": "3eb46690-d7b1-4a69-9a99-8adf8f843ed9", "parameters": { "events": [ "jira:issue_updated" ], "additionalFields": { "filter": "" } }, "credentials": { "jiraSoftwareCloudApi": { "id": "AqnrDWxoCa8luriP", "name": "Jira SW Cloud account" } }, "typeVersion": 1.1 }, { "id": "cc654cf3-c360-4704-a4b7-57447dbec8c6", "name": "If", "type": "n8n-nodes-base.if", "position": [ -200, 180 ], "parameters": { "options": {}, "conditions": { "options": { "version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "a7028dd9-e262-4528-a20f-c80a26a28202", "operator": { "name": "filter.operator.equals", "type": "string", "operation": "equals" }, "leftValue": "={{ $json.changelog.items[0].toString }}", "rightValue": "Done" } ] } }, "typeVersion": 2.2 }, { "id": "b3ccd93e-a412-46f5-858d-ef8a2cd0efa9", "name": "Simple Memory", "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow", "position": [ 1080, 280 ], "parameters": { "sessionKey": "47", "sessionIdType": "customKey" }, "typeVersion": 1.3 }, { "id": "e8379684-93ca-4118-bab5-f52a444c50e1", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [ -420, -120 ], "parameters": { "width": 380, "height": 580, "content": "## Epic Done?\nThis Node is Triggered on any issue change in Jira. However it only triggers the automation when the Epic status is changed to **Done**" }, "typeVersion": 1 }, { "id": "cdddcd3f-f896-4dbf-89e2-09060111cbc6", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [ 20, -120 ], "parameters": { "color": 5, "width": 820, "height": 580, "content": "## Fetch issue Description and Comments\nOnce the Epic is Done, these nodes fetch issues and comments that fall under the Epic. For further processing the output is bundled." }, "typeVersion": 1 }, { "id": "c718a2e8-be7b-47b9-b7cc-9f4549a1060f", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [ 880, -120 ], "parameters": { "color": 3, "width": 540, "height": 580, "content": "## Summarize and send to Google Docs\nThe LLM is summarizing the description / comments and generates a report with a layout defined in the System Message. Finally the output is send to Google Docs." }, "typeVersion": 1 } ], "active": false, "pinData": {}, "settings": { "executionOrder": "v1" }, "versionId": "793ad505-261f-44ae-a197-a7c0e496dd69", "connections": { "If": { "main": [ [ { "node": "Jira Get All Issues", "type": "main", "index": 0 } ] ] }, "AI Agent": { "main": [ [ { "node": "Google Docs", "type": "main", "index": 0 } ] ] }, "Summarize": { "main": [ [ { "node": "AI Agent", "type": "main", "index": 0 } ] ] }, "Edit Fields": { "main": [ [ { "node": "Summarize", "type": "main", "index": 0 } ] ] }, "Jira Trigger": { "main": [ [ { "node": "If", "type": "main", "index": 0 } ] ] }, "Simple Memory": { "ai_memory": [ [ { "node": "AI Agent", "type": "ai_memory", "index": 0 } ] ] }, "OpenAI Chat Model": { "ai_languageModel": [ [ { "node": "AI Agent", "type": "ai_languageModel", "index": 0 } ] ] }, "Jira Get All Issues": { "main": [ [ { "node": "Jira Get All Comments", "type": "main", "index": 0 } ] ] }, "Jira Get All Comments": { "main": [ [ { "node": "Edit Fields", "type": "main", "index": 0 } ] ] } } }