[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71BC9MWSY23GPC88HBGK8GK":3,"skill-same:01M71BC9MWSY23GPC88HBGK8GK":60},{"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":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":40,"repositoryHtmlUrl":41,"repositoryHomepageUrl":42,"ownerHtmlUrl":43,"ownerBlogUrl":44,"ownerDescription":6,"updatedAt":45,"install":46,"resources":59},"01M71BC9MWSY23GPC88HBGK8GK","confluence-push-doc",null,"Push a planning artifact to Confluence as a formatted page. Use when the user says 'push to Confluence', 'publish this doc', or 'sync to Confluence'.","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\u002Fpush-doc\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31],"push","confluence push doc","doc","confluence","as","planning","page","use","when","publish","artifact","sync","user","2026-11-10 10:12:30",false,"---\nname: confluence-push-doc\ndescription: \"Push a planning artifact to Confluence as a formatted page. Use when the user says 'push to Confluence', 'publish this doc', or 'sync to Confluence'.\"\n---\n\n# Confluence — Push Document\n\n## Goal\n\nPublish or update a local planning artifact (PRD, architecture doc, backlog, etc.) as a Confluence page with proper formatting and version metadata.\n\n---\n\n## Prerequisite Check\n\nCheck `integrations.confluence` in config. If missing: \"Run `confluence-connect` first.\"\n\n---\n\n## Step 1: Select Document\n\nAsk: \"Which document do you want to push?\"\n\n| # | Document | Path |\n|---|----------|------|\n| 1 | PRD | `{planning_artifacts}\u002Fprd\u002F` |\n| 2 | Architecture | `{planning_artifacts}\u002Farchitecture\u002F` |\n| 3 | Backlog | `{planning_artifacts}\u002Fepics-stories\u002F` |\n| 4 | Product Brief | `{planning_artifacts}\u002Fbriefs\u002F` |\n| 5 | Sprint Plan | `{implementation_artifacts}\u002Fsprints\u002F` |\n| 6 | Other (specify path) | |\n\n---\n\n## Step 2: Check if Page Already Exists\n\n```bash\ncurl -s \\\n  \"{confluence_url}\u002Frest\u002Fapi\u002Fcontent?title={encoded_title}&spaceKey={space_key}\" \\\n  -u \"{email}:{api_token}\" \\\n  -H \"Accept: application\u002Fjson\" | python3 -c \"\nimport sys, json\nresults = json.load(sys.stdin)['results']\nif results:\n    print('EXISTS', results[0]['id'], results[0]['version']['number'])\nelse:\n    print('NEW')\n\"\n```\n\n---\n\n## Step 3: Convert Markdown to Confluence Storage Format\n\nConvert key markdown patterns:\n- `## Heading` → `\u003Ch2>Heading\u003C\u002Fh2>`\n- Markdown tables → `\u003Ctable>` format\n- Code blocks → `\u003Cac:structured-macro ac:name=\"code\">`\n- Mermaid diagrams → render as a code block with note \"Diagram source — render with Mermaid\"\n- `**bold**` → `\u003Cstrong>bold\u003C\u002Fstrong>`\n\nBuild the body as Confluence Storage Format XML.\n\n---\n\n## Step 4: Create or Update Page\n\n**Create new page:**\n```bash\ncurl -s -X POST \\\n  \"{confluence_url}\u002Frest\u002Fapi\u002Fcontent\" \\\n  -u \"{email}:{api_token}\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"type\": \"page\",\n    \"title\": \"{page_title}\",\n    \"space\": { \"key\": \"{space_key}\" },\n    \"ancestors\": [{ \"id\": \"{parent_page_id}\" }],\n    \"body\": {\n      \"storage\": {\n        \"value\": \"{escaped_html_content}\",\n        \"representation\": \"storage\"\n      }\n    }\n  }' | python3 -c \"import sys,json; d=json.load(sys.stdin); print('Created:', d.get('id'), d.get('_links',{}).get('webui',''))\"\n```\n\n**Update existing page** (increment version):\n```bash\ncurl -s -X PUT \\\n  \"{confluence_url}\u002Frest\u002Fapi\u002Fcontent\u002F{page_id}\" \\\n  -u \"{email}:{api_token}\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"version\": { \"number\": {current_version + 1} },\n    \"title\": \"{page_title}\",\n    \"type\": \"page\",\n    \"body\": {\n      \"storage\": {\n        \"value\": \"{escaped_html_content}\",\n        \"representation\": \"storage\"\n      }\n    }\n  }' | python3 -c \"import sys,json; d=json.load(sys.stdin); print('Updated to version:', d['version']['number'])\"\n```\n\n---\n\n## Step 5: Update Local Frontmatter\n\nAdd to the local document's frontmatter:\n```yaml\nconfluence_page_id: \"{page_id}\"\nconfluence_url: \"{confluence_url}\u002Fwiki{webui_path}\"\nconfluence_version: {version_number}\nlast_synced: {date}\n```\n\n---\n\n## Completion\n\n> \"✅ Published to Confluence: [{page_title}]({confluence_page_url})\n> Version: {version}\n>\n> The `prd_version` label is embedded in the page metadata so stories generated from this version can trace back to it.\"\n","# Confluence — Push Document\n\n## Goal\n\nPublish or update a local planning artifact (PRD, architecture doc, backlog, etc.) as a Confluence page with proper formatting and version metadata.\n\n---\n\n## Prerequisite Check\n\nCheck `integrations.confluence` in config. If missing: \"Run `confluence-connect` first.\"\n\n---\n\n## Step 1: Select Document\n\nAsk: \"Which document do you want to push?\"\n\n| # | Document | Path |\n|---|----------|------|\n| 1 | PRD | `{planning_artifacts}\u002Fprd\u002F` |\n| 2 | Architecture | `{planning_artifacts}\u002Farchitecture\u002F` |\n| 3 | Backlog | `{planning_artifacts}\u002Fepics-stories\u002F` |\n| 4 | Product Brief | `{planning_artifacts}\u002Fbriefs\u002F` |\n| 5 | Sprint Plan | `{implementation_artifacts}\u002Fsprints\u002F` |\n| 6 | Other (specify path) | |\n\n---\n\n## Step 2: Check if Page Already Exists\n\n```bash\ncurl -s \\\n  \"{confluence_url}\u002Frest\u002Fapi\u002Fcontent?title={encoded_title}&spaceKey={space_key}\" \\\n  -u \"{email}:{api_token}\" \\\n  -H \"Accept: application\u002Fjson\" | python3 -c \"\nimport sys, json\nresults = json.load(sys.stdin)['results']\nif results:\n    print('EXISTS', results[0]['id'], results[0]['version']['number'])\nelse:\n    print('NEW')\n\"\n```\n\n---\n\n## Step 3: Convert Markdown to Confluence Storage Format\n\nConvert key markdown patterns:\n- `## Heading` → `\u003Ch2>Heading\u003C\u002Fh2>`\n- Markdown tables → `\u003Ctable>` format\n- Code blocks → `\u003Cac:structured-macro ac:name=\"code\">`\n- Mermaid diagrams → render as a code block with note \"Diagram source — render with Mermaid\"\n- `**bold**` → `\u003Cstrong>bold\u003C\u002Fstrong>`\n\nBuild the body as Confluence Storage Format XML.\n\n---\n\n## Step 4: Create or Update Page\n\n**Create new page:**\n```bash\ncurl -s -X POST \\\n  \"{confluence_url}\u002Frest\u002Fapi\u002Fcontent\" \\\n  -u \"{email}:{api_token}\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"type\": \"page\",\n    \"title\": \"{page_title}\",\n    \"space\": { \"key\": \"{space_key}\" },\n    \"ancestors\": [{ \"id\": \"{parent_page_id}\" }],\n    \"body\": {\n      \"storage\": {\n        \"value\": \"{escaped_html_content}\",\n        \"representation\": \"storage\"\n      }\n    }\n  }' | python3 -c \"import sys,json; d=json.load(sys.stdin); print('Created:', d.get('id'), d.get('_links',{}).get('webui',''))\"\n```\n\n**Update existing page** (increment version):\n```bash\ncurl -s -X PUT \\\n  \"{confluence_url}\u002Frest\u002Fapi\u002Fcontent\u002F{page_id}\" \\\n  -u \"{email}:{api_token}\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"version\": { \"number\": {current_version + 1} },\n    \"title\": \"{page_title}\",\n    \"type\": \"page\",\n    \"body\": {\n      \"storage\": {\n        \"value\": \"{escaped_html_content}\",\n        \"representation\": \"storage\"\n      }\n    }\n  }' | python3 -c \"import sys,json; d=json.load(sys.stdin); print('Updated to version:', d['version']['number'])\"\n```\n\n---\n\n## Step 5: Update Local Frontmatter\n\nAdd to the local document's frontmatter:\n```yaml\nconfluence_page_id: \"{page_id}\"\nconfluence_url: \"{confluence_url}\u002Fwiki{webui_path}\"\nconfluence_version: {version_number}\nlast_synced: {date}\n```\n\n---\n\n## Completion\n\n> \"✅ Published to Confluence: [{page_title}]({confluence_page_url})\n> Version: {version}\n>\n> The `prd_version` label is embedded in the page metadata so stories generated from this version can trace back to it.\"\n",{"name":5,"description":7},"master","86f9b15bf32a913d78f2dce364b9fe56e53ddf12","skills\u002Fintegrations\u002Fconfluence\u002Fpush-doc",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":47,"prompt":57,"zipAvailable":58},[48,51,54],{"tool":49,"command":50},"npx","npx skills add superMLdev\u002Fsmart-sdlc --skill confluence-push-doc",{"tool":52,"command":53},"bunx","bunx skills add superMLdev\u002Fsmart-sdlc --skill confluence-push-doc",{"tool":55,"command":56},"pnpm","pnpm dlx skills add superMLdev\u002Fsmart-sdlc --skill confluence-push-doc","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FsuperMLdev\u002Fsmart-sdlc\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fconfluence\u002Fpush-doc\u002FSKILL.md",true,[],[61,76,89,99,119,132],{"skillNo":62,"name":63,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":67,"publishedAt":32},"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",[],[68,69,30,31,70,19,71,72,26,27,73,74,75],"jira sync","jira","bulk","backlog","local","stories","create","tickets",{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":32},"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",[],[83,69,74,84,85,19,86,72,87,26,27,88,31],"Story","create story","jira create story","ticket","single","file",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":32},"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",[],[74,96,69,97,98,31,27,26,24,19,29],"create epic","EPIC","jira create epic",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":110,"publishedAt":32},"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",[105],{"categoryNo":106,"categoryName":107,"taxonomyType":108,"taxonomyTypeDesc":109},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[111,69,112,113,114,26,27,115,116,117,118,31],"jira connect","connect","SET","up","configure","verify","jira integration","integration",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":32},"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",[],[126,69,127,128,129,26,130,131,83],"jira conflict detect","detect","conflict","check","team","implementation",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":32},"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",[],[74,139,140,141,142,143,144,145,146,147,26,27,148,149,150,83,31],"mr","gitlab create mr","create mr","gitlab","ready","branch","for","project","open","review","merge","request"]