[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71BCC1KX0MX6QCX04Z58J25":3,"skill-same:01M71BCC1KX0MX6QCX04Z58J25":61},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":41,"repositoryHtmlUrl":42,"repositoryHomepageUrl":43,"ownerHtmlUrl":44,"ownerBlogUrl":45,"ownerDescription":6,"updatedAt":46,"install":47,"resources":60},"01M71BCC1KX0MX6QCX04Z58J25","confluence-sync",null,"Push a Smart SDLC document to a Confluence page, creating or updating it. Use when the user says 'sync to Confluence', 'publish to Confluence', or 'update the Confluence page'.","superMLdev\u002Fsmart-sdlc","superMLdev","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F214327565?v=4","01M71B92B8VKCZZ0YCSNAJ9CB1","superML.dev","01M71B92BVCWP4F23ANQ0ZKF6S",8,"MIT","https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fconfluence\u002Fsync\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32],"confluence sync","sync","confluence","push","page","publish to confluence","use","document","when","publish","update","sdlc","it","user","2026-11-10 10:12:30",false,"---\nname: confluence-sync\ndescription: \"Push a Smart SDLC document to a Confluence page, creating or updating it. Use when the user says 'sync to Confluence', 'publish to Confluence', or 'update the Confluence page'.\"\n---\n\n# Confluence — Sync Document\n\n## Goal\n\nPush a Smart SDLC artifact (PRD, architecture doc, sprint plan, etc.) to a Confluence page. Creates the page if it doesn't exist; updates it if it does.\n\n---\n\n## Prerequisite Check\n\nCheck `integrations.confluence` in `_superml\u002Fconfig.yml`. If missing: \"Run `confluence-connect` first.\"\n\n---\n\n## Step 1: Identify the Document\n\nAsk:\n1. Which document are you syncing? (PRD, architecture, sprint plan, retrospective, etc.)\n2. Do you have a target Confluence page URL or page ID? (Optional — will create new if not provided)\n\nLoad the document file.\n\n---\n\n## Step 2: Convert to Confluence Format\n\nConvert Markdown to Confluence Storage Format (XHTML):\n- Headers: `## ` → `\u003Ch2>...\u003C\u002Fh2>`\n- Bold: `**text**` → `\u003Cstrong>text\u003C\u002Fstrong>`\n- Code blocks: ` ```lang ``` ` → `\u003Cac:structured-macro ac:name=\"code\">...`\n- Tables: Markdown table → Confluence table XHTML\n- Checkboxes: `- [x]` → ✅ `- [ ]` → ○\n\n---\n\n## Step 3: Check If Page Exists\n\nIf a page ID was provided:\n```bash\ncurl -u {email}:{api_token} \\\n  \"https:\u002F\u002F{domain}.atlassian.net\u002Fwiki\u002Frest\u002Fapi\u002Fcontent\u002F{page_id}\" \\\n  | jq '.id, .version.number, .title'\n```\n\nIf no page ID, search by title:\n```bash\ncurl -u {email}:{api_token} \\\n  \"https:\u002F\u002F{domain}.atlassian.net\u002Fwiki\u002Frest\u002Fapi\u002Fcontent?title={title}&spaceKey={space}\" \\\n  | jq '.results[0].id, .results[0].version.number'\n```\n\n---\n\n## Step 4A: Create New Page\n\nIf page does not exist:\n```bash\ncurl -X POST -u {email}:{api_token} \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  \"https:\u002F\u002F{domain}.atlassian.net\u002Fwiki\u002Frest\u002Fapi\u002Fcontent\" \\\n  -d '{\n    \"type\": \"page\",\n    \"title\": \"{title}\",\n    \"space\": {\"key\": \"{space_key}\"},\n    \"ancestors\": [{\"id\": \"{parent_page_id}\"}],\n    \"body\": {\"storage\": {\"value\": \"{xhtml_content}\", \"representation\": \"storage\"}}\n  }'\n```\n\n---\n\n## Step 4B: Update Existing Page\n\n```bash\ncurl -X PUT -u {email}:{api_token} \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  \"https:\u002F\u002F{domain}.atlassian.net\u002Fwiki\u002Frest\u002Fapi\u002Fcontent\u002F{page_id}\" \\\n  -d '{\n    \"version\": {\"number\": {next_version}},\n    \"title\": \"{title}\",\n    \"type\": \"page\",\n    \"body\": {\"storage\": {\"value\": \"{xhtml_content}\", \"representation\": \"storage\"}}\n  }'\n```\n\n---\n\n## Step 5: Update Config\n\nLog the sync in `_superml\u002Fconfig.yml`:\n```yaml\nintegrations:\n  confluence:\n    last_sync:\n      document: \"{doc_type}\"\n      page_id: \"{page_id}\"\n      page_url: \"{page_url}\"\n      synced_at: \"{timestamp}\"\n```\n\n---\n\n## Done\n\n> ✅ Synced to Confluence: {page_url}\n","# Confluence — Sync Document\n\n## Goal\n\nPush a Smart SDLC artifact (PRD, architecture doc, sprint plan, etc.) to a Confluence page. Creates the page if it doesn't exist; updates it if it does.\n\n---\n\n## Prerequisite Check\n\nCheck `integrations.confluence` in `_superml\u002Fconfig.yml`. If missing: \"Run `confluence-connect` first.\"\n\n---\n\n## Step 1: Identify the Document\n\nAsk:\n1. Which document are you syncing? (PRD, architecture, sprint plan, retrospective, etc.)\n2. Do you have a target Confluence page URL or page ID? (Optional — will create new if not provided)\n\nLoad the document file.\n\n---\n\n## Step 2: Convert to Confluence Format\n\nConvert Markdown to Confluence Storage Format (XHTML):\n- Headers: `## ` → `\u003Ch2>...\u003C\u002Fh2>`\n- Bold: `**text**` → `\u003Cstrong>text\u003C\u002Fstrong>`\n- Code blocks: ` ```lang ``` ` → `\u003Cac:structured-macro ac:name=\"code\">...`\n- Tables: Markdown table → Confluence table XHTML\n- Checkboxes: `- [x]` → ✅ `- [ ]` → ○\n\n---\n\n## Step 3: Check If Page Exists\n\nIf a page ID was provided:\n```bash\ncurl -u {email}:{api_token} \\\n  \"https:\u002F\u002F{domain}.atlassian.net\u002Fwiki\u002Frest\u002Fapi\u002Fcontent\u002F{page_id}\" \\\n  | jq '.id, .version.number, .title'\n```\n\nIf no page ID, search by title:\n```bash\ncurl -u {email}:{api_token} \\\n  \"https:\u002F\u002F{domain}.atlassian.net\u002Fwiki\u002Frest\u002Fapi\u002Fcontent?title={title}&spaceKey={space}\" \\\n  | jq '.results[0].id, .results[0].version.number'\n```\n\n---\n\n## Step 4A: Create New Page\n\nIf page does not exist:\n```bash\ncurl -X POST -u {email}:{api_token} \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  \"https:\u002F\u002F{domain}.atlassian.net\u002Fwiki\u002Frest\u002Fapi\u002Fcontent\" \\\n  -d '{\n    \"type\": \"page\",\n    \"title\": \"{title}\",\n    \"space\": {\"key\": \"{space_key}\"},\n    \"ancestors\": [{\"id\": \"{parent_page_id}\"}],\n    \"body\": {\"storage\": {\"value\": \"{xhtml_content}\", \"representation\": \"storage\"}}\n  }'\n```\n\n---\n\n## Step 4B: Update Existing Page\n\n```bash\ncurl -X PUT -u {email}:{api_token} \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  \"https:\u002F\u002F{domain}.atlassian.net\u002Fwiki\u002Frest\u002Fapi\u002Fcontent\u002F{page_id}\" \\\n  -d '{\n    \"version\": {\"number\": {next_version}},\n    \"title\": \"{title}\",\n    \"type\": \"page\",\n    \"body\": {\"storage\": {\"value\": \"{xhtml_content}\", \"representation\": \"storage\"}}\n  }'\n```\n\n---\n\n## Step 5: Update Config\n\nLog the sync in `_superml\u002Fconfig.yml`:\n```yaml\nintegrations:\n  confluence:\n    last_sync:\n      document: \"{doc_type}\"\n      page_id: \"{page_id}\"\n      page_url: \"{page_url}\"\n      synced_at: \"{timestamp}\"\n```\n\n---\n\n## Done\n\n> ✅ Synced to Confluence: {page_url}\n",{"name":5,"description":7},"master","86f9b15bf32a913d78f2dce364b9fe56e53ddf12","skills\u002Fintegrations\u002Fconfluence\u002Fsync",1,"https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc","https:\u002F\u002Fsupermldev.github.io\u002Fsmart-sdlc\u002F","https:\u002F\u002Fgithub.com\u002FsuperMLdev","https:\u002F\u002Fsuperml.dev","2026-05-12 11:55:28",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add superMLdev\u002Fsmart-sdlc --skill confluence-sync",{"tool":53,"command":54},"bunx","bunx skills add superMLdev\u002Fsmart-sdlc --skill confluence-sync",{"tool":56,"command":57},"pnpm","pnpm dlx skills add superMLdev\u002Fsmart-sdlc --skill confluence-sync","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fconfluence\u002Fsync\u002FSKILL.md",true,[],[62,77,90,102,122,135],{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":68,"publishedAt":33},"01M71BD2HCRX8SP34Y37NZGVX2","jira-sync","Bulk sync all epics and stories from the local backlog to JIRA. Use when the user says 'sync to JIRA', 'push everything to JIRA', or 'create all JIRA tickets'.","https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fjira\u002Fsync\u002FSKILL.md",[],[69,70,20,32,71,22,72,73,25,27,74,75,76],"jira sync","jira","bulk","backlog","local","stories","create","tickets",{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":33},"01M71BD0C5A3A3J7WF4YCGJJPY","jira-create-story","Create a single story ticket in JIRA from a local story file. Use when the user says 'create this story in JIRA' or 'push story to JIRA'.","https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fjira\u002Fcreate-story\u002FSKILL.md",[],[84,70,75,85,86,22,87,73,88,25,27,89,32],"Story","create story","jira create story","ticket","single","file",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":33},"01M71BCYVDM32DNS0XJAKTHRZ1","jira-create-epic","Create an epic in JIRA from a planning artifact. Use when the user says 'create this epic in JIRA' or 'push epic to JIRA'.","https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fjira\u002Fcreate-epic\u002FSKILL.md",[],[75,97,70,98,99,32,27,25,100,22,101],"create epic","EPIC","jira create epic","planning","artifact",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":113,"publishedAt":33},"01M71BCWGYW8T1TD07JJ1G12G9","jira-connect","Set up and verify JIRA integration. Use when the user says 'connect to JIRA', 'set up JIRA', or 'configure JIRA'.","https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fjira\u002Fconnect\u002FSKILL.md",[108],{"categoryNo":109,"categoryName":110,"taxonomyType":111,"taxonomyTypeDesc":112},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[114,70,115,116,117,25,27,118,119,120,121,32],"jira connect","connect","SET","up","configure","verify","jira integration","integration",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":33},"01M71BCTZ1EW31JHP6AMBHEM9G","jira-conflict-detect","Check if a story is already being worked on by another team member. Use before starting any story implementation.","https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fjira\u002Fconflict-detect\u002FSKILL.md",[],[129,70,130,131,132,25,133,134,84],"jira conflict detect","detect","conflict","check","team","implementation",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":33},"01M71BCRX4ZHQ60DXGRAEECHB9","gitlab-create-mr","Create a GitLab Merge Request for the current story branch. Use when the user says 'create an MR', 'open a merge request', or 'ready for review' in a GitLab project.","https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fgitlab\u002Fcreate-mr\u002FSKILL.md",[],[75,142,143,144,145,146,147,148,149,150,25,27,151,152,153,84,32],"mr","gitlab create mr","create mr","gitlab","ready","branch","for","project","open","review","merge","request"]