[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71P31CB08KTMK23N8RKA572":3,"skill-same:01M71P31CB08KTMK23N8RKA572":62},{"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":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":6,"ownerHtmlUrl":44,"ownerBlogUrl":45,"ownerDescription":46,"updatedAt":47,"install":48,"resources":61},"01M71P31CB08KTMK23N8RKA572","principle-redesign-from-first-principles",null,"Apply when integrating a new requirement into an existing design, during a planned rewrite or migration, or when a new internal API replaces one that still has callers.","drsh4dow\u002Fpi-setup","drsh4dow","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F45247070?v=4","01M71P068NASGHSWS11VWW416N","Daniel Moretti","01M71P0698BH81N65NP04X9NVN",10,"MIT","https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fprinciple-redesign-from-first-principles\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"first","principles","redesign","principle redesign from first principles","first principles","migration","design","new","Existing","false","when","rewrite","apply","one","api","2026-11-10 10:56:23",false,"---\nname: principle-redesign-from-first-principles\ndescription: \"Apply when integrating a new requirement into an existing design, during a planned rewrite or migration, or when a new internal API replaces one that still has callers.\"\ndisable-model-invocation: false\nuser-invokable: false\n---\n\n# Redesign From First Principles\n\nWhen integrating a change, don't bolt it onto the existing design. Redesign as if the requirement had been a foundational assumption from the start, then converge on that design without keeping the old one alive.\n\n**Design the end state.**\n- Read all affected files and understand the current design.\n- Ask: \"if we were writing this from scratch with this new requirement, what would we build?\"\n- Size the change by the end state, per the [Laziness Protocol](..\u002Fprinciple-laziness-protocol\u002FSKILL.md): the code that remains, not the lines the diff touches.\n\n**Converge on it.** Temporary compatibility code becomes long-lived debt, and old and new paths side by side make the codebase append-only.\n- Propagate the change through every reference: types, docs, examples, rationale sections.\n- When a new internal API replaces an old one, inventory the callers, migrate them, and delete the old API in the same wave. Do not keep a legacy path only because internal callers still exist.\n- Treat a temporary adapter as exceptional and time-boxed, never as default architecture.\n- Update tests to assert the new contract, and delete tests that only protect pre-refactor implementation details.\n- Migrating and deleting in one wave applies when no external users depend on backward compatibility and the project can absorb a coordinated breaking change.\n- Persisted data and published names are the exception. A schema change is the riskiest migration because the data is the one thing you cannot roll back by reverting a deploy. **Additive first, destructive last and alone.** Adds (new nullable column, new table, new index) are safe in any deploy; drops and renames get their own deploy *after* no code references the old shape.\n\n**Deliver it in green units.** Think about the whole redesign, then deliver it incrementally, each unit ending in a passing check per [Sequence Verifiable Units](..\u002Fprinciple-sequence-verifiable-units\u002FSKILL.md). Run the full static and runtime verification when the redesign is complete.\n\nThis is the method for preserving option value when integrating changes into an existing design.\n","# Redesign From First Principles\n\nWhen integrating a change, don't bolt it onto the existing design. Redesign as if the requirement had been a foundational assumption from the start, then converge on that design without keeping the old one alive.\n\n**Design the end state.**\n- Read all affected files and understand the current design.\n- Ask: \"if we were writing this from scratch with this new requirement, what would we build?\"\n- Size the change by the end state, per the [Laziness Protocol](..\u002Fprinciple-laziness-protocol\u002FSKILL.md): the code that remains, not the lines the diff touches.\n\n**Converge on it.** Temporary compatibility code becomes long-lived debt, and old and new paths side by side make the codebase append-only.\n- Propagate the change through every reference: types, docs, examples, rationale sections.\n- When a new internal API replaces an old one, inventory the callers, migrate them, and delete the old API in the same wave. Do not keep a legacy path only because internal callers still exist.\n- Treat a temporary adapter as exceptional and time-boxed, never as default architecture.\n- Update tests to assert the new contract, and delete tests that only protect pre-refactor implementation details.\n- Migrating and deleting in one wave applies when no external users depend on backward compatibility and the project can absorb a coordinated breaking change.\n- Persisted data and published names are the exception. A schema change is the riskiest migration because the data is the one thing you cannot roll back by reverting a deploy. **Additive first, destructive last and alone.** Adds (new nullable column, new table, new index) are safe in any deploy; drops and renames get their own deploy *after* no code references the old shape.\n\n**Deliver it in green units.** Think about the whole redesign, then deliver it incrementally, each unit ending in a passing check per [Sequence Verifiable Units](..\u002Fprinciple-sequence-verifiable-units\u002FSKILL.md). Run the full static and runtime verification when the redesign is complete.\n\nThis is the method for preserving option value when integrating changes into an existing design.\n",{"name":5,"description":7,"user-invokable":35,"disable-model-invocation":35},"main","f7936596c1ba2e1472dadccc3f111b9d517fa96c","agent\u002Fskills\u002Fprinciple-redesign-from-first-principles",2,"https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup","https:\u002F\u002Fgithub.com\u002Fdrsh4dow","https:\u002F\u002Fdanielmoretti.com\u002F","Toss A Coin To Your Witcher :pirate_flag: ","2026-11-03 22:13:53",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add drsh4dow\u002Fpi-setup --skill principle-redesign-from-first-principles",{"tool":54,"command":55},"bunx","bunx skills add drsh4dow\u002Fpi-setup --skill principle-redesign-from-first-principles",{"tool":57,"command":58},"pnpm","pnpm dlx skills add drsh4dow\u002Fpi-setup --skill principle-redesign-from-first-principles","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fprinciple-redesign-from-first-principles\u002FSKILL.md",true,[],[63,85,115,132,153,164],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":34},"01M71P4GPJMBK21BTZBKY9T8EE","changelog","Write the changelog entry for a pull request. Use when a PR changes behavior that users, operators, or integrators can notice.","https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fevals\u002Fharness-lessons\u002Ffixtures\u002Fchangelog-skill\u002FSKILL.md",[],[65,70,71,72,73,74,75,76,77,78,79,80,81,82,29,83,84],"users","pull","notice","changes","operators","pr","pull request","for","request","behavior","entry","write","use","can","changelog entry",{"skillNo":86,"name":87,"nameZh":6,"description":88,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":101,"publishedAt":34},"01M71P4E9AZM56JBY227P2G1SC","writing-good-tickets","Write, file, or update an issue or ticket that an agent or a developer can take to one PR. Use when filing a bug or feature, updating an issue, or breaking a plan into tickets.","https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fwriting-good-tickets\u002FSKILL.md",[91,96],{"categoryNo":92,"categoryName":93,"taxonomyType":94,"taxonomyTypeDesc":95},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":97,"categoryName":98,"taxonomyType":99,"taxonomyTypeDesc":100},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[102,103,104,105,75,106,107,108,82,28,29,109,32,83,110,111,81,112,113,114],"good","writing","tickets","writing good tickets","feature","filing","ticket","file","plan","update","bug","take","issue",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":123,"publishedAt":34},"01M71P4C0B0DXTRRSG9RA6Y687","writing-good-prs","Write or update a pull request title and body that a reviewer can trust and own. Use when opening a PR or editing its description.","https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fwriting-good-prs\u002FSKILL.md",[121,122],{"categoryNo":92,"categoryName":93,"taxonomyType":94,"taxonomyTypeDesc":95},{"categoryNo":97,"categoryName":98,"taxonomyType":99,"taxonomyTypeDesc":100},[102,124,103,125,71,126,75,127,82,28,29,83,128,129,76,78,111,81,130,131],"prs","writing good prs","trust","editing","reviewer","title","opening a pr","body",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":140,"publishedAt":34},"01M71P49D1AG2MR6AYNPMMT34Z","writing-good-commits","Write or reword a git commit message and size the commit it describes. Use when committing, or when reshaping commits during a rebase.","https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fwriting-good-commits\u002FSKILL.md",[138,139],{"categoryNo":92,"categoryName":93,"taxonomyType":94,"taxonomyTypeDesc":95},{"categoryNo":97,"categoryName":98,"taxonomyType":99,"taxonomyTypeDesc":100},[141,102,103,142,143,144,81,145,146,147,82,28,148,149,29,150,151,152],"commits","writing good commits","message","size","git commit message","git","git commit","rebase","commit message","committing","commit","it",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":161,"publishedAt":34},"01M71P480BDE55JMPVVEBCFS7P","writing-for-agents","Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.","https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fwriting-for-agents\u002FSKILL.md",[159,160],{"categoryNo":92,"categoryName":93,"taxonomyType":94,"taxonomyTypeDesc":95},{"categoryNo":97,"categoryName":98,"taxonomyType":99,"taxonomyTypeDesc":100},[162,77,103,127,82,28,163,29],"writing for agents","documents",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":170,"publishedAt":34},"01M71P45SNCD7DDSA6FRVCPA17","wizard","Generate an interactive bash wizard that walks a human through steps only they can perform. Use when provisioning infrastructure, setting up credentials or CI secrets, walking an unfamiliar third-party dashboard, or running a one-off migration or cutover. Don't invoke this for steps the agent can perform itself.","https:\u002F\u002Fgithub.com\u002Fdrsh4dow\u002Fpi-setup\u002Fblob\u002Fmain\u002Fagent\u002Fskills\u002Fwizard\u002FSKILL.md",[],[166,171,172,77,173,174,175,176,82,177,28,29,178,32,179,83,180,181,182,183],"running","setting","up","ci","provisioning infrastructure","only","invoke","Bash","interactive","credentials","dashboard","generate","human"]