[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7BYFSCK0EXSWBAW6BFNEPA3":3,"skill-same:01M7BYFSCK0EXSWBAW6BFNEPA3":44},{"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":25,"commitSha":26,"skillDirectory":27,"forksCount":14,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":30,"install":31,"resources":43},"01M7BYFSCK0EXSWBAW6BFNEPA3","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.","korallis\u002FK-pi","korallis","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F7937632?v=4","01M7BYCA2A031YRNJVNW3760BJ","Korallis","01M7BYCA2XQW5FFDZDQRGQ2BDR",0,"MIT","https:\u002F\u002Fgithub.com\u002Fkorallis\u002FK-pi\u002Fblob\u002Fmain\u002Fpackages\u002Fcoding-agent\u002Fsrc\u002Fkpi\u002Fkstack\u002Fgenerated\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: \"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.\"\ndisable-model-invocation: true\n---\n\n# Migrate Callers Then Delete Legacy APIs\n\nWhen we decide a new API is the right design, migrate callers and remove the old API in the same refactor wave instead of preserving compatibility layers.\n\n**Rule:**\n- Do not keep legacy API paths alive only because internal callers still exist\n- Inventory callers, migrate them, and delete the old API immediately\n- Treat temporary adapters as exceptional and time-boxed, not default architecture\n- Update tests to assert the new contract, and delete tests that only protect pre-refactor implementation details\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\nKeeping both old and new APIs creates dual-path complexity, slows cleanup, and makes the codebase feel append-only.\n","# Migrate Callers Then Delete Legacy APIs\n\nWhen we decide a new API is the right design, migrate callers and remove the old API in the same refactor wave instead of preserving compatibility layers.\n\n**Rule:**\n- Do not keep legacy API paths alive only because internal callers still exist\n- Inventory callers, migrate them, and delete the old API immediately\n- Treat temporary adapters as exceptional and time-boxed, not default architecture\n- Update tests to assert the new contract, and delete tests that only protect pre-refactor implementation details\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\nKeeping both old and new APIs creates dual-path complexity, slows cleanup, and makes the codebase feel append-only.\n",{"name":5,"description":7,"disable-model-invocation":24},true,"main","c2b3920acd43de24482584c7e70571b082720407","packages\u002Fcoding-agent\u002Fsrc\u002Fkpi\u002Fkstack\u002Fgenerated\u002Fskills\u002Fprinciple-migrate-callers-then-delete-legacy-apis","https:\u002F\u002Fgithub.com\u002Fkorallis\u002FK-pi","https:\u002F\u002Fgithub.com\u002Fkorallis","2026-11-11 19:10:27",{"source":8,"skillName":5,"commands":32,"prompt":42,"zipAvailable":24},[33,36,39],{"tool":34,"command":35},"npx","npx skills add korallis\u002FK-pi --skill principle-migrate-callers-then-delete-legacy-apis",{"tool":37,"command":38},"bunx","bunx skills add korallis\u002FK-pi --skill principle-migrate-callers-then-delete-legacy-apis",{"tool":40,"command":41},"pnpm","pnpm dlx skills add korallis\u002FK-pi --skill principle-migrate-callers-then-delete-legacy-apis","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkorallis\u002FK-pi\u002Fblob\u002Fmain\u002Fpackages\u002Fcoding-agent\u002Fsrc\u002Fkpi\u002Fkstack\u002Fgenerated\u002Fskills\u002Fprinciple-migrate-callers-then-delete-legacy-apis\u002FSKILL.md",[],[45,52,59,66,73,79],{"skillNo":46,"name":47,"nameZh":6,"description":48,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":49,"categories":50,"keywords":51,"publishedAt":19},"01M7BYR99ZGEPDY6FK87N4PGS5","valid-skill","A valid skill for testing purposes.","https:\u002F\u002Fgithub.com\u002Fkorallis\u002FK-pi\u002Fblob\u002Fmain\u002Fpackages\u002Fcoding-agent\u002Ftest\u002Ffixtures\u002Fskills\u002Fvalid-skill\u002FSKILL.md",[],[],{"skillNo":53,"name":54,"nameZh":6,"description":55,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":56,"categories":57,"keywords":58,"publishedAt":19},"01M7BYR85Z82CBHA5EB58T3XYA","unknown-field","A skill with an unknown frontmatter field.","https:\u002F\u002Fgithub.com\u002Fkorallis\u002FK-pi\u002Fblob\u002Fmain\u002Fpackages\u002Fcoding-agent\u002Ftest\u002Ffixtures\u002Fskills\u002Funknown-field\u002FSKILL.md",[],[],{"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":19},"01M7BYR788DFN7CN04F2DGA5DA","nested-child","Nested skill should be ignored.","https:\u002F\u002Fgithub.com\u002Fkorallis\u002FK-pi\u002Fblob\u002Fmain\u002Fpackages\u002Fcoding-agent\u002Ftest\u002Ffixtures\u002Fskills\u002Froot-skill-preferred\u002Fnested-child\u002FSKILL.md",[],[],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":19},"01M7BYR6BYWYNTZ7YV267N0R1M","root-skill-preferred","Root skill should win.","https:\u002F\u002Fgithub.com\u002Fkorallis\u002FK-pi\u002Fblob\u002Fmain\u002Fpackages\u002Fcoding-agent\u002Ftest\u002Ffixtures\u002Fskills\u002Froot-skill-preferred\u002FSKILL.md",[],[],{"skillNo":74,"name":75,"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":76,"categories":77,"keywords":78,"publishedAt":19},"01M7BYR5HW3RWVR3YF59QNDBNR","no-frontmatter","https:\u002F\u002Fgithub.com\u002Fkorallis\u002FK-pi\u002Fblob\u002Fmain\u002Fpackages\u002Fcoding-agent\u002Ftest\u002Ffixtures\u002Fskills\u002Fno-frontmatter\u002FSKILL.md",[],[],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":19},"01M7BYR4JV0YAT0AMG8MRAK1VM","child-skill","A nested skill in a subdirectory.","https:\u002F\u002Fgithub.com\u002Fkorallis\u002FK-pi\u002Fblob\u002Fmain\u002Fpackages\u002Fcoding-agent\u002Ftest\u002Ffixtures\u002Fskills\u002Fnested\u002Fchild-skill\u002FSKILL.md",[],[]]