[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F1RT52TJ55EDH2DAFCV2F4":3,"skill-same:01M6F1RT52TJ55EDH2DAFCV2F4":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":18,"publishedAt":28,"linkOnly":29,"markdownContent":30,"markdownBody":31,"frontMatter":32,"refName":34,"commitSha":35,"skillDirectory":36,"forksCount":37,"repositoryHtmlUrl":38,"repositoryHomepageUrl":39,"ownerHtmlUrl":40,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":41,"install":42,"resources":55},"01M6F1RT52TJ55EDH2DAFCV2F4","github.get_pr_to_pass_local_tests",null,"Make the local unit tests pass for the current PR","causify-ai\u002Fhelpers","causify-ai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F121828442?v=4","01M6BZFTHW2MQR7FWK8CDW0DRA","Causify.AI","01M6F1K6CCKKF8YKTBN4ZV509G",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fgithub.get_pr_to_pass_local_tests\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27],"github","pr","github get pr to pass local tests","local","get","tests","unit tests","unit","make","2026-11-10 10:12:30",false,"---\ndescription: Make the local unit tests pass for the current PR\nmodel: sonnet\n---\n\n# Goal\n- Run, monitor, and fix the local unit tests for the current PR\n\n# Workflow\n\n## Create and Update a Plan\n- Create a file `plan-github.get_pr_to_pass_local_tests.md` with a plan in the form\n  of a bullet list of actions and maintain it updated, by marking each action\n  - [.] when something is in progress\n  - [x] when something is done\n  - [F] when something failed\n\n## Get the PR Number and Branch Name\n- Get the PR number\n  ```bash\n  > GH_PR_NUM=$(gh pr view --json number -q .number)\n  ```\n\n- Get the branch name\n  ```bash\n  > BRANCH_NAME=$(git branch --show-current)\n  ```\n\n## Run Local Regressions\n- Run full test suite locally:\n  ```bash\n  > pytest_multi_build.py --target . 2>&1 --timeout -1 | tee tmp.auto_task.pytest_multi_build.log\n  ```\n- Wait for the script to terminate\n\n## Check Regressions to Complete\n\n- Check the output of the local regressions with:\n  ```bash\n  > pytest_failed_multi_build.py 2>&1 | tee tmp.auto_task.pytest_failed_multi_build.log\n  ```\n\n## Report Status on the PR\n- If local regressions are passing:\n  ```bash\n  > gh pr comment $GH_PR_NUM --body \"Local tests passing\"\n  ```\n- If any failures, document error and post:\n  ```bash\n  > gh pr comment $GH_PR_NUM --body \"Local test failures found: [error summary]. Investigating...\"\n  ```\n\n## Fix the Failures\n- If failures were found, run `tmp.pytest_failed_multi_build.repro.sh` to understand\n  what failed and use `\u002Fpytest.fix_local_tests` to analyze and fix them\n  - If the fix is simple, just fix it and commit\n  - If the fix is not clear, stop and ask for the user to help\n\n## Never Commit Junk Files\n- Never run `git add -A` or `git add .` to stage a fix: it sweeps in every\n  untracked file sitting in the working tree (logs, `tmp.*` scratch files,\n  test-run artifacts like `.pkl`\u002F`.json` caches, etc.), not just the files you\n  intended to fix\n- Always stage files explicitly by path, e.g. `git add \u003Cfile1> \u003Cfile2>`\n- Before committing, run `git status --short` and review every listed file;\n  drop anything that is not part of the intended fix\n- If junk files were already committed and pushed, fix it by amending the\n  commit to contain only the intended files and force-pushing\n  (`git push --force-with-lease`), rather than leaving the junk in history\n\n## Loop\n- Keep repeating until the PR is passing all the local tests\n\n# Constraints\n- This skill runs both when executed locally on a dev computer and remotely on cloud\n  (e.g., on GitHub or Anthropic infrastructure)\n\n# Verification\n\n- [ ] `pytest_failed_multi_build.py` reports no failing tests\n- [ ] A PR comment reports the final local test status\n- [ ] `git status --short` shows only the intended files staged before commit\n","# Goal\n- Run, monitor, and fix the local unit tests for the current PR\n\n# Workflow\n\n## Create and Update a Plan\n- Create a file `plan-github.get_pr_to_pass_local_tests.md` with a plan in the form\n  of a bullet list of actions and maintain it updated, by marking each action\n  - [.] when something is in progress\n  - [x] when something is done\n  - [F] when something failed\n\n## Get the PR Number and Branch Name\n- Get the PR number\n  ```bash\n  > GH_PR_NUM=$(gh pr view --json number -q .number)\n  ```\n\n- Get the branch name\n  ```bash\n  > BRANCH_NAME=$(git branch --show-current)\n  ```\n\n## Run Local Regressions\n- Run full test suite locally:\n  ```bash\n  > pytest_multi_build.py --target . 2>&1 --timeout -1 | tee tmp.auto_task.pytest_multi_build.log\n  ```\n- Wait for the script to terminate\n\n## Check Regressions to Complete\n\n- Check the output of the local regressions with:\n  ```bash\n  > pytest_failed_multi_build.py 2>&1 | tee tmp.auto_task.pytest_failed_multi_build.log\n  ```\n\n## Report Status on the PR\n- If local regressions are passing:\n  ```bash\n  > gh pr comment $GH_PR_NUM --body \"Local tests passing\"\n  ```\n- If any failures, document error and post:\n  ```bash\n  > gh pr comment $GH_PR_NUM --body \"Local test failures found: [error summary]. Investigating...\"\n  ```\n\n## Fix the Failures\n- If failures were found, run `tmp.pytest_failed_multi_build.repro.sh` to understand\n  what failed and use `\u002Fpytest.fix_local_tests` to analyze and fix them\n  - If the fix is simple, just fix it and commit\n  - If the fix is not clear, stop and ask for the user to help\n\n## Never Commit Junk Files\n- Never run `git add -A` or `git add .` to stage a fix: it sweeps in every\n  untracked file sitting in the working tree (logs, `tmp.*` scratch files,\n  test-run artifacts like `.pkl`\u002F`.json` caches, etc.), not just the files you\n  intended to fix\n- Always stage files explicitly by path, e.g. `git add \u003Cfile1> \u003Cfile2>`\n- Before committing, run `git status --short` and review every listed file;\n  drop anything that is not part of the intended fix\n- If junk files were already committed and pushed, fix it by amending the\n  commit to contain only the intended files and force-pushing\n  (`git push --force-with-lease`), rather than leaving the junk in history\n\n## Loop\n- Keep repeating until the PR is passing all the local tests\n\n# Constraints\n- This skill runs both when executed locally on a dev computer and remotely on cloud\n  (e.g., on GitHub or Anthropic infrastructure)\n\n# Verification\n\n- [ ] `pytest_failed_multi_build.py` reports no failing tests\n- [ ] A PR comment reports the final local test status\n- [ ] `git status --short` shows only the intended files staged before commit\n",{"model":33,"description":7},"sonnet","master","804ae3e928c04740cec553be0eb28c8d06ff420e",".claude\u002Fskills\u002Fgithub.get_pr_to_pass_local_tests",1,"https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers","https:\u002F\u002Fcausify-ai.github.io\u002Fhelpers\u002F","https:\u002F\u002Fgithub.com\u002Fcausify-ai","2026-11-02 21:54:29",{"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 github.get_pr_to_pass_local_tests",{"tool":48,"command":49},"bunx","bunx skills add causify-ai\u002Fhelpers --skill github.get_pr_to_pass_local_tests",{"tool":51,"command":52},"pnpm","pnpm dlx skills add causify-ai\u002Fhelpers --skill github.get_pr_to_pass_local_tests","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fgithub.get_pr_to_pass_local_tests\u002FSKILL.md",true,[],[57,79,97,109,118,132],{"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":68,"publishedAt":28},"01M6F209RASRBEK7GBNG5M00K0","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":66,"taxonomyTypeDesc":67},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[69,70,71,72,73,74,75,76,77,78],"docker","tutorial","tutorial in 60 mins propagate docker changes","propagate","template","sync","haiku","files","project","match",{"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":88,"publishedAt":28},"01M6F207XZ5YDAJ0KNDRE6EN0R","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",[85],{"categoryNo":86,"categoryName":87,"taxonomyType":66,"taxonomyTypeDesc":67},"01JBSEEDCAT000000000000002","文档处理",[89,90,70,91,92,93,75,94,95,96],"markdown","merge","tutorial in 60 mins merge markdown","notebook","jupyter","file","jupyter notebook","content",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":28},"01M6F2059X95Q1A13HD67E9JRF","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",[],[104,70,105,106,107,75,108],"tutorial in 60 mins format","format","directory","learn","conventions",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":28},"01M6F202MDHMNYD5S1YHG2PKZD","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",[],[116,70,117,107,106,108],"tutorial in 60 mins create","create",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":28},"01M6F2004BW13GQ59N3RGSAYVN","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",[],[125,126,127,128,129,130,131],"progress","todo","todo reorg in progress","tasks","queue","task","stage",{"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":138,"publishedAt":28},"01M6F1ZXN0G6HBD08GT8HE5FYA","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",[],[139,126,129,130,131],"todo reorg headers"]