[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7BH2DR13YP40887XQ454QKS":3,"skill-same:01M7BH2DR13YP40887XQ454QKS":46},{"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":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":30,"updatedAt":31,"install":32,"resources":45},"01M7BH2DR13YP40887XQ454QKS","principle-migrate-callers-then-delete-legacy-apis",null,"Apply when introducing a new internal API while old callers still exist. Migrate callers and delete the old API in the same wave instead of preserving compatibility layers. Use for \u002Fprinciple-migrate-callers-then-delete-legacy-apis.","lovrozagar\u002Fgrunt","lovrozagar","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F86857639?v=4","01M7B3T6X88HRBYP2A9ZEGQEMD","Lovro Zagar","01M7BGVF4JZBK92D0TSM09M44Q",2,"MIT","https:\u002F\u002Fgithub.com\u002Flovrozagar\u002Fgrunt\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fprinciple-migrate-callers-then-delete-legacy-apis\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: principle-migrate-callers-then-delete-legacy-apis\ndescription: >-\n  Apply when introducing a new internal API while old callers still exist.\n  Migrate callers and delete the old API in the same wave instead of preserving\n  compatibility layers. Use for\n  \u002Fprinciple-migrate-callers-then-delete-legacy-apis.\n---\n# Migrate Callers Then Delete Legacy APIs\n\n- Update tests to assert the new contract, and delete tests that only protect pre-refactor implementation details\n\nSlash `\u002Fprinciple-migrate-callers-then-delete-legacy-apis` only. Not a session flag.\n\n**When this applies:**\n- No external users depend on backward compatibility\n- The project can absorb coordinated breaking changes\n- The new API is part of a simplification or refactor initiative\n","# Migrate Callers Then Delete Legacy APIs\n\n- Update tests to assert the new contract, and delete tests that only protect pre-refactor implementation details\n\nSlash `\u002Fprinciple-migrate-callers-then-delete-legacy-apis` only. Not a session flag.\n\n**When this applies:**\n- No external users depend on backward compatibility\n- The project can absorb coordinated breaking changes\n- The new API is part of a simplification or refactor initiative\n",{"name":5,"description":7},"main","91069c1955cc11def04b75dc2d3c4a99c9d5eb48",".claude\u002Fskills\u002Fprinciple-migrate-callers-then-delete-legacy-apis",0,"https:\u002F\u002Fgithub.com\u002Flovrozagar\u002Fgrunt","https:\u002F\u002Fgithub.com\u002Flovrozagar","TypeScript Jedi Master ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ @workerstack ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ OSS & SaaS","2026-11-04 09:19:39",{"source":8,"skillName":5,"commands":33,"prompt":43,"zipAvailable":44},[34,37,40],{"tool":35,"command":36},"npx","npx skills add lovrozagar\u002Fgrunt --skill principle-migrate-callers-then-delete-legacy-apis",{"tool":38,"command":39},"bunx","bunx skills add lovrozagar\u002Fgrunt --skill principle-migrate-callers-then-delete-legacy-apis",{"tool":41,"command":42},"pnpm","pnpm dlx skills add lovrozagar\u002Fgrunt --skill principle-migrate-callers-then-delete-legacy-apis","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flovrozagar\u002Fgrunt\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fprinciple-migrate-callers-then-delete-legacy-apis\u002FSKILL.md",true,[],[47,54,61,68,75,82],{"skillNo":48,"name":49,"nameZh":6,"description":50,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":51,"categories":52,"keywords":53,"publishedAt":19},"01M7BHARD0SQTQ83H73E779A8E","write-roadmap","Write an ordered program of plans under .tmp\u002Fgrunt\u002Froadmaps\u002F. Use for \u002Fwrite-roadmap. Stops for y, which locks and runs it.","https:\u002F\u002Fgithub.com\u002Flovrozagar\u002Fgrunt\u002Fblob\u002Fmain\u002F.rulesync\u002Fskills\u002Fwrite-roadmap\u002FSKILL.md",[],[],{"skillNo":55,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":60,"publishedAt":19},"01M7BHAQ7M9Y790C7DW0RAKAQM","write-plan","Write a local checklist under .tmp\u002Fgrunt\u002Fplans\u002F. Then \u002Fimplement-plan {n}.","https:\u002F\u002Fgithub.com\u002Flovrozagar\u002Fgrunt\u002Fblob\u002Fmain\u002F.rulesync\u002Fskills\u002Fwrite-plan\u002FSKILL.md",[],[],{"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":19},"01M7BHANM3QZF2QP8P28WW9R3K","unslop","Cut AI tells from any writing. Use for \u002Funslop.","https:\u002F\u002Fgithub.com\u002Flovrozagar\u002Fgrunt\u002Fblob\u002Fmain\u002F.rulesync\u002Fskills\u002Funslop\u002FSKILL.md",[],[],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":19},"01M7BHAM1MSNX381EDKA5HN9XM","typescript-best-practices","TypeScript best practices. Use when reading or editing any .ts or .tsx file, or for \u002Ftypescript-best-practices.","https:\u002F\u002Fgithub.com\u002Flovrozagar\u002Fgrunt\u002Fblob\u002Fmain\u002F.rulesync\u002Fskills\u002Ftypescript-best-practices\u002FSKILL.md",[],[],{"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":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":19},"01M7BHAJX7MG58JBGEAR0NCSXW","tmp","Dump a one-off convo artifact under .tmp\u002Fgrunt\u002F.","https:\u002F\u002Fgithub.com\u002Flovrozagar\u002Fgrunt\u002Fblob\u002Fmain\u002F.rulesync\u002Fskills\u002Ftmp\u002FSKILL.md",[],[],{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":19},"01M7BHAGFXSTF5E1DDSYEZF8ZD","teach","Explain a body of work plainly so a person actually understands it. Dig into how it works and why it is that way, then weave that into one clear explanation. Use for \u002Fteach, 'teach me this', 'help me really understand X', 'explain this change or subsystem to me'.","https:\u002F\u002Fgithub.com\u002Flovrozagar\u002Fgrunt\u002Fblob\u002Fmain\u002F.rulesync\u002Fskills\u002Fteach\u002FSKILL.md",[],[]]