[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BZR6C5GFEPWHTTMXJ1KVAD":3,"skill-same:01M6BZR6C5GFEPWHTTMXJ1KVAD":56},{"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":23,"publishedAt":29,"linkOnly":30,"markdownContent":31,"markdownBody":32,"frontMatter":33,"refName":34,"commitSha":35,"skillDirectory":36,"forksCount":37,"repositoryHtmlUrl":38,"repositoryHomepageUrl":39,"ownerHtmlUrl":40,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":41,"install":42,"resources":55},"01M6BZR6C5GFEPWHTTMXJ1KVAD","testing.fix_unit_tests",null,"Apply the conventions usually not followed in the unit test","causify-ai\u002Fhelpers","causify-ai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F121828442?v=4","01M6BZFTHW2MQR7FWK8CDW0DRA","Causify.AI","01M6BZFTPJ193AB5N089Z82HQG",155,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftesting.fix_unit_tests\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[24,25,26,27,28],"testing","unit tests","testing fix unit tests","test","haiku","2026-11-10 10:12:30",false,"---\ndescription: Apply the conventions usually not followed in the unit test\nmodel: haiku\n---\n\n# Goal\n- The user passes one or more test files `\u003CFILE>` and you need to apply the\n  corresponding conventions and rules.\n\n# Workflow\n\n## Read Rules\n- Read the transformations from `.claude\u002Fskills\u002Ftesting.rules.md` in the\n  following headers\n  - `### Dedent Strings to the Code`\n  - `## Test Method Names`\n  - `## Use Helper Methods When You Have Repetitive Tests`\n  - `### Avoid Replicated Assignment`\n  - `## Consolidate Inputs and Outputs`\n  - `## Assign Variables and Then Call Functions`\n  - `## Compare Whole Output with assert_equal, Not Piecewise`\n  - ``## Do Not Use `hdbg.dassert` to Test Assertions``\n\n## Draft a Plan\n- Given the code passed in `\u003CFILE>` and the list of all the transformations\n  create a list of transformations and code lines to apply them, since the\n  code violates them\n\n## Implement the Plan\n- Apply the transformations one at the time to the parts of the code\n\n## Refactor the Code\n- Run the skill `\u002Fcoding.factor_common_code` on the file `\u003CFILE>` to factor out\n  common code\n\n# Important\n- Make sure that there is no change in behavior in the code\n- For all the code you must follow the instructions in:\n  - `.claude\u002Fskills\u002Fcoding.rules.md`\n  - `.claude\u002Fskills\u002Ftesting.rules.md`\n\n# Verification\n- [ ] Check that no remaining part of the code violates the list of\n  transformations\n- [ ] Run the tests and confirm behavior is unchanged\n","# Goal\n- The user passes one or more test files `\u003CFILE>` and you need to apply the\n  corresponding conventions and rules.\n\n# Workflow\n\n## Read Rules\n- Read the transformations from `.claude\u002Fskills\u002Ftesting.rules.md` in the\n  following headers\n  - `### Dedent Strings to the Code`\n  - `## Test Method Names`\n  - `## Use Helper Methods When You Have Repetitive Tests`\n  - `### Avoid Replicated Assignment`\n  - `## Consolidate Inputs and Outputs`\n  - `## Assign Variables and Then Call Functions`\n  - `## Compare Whole Output with assert_equal, Not Piecewise`\n  - ``## Do Not Use `hdbg.dassert` to Test Assertions``\n\n## Draft a Plan\n- Given the code passed in `\u003CFILE>` and the list of all the transformations\n  create a list of transformations and code lines to apply them, since the\n  code violates them\n\n## Implement the Plan\n- Apply the transformations one at the time to the parts of the code\n\n## Refactor the Code\n- Run the skill `\u002Fcoding.factor_common_code` on the file `\u003CFILE>` to factor out\n  common code\n\n# Important\n- Make sure that there is no change in behavior in the code\n- For all the code you must follow the instructions in:\n  - `.claude\u002Fskills\u002Fcoding.rules.md`\n  - `.claude\u002Fskills\u002Ftesting.rules.md`\n\n# Verification\n- [ ] Check that no remaining part of the code violates the list of\n  transformations\n- [ ] Run the tests and confirm behavior is unchanged\n",{"model":28,"description":7},"master","39143a859859181eff7e774457997b5278fd9e99",".claude\u002Fskills\u002Ftesting.fix_unit_tests",170,"https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers","https:\u002F\u002Fcausify.ai","https:\u002F\u002Fgithub.com\u002Fcausify-ai","2026-11-02 02:09:15",{"source":8,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add causify-ai\u002Fhelpers --skill testing.fix_unit_tests",{"tool":48,"command":49},"bunx","bunx skills add causify-ai\u002Fhelpers --skill testing.fix_unit_tests",{"tool":51,"command":52},"pnpm","pnpm dlx skills add causify-ai\u002Fhelpers --skill testing.fix_unit_tests","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftesting.fix_unit_tests\u002FSKILL.md",true,[],[57,73,90,101,110,119],{"skillNo":58,"name":59,"nameZh":6,"description":60,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":61,"categories":62,"keywords":66,"publishedAt":29},"01M6C9ZMM0XSXCHHABMJ9XB1JB","tutorial_in_60_mins.propagate_docker_changes","Sync tutorial and class-project Docker files to match project_template","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.propagate_docker_changes\u002FSKILL.md",[63],{"categoryNo":64,"categoryName":65,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",[67,68,69,70,28,71,72],"tutorial in 60 mins propagate docker changes","tutorial","docker","files","template","sync",{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":82,"publishedAt":29},"01M6C9ZJK8QJ9FNCY39WVF3GMG","tutorial_in_60_mins.merge_markdown","Merge the content of a markdown file into a Jupyter notebook","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.merge_markdown\u002FSKILL.md",[79],{"categoryNo":80,"categoryName":81,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",[83,84,68,85,86,28,87,88,89],"merge","tutorial in 60 mins merge markdown","markdown","jupyter","file","content","jupyter notebook",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":29},"01M6C9ZFYK13ZCT1E8BEEC4NG4","tutorial_in_60_mins.format","Format a directory to follow the \"Learn X in 60 Minutes\" tutorial conventions","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.format\u002FSKILL.md",[],[97,68,98,99,100,28],"tutorial in 60 mins format","format","directory","learn",{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":107,"publishedAt":29},"01M6C9ZDKXSBKNKX7M3X4W38G5","tutorial_in_60_mins.create","Create a tutorial directory for the Learn X in 60 Minutes conventions","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.create\u002FSKILL.md",[],[108,68,109,99,100],"tutorial in 60 mins create","create",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":29},"01M6BZS5Z0QE03WRS1TM3XJEY9","todo.reorg_in_progress","Reorganize ai_task_queue.md so in-progress tasks, not-started tasks, and mislabeled topic headers sit under the right H1 stage","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftodo.reorg_in_progress\u002FSKILL.md",[],[117,118],"todo reorg in progress","tasks",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":29},"01M6BZS4CQZ6KK2KQ26SVB7QCS","todo.reorg_headers","Reorganize ai_task_queue.md .md so every H2 topic matches ALL TOPICS and every H3 task sits under the right topic, keeping its H1 stage","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftodo.reorg_headers\u002FSKILL.md",[],[126],"todo reorg headers"]