Workflow: Jira Retrospective
Integrations: googleDocs, if, jira, jiraTrigger, noOp, set, stickyNote, stopAndError, summarize

{"id": "U1xUqDLvBYYSU6EU", "meta": {"instanceId": "workflow-1f2bf9df", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:55.917218", "updatedAt": "2025-09-29T07:07:55.917239", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "Jira Retrospective", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "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, "notes": "This jira node performs automated tasks as part of the workflow."}, {"id": "4cf0689c-2a1f-4a90-81f4-d3483c63fc96", "name": "Jira Get All Comments", "type": "n8n-nodes-base.jira", "position": [280, 60], "parameters": {"options": {}, "issueKey": "YOUR_CREDENTIAL_HERE", "resource": "issueComment", "operation": "getAll"}, "credentials": {"jiraSoftwareCloudApi": {"id": "AqnrDWxoCa8luriP", "name": "Jira SW Cloud account"}}, "typeVersion": 1, "notes": "This jira node performs automated tasks as part of the workflow."}, {"id": "26803742-1a94-4969-878b-2f757aced4f8", "name": "AI Agent", "type": "n8n-nodes-base.noOp", "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### \ud83d\udce5 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### \ud83d\udce4 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\u20133 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### \ud83d\udcdd Guidelines\n\n1. **Be specific** \u2013 use real details, not vague statements\n2. **Stay relevant** \u2013 stick to the task and its broader context\n3. **Focus on learning** \u2013 prioritize transferable insights\n4. **Balance** \u2013 include both wins and challenges\n5. **Actionability** \u2013 make every suggestion doable\n6. **Concise yet clear** \u2013 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, "notes": "This agent node performs automated tasks as part of the workflow."}, {"id": "29e37c80-68a4-490a-8952-2dcf974ff8d3", "name": "OpenAI Chat Model", "type": "n8n-nodes-base.noOp", "position": [920, 280], "parameters": {"model": {"__rl": true, "mode": "list", "value": "gpt-4o-mini"}, "options": {}}, "credentials": {"openAiApi": {"id": "f3KRKVUp9GyRxd6U", "name": "OpenAi account"}}, "typeVersion": 1.2, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."}, {"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, "notes": "This set node performs automated tasks as part of the workflow."}, {"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, "notes": "This summarize node performs automated tasks as part of the workflow."}, {"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": "{{ $env.BASE_URL }}"}, "credentials": {"googleDocsOAuth2Api": {"id": "Qe3TZG3K1euzTr3n", "name": "Google Docs account"}}, "typeVersion": 2, "notes": "This googleDocs node performs automated tasks as part of the workflow."}, {"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, "notes": "This jiraTrigger node performs automated tasks as part of the workflow."}, {"id": "cc654cf3-c360-4704-a4b7-57447dbec8c6", "name": "If Node", "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, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "b3ccd93e-a412-46f5-858d-ef8a2cd0efa9", "name": "Simple Memory", "type": "n8n-nodes-base.noOp", "position": [1080, 280], "parameters": {"sessionKey": "YOUR_CREDENTIAL_HERE", "sessionIdType": "customKey"}, "typeVersion": 1.3, "notes": "This memoryBufferWindow node performs automated tasks as part of the workflow."}, {"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, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"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, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"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, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "error-c6be5f0d", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [1000, 400], "parameters": {"message": "Workflow execution error", "options": {}}}], "active": false, "pinData": {}, "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "793ad505-261f-44ae-a197-a7c0e496dd69", "connections": {"29e37c80-68a4-490a-8952-2dcf974ff8d3": {"main": [[{"node": "error-handler-29e37c80-68a4-490a-8952-2dcf974ff8d3-d0557e7f", "type": "main", "index": 0}]]}, "1d37efb7-09f1-43a7-a6c0-77d07b1f7a6b": {"main": [[{"node": "error-handler-1d37efb7-09f1-43a7-a6c0-77d07b1f7a6b-8d42dc62", "type": "main", "index": 0}]]}}, "description": "Automated workflow: Jira Retrospective. This workflow integrates 11 different services: stickyNote, agent, summarize, set, stopAndError. It contains 15 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Jira Retrospective. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}