[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71NSJBT02VS94F7Y5HHNWFB":3,"skill-same:01M71NSJBT02VS94F7Y5HHNWFB":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":27,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":13,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":56,"install":57,"resources":70},"01M71NSJBT02VS94F7Y5HHNWFB","test-driven-development",null,"Use when implementing features, bug fixes, refactors, or behavior changes before writing production code.","max-kharena\u002Fnous","max-kharena","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F249811097?v=4","01M71NQQ2DRKPEV4AF9J318N31","01M71NQQ303XV5QX5DHCZKM41V",0,"MIT","https:\u002F\u002Fgithub.com\u002Fmax-kharena\u002Fnous\u002Fblob\u002Fmain\u002Fskills\u002Ftest-driven-development\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"development","test driven development","test","driven","fixes","implementing","writing","use","when","code","changes","behavior","quality","features","bug","Production","2026-11-10 10:56:23",false,"---\nname: test-driven-development\ndescription: Use when implementing features, bug fixes, refactors, or behavior changes before writing production code.\nversion: 0.1.0\ntype: quality\nrisk: medium\n---\n\n# Test-Driven Development\n\n## Core Principle\n\nIf you did not watch the test fail, you do not know whether it tests the behavior.\n\n## IRON LAW\n\nNo production behavior change without a failing test first, unless the user explicitly approves an exception.\n\n## Red-Green-Refactor\n\n1. **RED:** Write one minimal test for one observable behavior.\n2. **Verify red:** Run it and confirm it fails for the expected reason.\n3. **GREEN:** Write the smallest production change that passes.\n4. **Verify green:** Run the focused test and relevant surrounding tests.\n5. **REFACTOR:** Clean names, duplication, and structure while keeping tests green.\n\n## Good Test Rules\n\n- Test external behavior, not implementation details.\n- One behavior per test; split tests with “and” in the name.\n- Prefer real code paths over mocks unless isolation is necessary.\n- Regression tests must fail when the fix is removed.\n\n## Allowed Exceptions\n\nAsk before skipping TDD for:\n- Throwaway prototypes.\n- Pure config or docs changes.\n- Generated code.\n- UI-only visual polish where screenshot\u002Fbrowser verification is the stronger evidence.\n\n## Output Contract\n\n```md\n## Behavior Under Test\n## Red Evidence\n## Green Evidence\n## Refactor Notes\n## Exceptions\n```\n","# Test-Driven Development\n\n## Core Principle\n\nIf you did not watch the test fail, you do not know whether it tests the behavior.\n\n## IRON LAW\n\nNo production behavior change without a failing test first, unless the user explicitly approves an exception.\n\n## Red-Green-Refactor\n\n1. **RED:** Write one minimal test for one observable behavior.\n2. **Verify red:** Run it and confirm it fails for the expected reason.\n3. **GREEN:** Write the smallest production change that passes.\n4. **Verify green:** Run the focused test and relevant surrounding tests.\n5. **REFACTOR:** Clean names, duplication, and structure while keeping tests green.\n\n## Good Test Rules\n\n- Test external behavior, not implementation details.\n- One behavior per test; split tests with “and” in the name.\n- Prefer real code paths over mocks unless isolation is necessary.\n- Regression tests must fail when the fix is removed.\n\n## Allowed Exceptions\n\nAsk before skipping TDD for:\n- Throwaway prototypes.\n- Pure config or docs changes.\n- Generated code.\n- UI-only visual polish where screenshot\u002Fbrowser verification is the stronger evidence.\n\n## Output Contract\n\n```md\n## Behavior Under Test\n## Red Evidence\n## Green Evidence\n## Refactor Notes\n## Exceptions\n```\n",{"name":5,"risk":49,"type":40,"version":50,"description":7},"medium","0.1.0","main","05ddbcce9e3471b880e9edc7c63e4bdd40359861","skills\u002Ftest-driven-development","https:\u002F\u002Fgithub.com\u002Fmax-kharena\u002Fnous","https:\u002F\u002Fgithub.com\u002Fmax-kharena","2026-04-28 22:54:20",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add max-kharena\u002Fnous --skill test-driven-development",{"tool":63,"command":64},"bunx","bunx skills add max-kharena\u002Fnous --skill test-driven-development",{"tool":66,"command":67},"pnpm","pnpm dlx skills add max-kharena\u002Fnous --skill test-driven-development","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmax-kharena\u002Fnous\u002Fblob\u002Fmain\u002Fskills\u002Ftest-driven-development\u002FSKILL.md",true,[],[72,97,114,129,152,170],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":81,"publishedAt":44},"01M71NSZ170Z45TAP4CWY74YH3","write-a-skill","Create new agent skills with proper structure, progressive disclosure, and bundled resources. Use when the user wants to create, write, or build a new skill.","https:\u002F\u002Fgithub.com\u002Fmax-kharena\u002Fnous\u002Fblob\u002Fmain\u002Fskills\u002Fwrite-a-skill\u002FSKILL.md",[78],{"categoryNo":79,"categoryName":80,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[82,83,84,85,86,87,88,89,90,91,92,93,94,35,36,95,96],"write a skill","write","a skill","create","structure","build","new skill","with","user","new agent","resources","progressive","new","progressive disclosure","Meta",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":104,"publishedAt":44},"01M71NSX1D1C2MK3NJ42E1GQ47","verification-before-completion","Use when about to claim work is complete, fixed, passing, ready, merged, shippable, reviewed, or verified.","https:\u002F\u002Fgithub.com\u002Fmax-kharena\u002Fnous\u002Fblob\u002Fmain\u002Fskills\u002Fverification-before-completion\u002FSKILL.md",[103],{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},[105,106,35,36,107,108,109,40,110,111,112,113],"verification","verification before completion","verified","claim","complete","about","high","work","ready",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":44},"01M71NSVRTWNA5RYBRRRBQ4830","using-nous","Use when a request needs NOUS command routing or personality-driven planning.","https:\u002F\u002Fgithub.com\u002Fmax-kharena\u002Fnous\u002Fblob\u002Fmain\u002Fskills\u002Fusing-nous\u002FSKILL.md",[],[121,122,31,36,35,123,124,125,126,127,128],"using nous","personality","command routing","request","planning","command","routing","router",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":44},"01M71NST398KW57VNX72Z35MC2","using-git-worktrees","Use when NOUS execution needs isolated implementation branches, phase worktrees, parallel worktrees, or safe branch setup before executing a plan.","https:\u002F\u002Fgithub.com\u002Fmax-kharena\u002Fnous\u002Fblob\u002Fmain\u002Fskills\u002Fusing-git-worktrees\u002FSKILL.md",[],[136,137,138,139,140,141,142,143,144,111,145,146,36,35,147,148,149,150,151],"git","worktrees","git worktrees","using git worktrees","Using git","execution","branch setup","implementation","safe","plan","phase","parallel worktrees","setup","branches","branch","parallel",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":158,"publishedAt":44},"01M71NSRQ1VYJT15323W6HE1X1","ubiquitous-language","Use when the user wants to define domain terms, build a glossary, harden terminology, or extract a DDD-style ubiquitous language. Saves to UBIQUITOUS_LANGUAGE.md.","https:\u002F\u002Fgithub.com\u002Fmax-kharena\u002Fnous\u002Fblob\u002Fmain\u002Fskills\u002Fubiquitous-language\u002FSKILL.md",[],[159,160,161,162,87,163,164,165,35,90,166,167,168,36,169],"language","ubiquitous language","define","ddd","domain","style","terminology","extract","terms","harden","glossary",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":176,"publishedAt":44},"01M71NSPGTE0PY0YJ9HSDWB62B","triage-issue","Use when the user reports a bug and wants it investigated and filed as a durable GitHub issue with a TDD-based fix plan.","https:\u002F\u002Fgithub.com\u002Fmax-kharena\u002Fnous\u002Fblob\u002Fmain\u002Fskills\u002Ftriage-issue\u002FSKILL.md",[],[177,178,179,180,90,181,42,40,182,183,145,89,184,36,35,185,186],"issue","triage issue","triage","github issue","it","tdd","github","reports","fix","as"]