[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M714RWCKBX8G956MQAXF01XT":3,"skill-same:01M714RWCKBX8G956MQAXF01XT":66},{"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":40,"commitSha":41,"skillDirectory":42,"forksCount":14,"repositoryHtmlUrl":43,"repositoryHomepageUrl":6,"ownerHtmlUrl":44,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":45,"install":46,"resources":59},"01M714RWCKBX8G956MQAXF01XT","tdd-workflows-tdd-green",null,"Implement the minimal code needed to make failing tests pass in the TDD green phase.","sapsapshen\u002Fai-memory-router","sapsapshen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F20347959?v=4","01M6XDQEF1DP50DKF37H81J3J5","shenmian","01M6XDQEJPE41Y3DT2763X8ZJN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Ftdd-workflows-tdd-green\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"tdd","workflows","tdd workflows tdd green","green","tdd workflows","implement","code","minimal","community","tests","make","unknown","phase","failing","2026","2026-11-10 10:12:30",false,"---\nname: tdd-workflows-tdd-green\ndescription: \"Implement the minimal code needed to make failing tests pass in the TDD green phase.\"\nrisk: unknown\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# Green Phase: Simple function\ndef product_list(request):\n    products = Product.objects.all()\n    return JsonResponse({'products': list(products.values())})\n\n# Refactor: Class-based view\nclass ProductListView(View):\n    def get(self, request):\n        products = Product.objects.all()\n        return JsonResponse({'products': list(products.values())})\n\n# Refactor: Generic view\nclass ProductListView(ListView):\n    model = Product\n    context_object_name = 'products'\n```\n\n### Express Patterns\n\n**Inline → Middleware → Service Layer:**\n```javascript\n\u002F\u002F Green Phase: Inline logic\napp.post('\u002Fapi\u002Fusers', (req, res) => {\n  const user = { id: Date.now(), ...req.body };\n  users.push(user);\n  res.json(user);\n});\n\n\u002F\u002F Refactor: Extract middleware\napp.post('\u002Fapi\u002Fusers', validateUser, (req, res) => {\n  const user = userService.create(req.body);\n  res.json(user);\n});\n\n\u002F\u002F Refactor: Full layering\napp.post('\u002Fapi\u002Fusers',\n  validateUser,\n  asyncHandler(userController.create)\n);\n```\n\n## Use this skill when\n\n- Moving from red to green in a TDD cycle\n- Implementing minimal behavior to satisfy tests\n- You want to keep implementation intentionally simple\n\n## Do not use this skill when\n\n- You are refactoring for design or performance\n- Tests are already passing and you need new requirements\n- You need a full architectural redesign\n\n## Instructions\n\n1. Review failing tests and identify the smallest fix.\n2. Implement the minimal change to pass the next test.\n3. Run tests after each change to confirm progress.\n4. Record shortcuts or debt for the refactor phase.\n\n## Safety\n\n- Avoid bypassing tests to make them pass.\n- Keep changes scoped to the failing behavior only.\n\n## Resources\n\n- `resources\u002Fimplementation-playbook.md` for detailed patterns and examples.\n","# Green Phase: Simple function\ndef product_list(request):\n    products = Product.objects.all()\n    return JsonResponse({'products': list(products.values())})\n\n# Refactor: Class-based view\nclass ProductListView(View):\n    def get(self, request):\n        products = Product.objects.all()\n        return JsonResponse({'products': list(products.values())})\n\n# Refactor: Generic view\nclass ProductListView(ListView):\n    model = Product\n    context_object_name = 'products'\n```\n\n### Express Patterns\n\n**Inline → Middleware → Service Layer:**\n```javascript\n\u002F\u002F Green Phase: Inline logic\napp.post('\u002Fapi\u002Fusers', (req, res) => {\n  const user = { id: Date.now(), ...req.body };\n  users.push(user);\n  res.json(user);\n});\n\n\u002F\u002F Refactor: Extract middleware\napp.post('\u002Fapi\u002Fusers', validateUser, (req, res) => {\n  const user = userService.create(req.body);\n  res.json(user);\n});\n\n\u002F\u002F Refactor: Full layering\napp.post('\u002Fapi\u002Fusers',\n  validateUser,\n  asyncHandler(userController.create)\n);\n```\n\n## Use this skill when\n\n- Moving from red to green in a TDD cycle\n- Implementing minimal behavior to satisfy tests\n- You want to keep implementation intentionally simple\n\n## Do not use this skill when\n\n- You are refactoring for design or performance\n- Tests are already passing and you need new requirements\n- You need a full architectural redesign\n\n## Instructions\n\n1. Review failing tests and identify the smallest fix.\n2. Implement the minimal change to pass the next test.\n3. Run tests after each change to confirm progress.\n4. Record shortcuts or debt for the refactor phase.\n\n## Safety\n\n- Avoid bypassing tests to make them pass.\n- Keep changes scoped to the failing behavior only.\n\n## Resources\n\n- `resources\u002Fimplementation-playbook.md` for detailed patterns and examples.\n",{"name":5,"risk":30,"source":27,"date_added":39,"description":7},"2026-02-27","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fcopilot\u002Ftdd-workflows-tdd-green","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":47,"prompt":57,"zipAvailable":58},[48,51,54],{"tool":49,"command":50},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill tdd-workflows-tdd-green",{"tool":52,"command":53},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill tdd-workflows-tdd-green",{"tool":55,"command":56},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill tdd-workflows-tdd-green","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Ftdd-workflows-tdd-green\u002FSKILL.md",true,[60],{"path":61,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":64,"sourceHtmlUrl":65},"resources\u002Fimplementation-playbook.md","REFERENCE","参考文档",23930,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Ftdd-workflows-tdd-green\u002Fresources\u002Fimplementation-playbook.md",[67,91,117,127,140,159],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":78,"publishedAt":34},"01M71ATQRKG48SH06FQ697T5G9","wechat-search","Search WeChat Official Account articles using OpenClaw's web search and fetch capabilities with compliance-focused design.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fwechat-search-release\u002FSKILL.md",[73],{"categoryNo":74,"categoryName":75,"taxonomyType":76,"taxonomyTypeDesc":77},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[79,80,81,82,83,84,85,86,87,88,89,90],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":97,"publishedAt":34},"01M71ATNAVGZB35PFYM2GC5N00","trend-tap","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend tap', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-tap\u002FSKILL.md",[],[98,99,100,101,102,103,81,104,105,106,107,108,109,110,111,112,113,114,115,116],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","when","brew","live","data","google","install","read","across","api",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":34},"01M71ATJ9AM5KM15AA8PS302EB","trend-radar","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend pulse', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-radar\u002FSKILL.md",[],[124,125,98,109,110,111,112,102,81,114,126,115,116,108,106,105,104,113,103,101],"trend radar","radar","pulse",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":34},"01M71ATGF095N3EJM9G8SD0BB5","tech-news-daily","每日科技新闻汇——从全球多个 RSS 源抓取最新科技新闻，翻译（英→中）、去重、排版成每日简报。当用户询问科技新闻、科技新鲜事、每日科技、技术动态、Daily Tech News 或类似表达时触发此技能。","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftech-news-daily\u002FSKILL.md",[],[134,135,136,137,138,139],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":151,"publishedAt":34},"01M71ATFAEAMQ17M70NQNY7SR8","summarize","Summarize URLs or files with the summarize CLI (web, PDFs, images, audio, YouTube).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsummarize\u002FSKILL.md",[146],{"categoryNo":147,"categoryName":148,"taxonomyType":149,"taxonomyTypeDesc":150},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[142,87,152,153,154,90,109,155,156,157,100,158,113],"Audio","cli","youtube","images","https","files","pdfs",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":34},"01M71ATDNS3R0M4H936PACQAWZ","sonoscli","Control Sonos speakers (discover\u002Fstatus\u002Fplay\u002Fvolume\u002Fgroup).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsonoscli\u002FSKILL.md",[],[161,166,167,168,113,169,156,170,171,172,173,174],"status","play","go","latest","github","discover","control","cmd","volume"]