[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C41FC84EBKT6SN3D76C7PD":3,"skill-same:01M6C41FC84EBKT6SN3D76C7PD":58},{"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":28,"linkOnly":29,"markdownContent":30,"markdownBody":31,"frontMatter":32,"refName":23,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":40,"ownerHtmlUrl":41,"ownerBlogUrl":6,"ownerDescription":42,"updatedAt":43,"install":44,"resources":57},"01M6C41FC84EBKT6SN3D76C7PD","release",null,"Production release lifecycle: SemVer calculation, changelog generation, and release PRs into main.","fderuiter\u002FQRCraftly-web","fderuiter","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F127706008?v=4","01M6C40AWP9EPQBS3EG0RF5DRD","Frederick de Ruiter","01M6C40B116HSW5KCWXDPRX69M",5,"MIT","https:\u002F\u002Fgithub.com\u002Ffderuiter\u002FQRCraftly-web\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Frelease\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27],"semver","changelog","Production","lifecycle","main","generation","calculation","prs","changelog generation","2026-11-10 10:12:30",false,"---\nname: release\ndescription: \"Production release lifecycle: SemVer calculation, changelog generation, and release PRs into main.\"\nlicense: MIT\nmetadata:\n  author: QRCraftly\n  version: \"3.0\"\n---\n\n# Release Skill\n\nUse this skill when preparing, previewing, or executing a release. The full runbook is `RELEASING.md`; the decision record is ADR 0020.\n\n## Non-Negotiable Invariants\n1. **`main` is the only long-lived branch.** Every change, including a release, reaches it through a squash-merged PR that passes `CI` and `PR Title`. Never push to `main` directly.\n2. **Every merge to `main` deploys to production** through Cloudflare Workers Builds. GitHub Actions never deploys.\n3. **Never create tags or edit the `package.json` version by hand.** The release PR bumps the version; the Release workflow creates the tag when it merges.\n4. **Conventional Commits**: PR titles are the squashed commit subjects that decide the SemVer bump (`feat:` -> minor, others -> patch, `!` or `BREAKING CHANGE:` -> major).\n\n## Quick Reference\n\n```bash\ngit checkout main && git pull --ff-only origin main\npnpm run release:dry-run                 # preview version and changelog\npnpm run release:prepare                 # creates release\u002FvX.Y.Z with the bump commit\ngit push -u origin release\u002FvX.Y.Z        # open a PR into main titled chore(release): vX.Y.Z\n```\n\nSquash-merging the release PR starts `.github\u002Fworkflows\u002Frelease.yml`. It verifies GitHub Release status via `gh release view`, extracts notes before tagging, creates the annotated tag `vX.Y.Z` idempotently, publishes the GitHub Release, waits for production to serve `\u002Fversion.json` for the new version, and smoke tests production.\n\n## Agents\n\nAgents may run `release:dry-run` and `release:prepare` and open the release PR. Merging it publishes a release, so get the maintainer's go first.\n\n## Rollback\n\nRoll back the deployment in Cloudflare (dashboard or `wrangler rollback`), then fix forward with a PR. Never revert by pushing to `main`.\n","# Release Skill\n\nUse this skill when preparing, previewing, or executing a release. The full runbook is `RELEASING.md`; the decision record is ADR 0020.\n\n## Non-Negotiable Invariants\n1. **`main` is the only long-lived branch.** Every change, including a release, reaches it through a squash-merged PR that passes `CI` and `PR Title`. Never push to `main` directly.\n2. **Every merge to `main` deploys to production** through Cloudflare Workers Builds. GitHub Actions never deploys.\n3. **Never create tags or edit the `package.json` version by hand.** The release PR bumps the version; the Release workflow creates the tag when it merges.\n4. **Conventional Commits**: PR titles are the squashed commit subjects that decide the SemVer bump (`feat:` -> minor, others -> patch, `!` or `BREAKING CHANGE:` -> major).\n\n## Quick Reference\n\n```bash\ngit checkout main && git pull --ff-only origin main\npnpm run release:dry-run                 # preview version and changelog\npnpm run release:prepare                 # creates release\u002FvX.Y.Z with the bump commit\ngit push -u origin release\u002FvX.Y.Z        # open a PR into main titled chore(release): vX.Y.Z\n```\n\nSquash-merging the release PR starts `.github\u002Fworkflows\u002Frelease.yml`. It verifies GitHub Release status via `gh release view`, extracts notes before tagging, creates the annotated tag `vX.Y.Z` idempotently, publishes the GitHub Release, waits for production to serve `\u002Fversion.json` for the new version, and smoke tests production.\n\n## Agents\n\nAgents may run `release:dry-run` and `release:prepare` and open the release PR. Merging it publishes a release, so get the maintainer's go first.\n\n## Rollback\n\nRoll back the deployment in Cloudflare (dashboard or `wrangler rollback`), then fix forward with a PR. Never revert by pushing to `main`.\n",{"name":5,"license":15,"metadata":33,"description":7},{"author":34,"version":35},"QRCraftly","3.0","5e9ab49e1cb8cac3dbf2019f3f975572fc7282f7",".agents\u002Fskills\u002Frelease",0,"https:\u002F\u002Fgithub.com\u002Ffderuiter\u002FQRCraftly-web","https:\u002F\u002Fqrcraftly.com","https:\u002F\u002Fgithub.com\u002Ffderuiter","Clinical Data Specialist at @Bright-Research \r\n\r\nInterests in Photogrammetry, Data Analytics + Pipelines, Mathematics, and AI\u002FML.\r\n\r\nPython, Rust, TS.","2026-11-11 07:27:14",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add fderuiter\u002FQRCraftly-web --skill release",{"tool":50,"command":51},"bunx","bunx skills add fderuiter\u002FQRCraftly-web --skill release",{"tool":53,"command":54},"pnpm","pnpm dlx skills add fderuiter\u002FQRCraftly-web --skill release","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ffderuiter\u002FQRCraftly-web\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Frelease\u002FSKILL.md",true,[],[59,75,99,142,163,176],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":65,"publishedAt":28},"01M6C40FJCT5X27N59TX7RQZRY","claude-handoff","Hand the current conversation off to a fresh background agent that picks up the work immediately.","https:\u002F\u002Fgithub.com\u002Ffderuiter\u002FQRCraftly-web\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fclaude-handoff\u002FSKILL.md",[],[66,67,68,69,70,71,72,73,74],"claude handoff","handoff","background","hand","fresh","conversation","up","work","matt pocock",{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":79,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":28},"01M6C42TV73ZZ5TY86HHA682KG","steward","How to drive a QRCraftly pull request to merged. Use when opening a PR, handling CI or review events on it, updating its branch, or deciding whether to merge.","AGPL-3.0","https:\u002F\u002Fgithub.com\u002Ffderuiter\u002FQRCraftly-web\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsteward\u002FSKILL.md",[],[77,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98],"when","review","merge","pr","pull request","pull","ci","how","branch","use","opening a pr","drive","how to","events","it","request",{"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":79,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":113,"publishedAt":28},"01M6C42QWPRJ0G7BXDXE3DK50N","run-qrcraftly","Build, run, and drive the QRCraftly web app (Vike + React on Vite). Use when asked to start the dev server or production preview, take a screenshot of a page, click through the generator or QR code checker, download a generated code, confirm a UI change works in the real app, call a src\u002Fpackages function directly, or run unit and Playwright e2e tests in this container.","https:\u002F\u002Fgithub.com\u002Ffderuiter\u002FQRCraftly-web\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Frun-qrcraftly\u002FSKILL.md",[105,110],{"categoryNo":106,"categoryName":107,"taxonomyType":108,"taxonomyTypeDesc":109},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":111,"categoryName":112,"taxonomyType":108,"taxonomyTypeDesc":109},"01JBSEEDCAT000000000000009","前端开发",[114,115,116,117,118,119,120,121,122,123,92,124,125,126,127,128,83,129,130,131,132,133,134,135,136,137,138,139,140,141],"run","run qrcraftly","app","qr code","take a screenshot","checker","generator","unit","click","generated","tests","vite","preview","container","call","page","playwright","web","react","change","e2e tests","packages","code","dev","server","start","e2e","src",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":156,"publishedAt":28},"01M6C42NHXSZNS2E96WP7VQR4K","writing-shape","Writing, exploit: shape raw material into an article, paragraph by paragraph.","https:\u002F\u002Fgithub.com\u002Ffderuiter\u002FQRCraftly-web\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwriting-shape\u002FSKILL.md",[148,151],{"categoryNo":149,"categoryName":150,"taxonomyType":108,"taxonomyTypeDesc":109},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":152,"categoryName":153,"taxonomyType":154,"taxonomyTypeDesc":155},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[157,158,159,74,160,161,162],"shape","writing shape","writing","exploit","article","material",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":171,"publishedAt":28},"01M6C42M1W5P95XKMR7B1HD7F3","writing-fragments","Writing, explore: mine raw fragments, no structure yet.","https:\u002F\u002Fgithub.com\u002Ffderuiter\u002FQRCraftly-web\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwriting-fragments\u002FSKILL.md",[169,170],{"categoryNo":149,"categoryName":150,"taxonomyType":108,"taxonomyTypeDesc":109},{"categoryNo":152,"categoryName":153,"taxonomyType":154,"taxonomyTypeDesc":155},[172,159,173,174,74,175],"writing fragments","mine","structure","explore",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":184,"publishedAt":28},"01M6C42J3DYGGDFFKNV8QFFSS9","writing-for-agents","Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.","https:\u002F\u002Fgithub.com\u002Ffderuiter\u002FQRCraftly-web\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwriting-for-agents\u002FSKILL.md",[182,183],{"categoryNo":149,"categoryName":150,"taxonomyType":108,"taxonomyTypeDesc":109},{"categoryNo":152,"categoryName":153,"taxonomyType":154,"taxonomyTypeDesc":155},[185,186,159,187,83,92,188,74],"for","writing for agents","documents","editing"]