[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71GMVWHM6JC23KMC89K3712":3,"skill-same:01M71GMVWHM6JC23KMC89K3712":60},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":27,"linkOnly":28,"markdownContent":29,"markdownBody":30,"frontMatter":31,"refName":32,"commitSha":33,"skillDirectory":34,"forksCount":35,"repositoryHtmlUrl":36,"repositoryHomepageUrl":6,"ownerHtmlUrl":37,"ownerBlogUrl":38,"ownerDescription":6,"updatedAt":39,"install":40,"resources":53},"01M71GMVWHM6JC23KMC89K3712","backend-migration-writer",null,"lookatitude\u002Fguild","lookatitude","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F524917?v=4","01M71GJ2KGXFSJZKAZC5P1ZXXM","Miguel Pinto","01M71GJ2MH4SH9WJKP8M7XZZ0P",8,"MIT","https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Fbackend-migration-writer\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[23,24,25,26],"backend","migration","writer","backend migration writer","2026-11-10 10:12:30",false,"---\nname: backend-migration-writer\ndescription: Authors a safe, reversible database migration — up and down files, data-backfill plan, lock-budget analysis, and rollback strategy. Pulled by the `backend` specialist. TRIGGER: \"write the migration for X\", \"generate the up\u002Fdown for X column\", \"add a reversible migration for X\", \"write the backfill for X\", \"how do we safely add this index on a hot table\", \"draft the schema change for X\". DO NOT TRIGGER for: deciding *what* schema to land (use `backend-data-layer` first), external API shape (use `backend-api-contract`), deploying \u002F running the migration in CI (devops-ci-cd-pipeline), infra-level DB provisioning (devops-infrastructure-as-code), application-level data transformations unrelated to schema (not this skill).\nwhen_to_use: The parent `backend` specialist pulls this skill when a schema change needs to land in production safely — specifically: an up\u002Fdown migration with a backfill plan and a rollback. Also fires on explicit user request.\ntype: specialist\n---\n\n# backend-migration-writer\n\nThe evidence is a migration that runs green in staging, rolls back cleanly, and holds locks for less than the app's health-check budget.\n\n## What you do\n\nAuthor the migration as two artifacts — the schema change and the data backfill — plus the rollback path. The migration assumes the app is still serving traffic; it must be expand-then-contract, idempotent, and under the lock budget of the target table.\n\n- Expand \u002F migrate \u002F contract: add new structures in one migration, migrate reads\u002Fwrites in app deploys, drop old structures in a later migration. No big-bang column drops.\n- Make every DDL step idempotent (`IF NOT EXISTS`, `IF EXISTS`) so a retry is safe.\n- Size locks to the table: on hot tables, prefer `CREATE INDEX CONCURRENTLY`, `NOT VALID` constraints validated later, and avoid `ALTER TABLE` rewrites.\n- Write the down migration alongside the up; test it. A non-reversible migration must be called out explicitly with justification.\n- Plan backfills as batched, resumable jobs, not a single transaction. Include a progress-tracking strategy.\n- State the app-deploy ordering: migration before app? after? Between two app deploys?\n\n## Output shape\n\nOne or more migration files under the project's migrations dir, plus a markdown note at `.guild\u002Fruns\u002F\u003Crun-id>\u002Fmigrations\u002F\u003Cslug>.md`:\n\n1. **Summary** — what changes, why, which table(s).\n2. **Up** — the forward DDL \u002F data steps.\n3. **Down** — the reverse, or an explicit \"not reversible because…\".\n4. **Backfill plan** — batched-job spec: batch size, throttle, resume key, expected duration.\n5. **Lock budget** — expected lock type and hold time on hot tables; mitigations used.\n6. **Deploy order** — where in the app-deploy sequence this runs.\n7. **Rollback strategy** — what to do if this fails mid-backfill.\n\n## Anti-patterns\n\n- Non-idempotent migrations — a retried step that errors on second run is a 3am page.\n- No rollback path — \"we'll figure it out\" is not a rollback.\n- Long-running locks on hot tables — `ALTER TABLE … ADD COLUMN … DEFAULT non-null` on a 100M-row table is an outage.\n- Schema-before-app coupling — landing a schema change that the current app code doesn't tolerate. Expand first, then contract.\n- Single-transaction backfills — a 4-hour transaction is a replication-lag catastrophe.\n\n## Handoff\n\nReturn the migration paths and the plan note to the invoking `backend` specialist. The backend agent is responsible for sequencing the migration with the matching app deploy and for handing the CI\u002FCD artifact to `devops-ci-cd-pipeline` if that coordination is needed. This skill does not dispatch.\n","# backend-migration-writer\n\nThe evidence is a migration that runs green in staging, rolls back cleanly, and holds locks for less than the app's health-check budget.\n\n## What you do\n\nAuthor the migration as two artifacts — the schema change and the data backfill — plus the rollback path. The migration assumes the app is still serving traffic; it must be expand-then-contract, idempotent, and under the lock budget of the target table.\n\n- Expand \u002F migrate \u002F contract: add new structures in one migration, migrate reads\u002Fwrites in app deploys, drop old structures in a later migration. No big-bang column drops.\n- Make every DDL step idempotent (`IF NOT EXISTS`, `IF EXISTS`) so a retry is safe.\n- Size locks to the table: on hot tables, prefer `CREATE INDEX CONCURRENTLY`, `NOT VALID` constraints validated later, and avoid `ALTER TABLE` rewrites.\n- Write the down migration alongside the up; test it. A non-reversible migration must be called out explicitly with justification.\n- Plan backfills as batched, resumable jobs, not a single transaction. Include a progress-tracking strategy.\n- State the app-deploy ordering: migration before app? after? Between two app deploys?\n\n## Output shape\n\nOne or more migration files under the project's migrations dir, plus a markdown note at `.guild\u002Fruns\u002F\u003Crun-id>\u002Fmigrations\u002F\u003Cslug>.md`:\n\n1. **Summary** — what changes, why, which table(s).\n2. **Up** — the forward DDL \u002F data steps.\n3. **Down** — the reverse, or an explicit \"not reversible because…\".\n4. **Backfill plan** — batched-job spec: batch size, throttle, resume key, expected duration.\n5. **Lock budget** — expected lock type and hold time on hot tables; mitigations used.\n6. **Deploy order** — where in the app-deploy sequence this runs.\n7. **Rollback strategy** — what to do if this fails mid-backfill.\n\n## Anti-patterns\n\n- Non-idempotent migrations — a retried step that errors on second run is a 3am page.\n- No rollback path — \"we'll figure it out\" is not a rollback.\n- Long-running locks on hot tables — `ALTER TABLE … ADD COLUMN … DEFAULT non-null` on a 100M-row table is an outage.\n- Schema-before-app coupling — landing a schema change that the current app code doesn't tolerate. Expand first, then contract.\n- Single-transaction backfills — a 4-hour transaction is a replication-lag catastrophe.\n\n## Handoff\n\nReturn the migration paths and the plan note to the invoking `backend` specialist. The backend agent is responsible for sequencing the migration with the matching app deploy and for handing the CI\u002FCD artifact to `devops-ci-cd-pipeline` if that coordination is needed. This skill does not dispatch.\n",{},"main","2e58b0360ca51ca3c96ca8e015ef5aba5738803d","skills\u002Fspecialists\u002Fbackend-migration-writer",0,"https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild","https:\u002F\u002Fgithub.com\u002Flookatitude","https:\u002F\u002Flookatitude.com","2026-11-06 03:55:18",{"source":7,"skillName":5,"commands":41,"prompt":51,"zipAvailable":52},[42,45,48],{"tool":43,"command":44},"npx","npx skills add lookatitude\u002Fguild --skill backend-migration-writer",{"tool":46,"command":47},"bunx","bunx skills add lookatitude\u002Fguild --skill backend-migration-writer",{"tool":49,"command":50},"pnpm","pnpm dlx skills add lookatitude\u002Fguild --skill backend-migration-writer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Fbackend-migration-writer\u002FSKILL.md",true,[54],{"path":55,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":58,"sourceHtmlUrl":59},"evals.json","REFERENCE","参考文档",686,"https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Fbackend-migration-writer\u002Fevals.json",[61,72,82,98,116,127],{"skillNo":62,"name":63,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":27},"01M71GQQ1ZAND0XQBS4GTSWYFK","technical-writer-user-manual","https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Ftechnical-writer-user-manual\u002FSKILL.md",[],[25,67,68,69,70,71],"technical","technical writer","technical writer user manual","manual","user",{"skillNo":73,"name":74,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":27},"01M71GQMQ71DQNH4A7REXRVFCB","technical-writer-release-notes","https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Ftechnical-writer-release-notes\u002FSKILL.md",[],[78,25,79,80,81,67,68],"release","notes","technical writer release notes","release notes",{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":93,"publishedAt":27},"01M71GQJQT9G8QHE0A9SN01VE4","technical-writer-api-docs","https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Ftechnical-writer-api-docs\u002FSKILL.md",[87,88],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[94,67,68,95,96,97,25],"technical writer api docs","docs","api docs","api",{"skillNo":99,"name":100,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":109,"publishedAt":27},"01M71GQH3T5F23M2M298WXVAQ5","social-media-platform-post","https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Fsocial-media-platform-post\u002FSKILL.md",[103,106],{"categoryNo":104,"categoryName":105,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000019","营销推广",{"categoryNo":107,"categoryName":108,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000035","市场营销",[110,111,112,113,114,115],"social media platform post","post","Media","platform","social","social media",{"skillNo":117,"name":118,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":123,"publishedAt":27},"01M71GQFS4MJ4S8ZRK7KQNNPJE","social-media-engagement-templates","https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Fsocial-media-engagement-templates\u002FSKILL.md",[121,122],{"categoryNo":104,"categoryName":105,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":107,"categoryName":108,"taxonomyType":91,"taxonomyTypeDesc":92},[114,124,112,125,126,115],"engagement","social media engagement templates","templates",{"skillNo":128,"name":129,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":137,"publishedAt":27},"01M71GQEPZ5GX6NBFQ9H0W5E0C","social-media-content-calendar","https:\u002F\u002Fgithub.com\u002Flookatitude\u002Fguild\u002Fblob\u002Fmain\u002Fskills\u002Fspecialists\u002Fsocial-media-content-calendar\u002FSKILL.md",[132,133,134],{"categoryNo":104,"categoryName":105,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":107,"categoryName":108,"taxonomyType":91,"taxonomyTypeDesc":92},{"categoryNo":135,"categoryName":136,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000036","内容创作者",[138,139,114,115,140,141,112],"calendar","content calendar","social media content calendar","content"]