[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71AMCZN3WEJY405Z3HH611G":3,"skill-same:01M71AMCZN3WEJY405Z3HH611G":55},{"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":26,"linkOnly":27,"markdownContent":28,"markdownBody":29,"frontMatter":30,"refName":32,"commitSha":33,"skillDirectory":34,"forksCount":35,"repositoryHtmlUrl":36,"repositoryHomepageUrl":6,"ownerHtmlUrl":37,"ownerBlogUrl":38,"ownerDescription":39,"updatedAt":40,"install":41,"resources":54},"01M71AMCZN3WEJY405Z3HH611G","release",null,"Run pre-release quality checks and cut a tagged GitHub release for mkdocs2confluence.","jeckyl2010\u002Fmkdocs2confluence","jeckyl2010","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F10536856?v=4","01M71AMB9980D4VC6M08Z3WVC1","Anders Hybertz","01M71AMBA1XFEQ87KC22YF5B2V",11,"GPL-3.0","https:\u002F\u002Fgithub.com\u002Fjeckyl2010\u002Fmkdocs2confluence\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Frelease\u002FSKILL.md",[],[5,19,20,21,22,23,24,25],"for","github","run","cut","quality","tagged","github release","2026-11-10 10:12:30",false,"---\nname: release\ndescription: Run pre-release quality checks and cut a tagged GitHub release for mkdocs2confluence.\ntrigger: \u002Frelease\n---\n\n# \u002Frelease\n\nUse this skill when you are ready to cut a release.\n\n## Pre-release checklist\n\nRun all five checks. All must pass before tagging:\n\n```bash\nuv run pytest -q                        # tests\nuv run ruff check src tests             # lint (use --fix to auto-correct import sort)\nuv run mypy src                         # type-check\nuv run vulture src --min-confidence 80  # dead code\nuv run lint-imports                     # architecture boundaries (import-linter)\n```\n\n## Release order\n\n**Never tag before the branch push is confirmed.**\n\n```bash\n# 1. Bump version in pyproject.toml\ngit add pyproject.toml\ngit commit -m \"chore: bump version to vX.Y.Z\"\n\n# 2. Push to main first — confirm it landed\ngit push origin main\n\n# 3. Only then tag and push — this is what triggers the release\ngit tag vX.Y.Z\ngit push origin vX.Y.Z\n```\n\n## Do not create the release by hand\n\nPushing the tag starts `.github\u002Fworkflows\u002Frelease.yml`, which runs the full check\nsuite, builds, creates the GitHub release with `gh release create --generate-notes`,\npublishes to PyPI via OIDC, and attaches SLSA provenance.\n\nRunning `gh release create` yourself will make the workflow's own call fail, because\nthe release already exists. Watch the run instead:\n\n```bash\ngh run watch \"$(gh run list --workflow=release.yml --limit 1 --json databaseId --jq '.[0].databaseId')\"\n```\n\nRelease notes are generated by GitHub from the commits since the previous tag.\n","# \u002Frelease\n\nUse this skill when you are ready to cut a release.\n\n## Pre-release checklist\n\nRun all five checks. All must pass before tagging:\n\n```bash\nuv run pytest -q                        # tests\nuv run ruff check src tests             # lint (use --fix to auto-correct import sort)\nuv run mypy src                         # type-check\nuv run vulture src --min-confidence 80  # dead code\nuv run lint-imports                     # architecture boundaries (import-linter)\n```\n\n## Release order\n\n**Never tag before the branch push is confirmed.**\n\n```bash\n# 1. Bump version in pyproject.toml\ngit add pyproject.toml\ngit commit -m \"chore: bump version to vX.Y.Z\"\n\n# 2. Push to main first — confirm it landed\ngit push origin main\n\n# 3. Only then tag and push — this is what triggers the release\ngit tag vX.Y.Z\ngit push origin vX.Y.Z\n```\n\n## Do not create the release by hand\n\nPushing the tag starts `.github\u002Fworkflows\u002Frelease.yml`, which runs the full check\nsuite, builds, creates the GitHub release with `gh release create --generate-notes`,\npublishes to PyPI via OIDC, and attaches SLSA provenance.\n\nRunning `gh release create` yourself will make the workflow's own call fail, because\nthe release already exists. Watch the run instead:\n\n```bash\ngh run watch \"$(gh run list --workflow=release.yml --limit 1 --json databaseId --jq '.[0].databaseId')\"\n```\n\nRelease notes are generated by GitHub from the commits since the previous tag.\n",{"name":5,"trigger":31,"description":7},"\u002Frelease","main","12f3b074d6c160fc35b0c6e19ea4cea667670ead",".claude\u002Fskills\u002Frelease",0,"https:\u002F\u002Fgithub.com\u002Fjeckyl2010\u002Fmkdocs2confluence","https:\u002F\u002Fgithub.com\u002Fjeckyl2010","www.comtechconsulting.dk","Software Ranger","2026-11-11 04:10:53",{"source":8,"skillName":5,"commands":42,"prompt":52,"zipAvailable":53},[43,46,49],{"tool":44,"command":45},"npx","npx skills add jeckyl2010\u002Fmkdocs2confluence --skill release",{"tool":47,"command":48},"bunx","bunx skills add jeckyl2010\u002Fmkdocs2confluence --skill release",{"tool":50,"command":51},"pnpm","pnpm dlx skills add jeckyl2010\u002Fmkdocs2confluence --skill release","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjeckyl2010\u002Fmkdocs2confluence\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Frelease\u002FSKILL.md",true,[],[56,80,85],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":62,"publishedAt":26},"01M71AMGXM1SAD2KGWNMXJ5E14","mkdocs-changelog","Analyse doc changes since the last CHANGELOG.md update and draft a major-change entry if the changes qualify.","https:\u002F\u002Fgithub.com\u002Fjeckyl2010\u002Fmkdocs2confluence\u002Fblob\u002Fmain\u002Fsrc\u002Fmkdocs_to_confluence\u002Fskills\u002Fmkdocs-changelog\u002FSKILL.md",[],[63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79],"changelog","mkdocs","mkdocs changelog","change","confluence","qualify","true","draft","documentation","last","changes","analyse","update","entry","git","doc","context",{"skillNo":81,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":26},"01M71AMF4WTDZXZP15JFPP43DV","https:\u002F\u002Fgithub.com\u002Fjeckyl2010\u002Fmkdocs2confluence\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Ftooling\u002Fmkdocs-changelog\u002FSKILL.md",[],[65,64,63,67,79,78,77,76,75,74,73,66,72,71,70,69,68],{"skillNo":86,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":26},"01M71AME63W720YNYP6QAZ25E2","https:\u002F\u002Fgithub.com\u002Fjeckyl2010\u002Fmkdocs2confluence\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Frelease\u002FSKILL.md",[],[5]]