[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F1RKCGRABJ3EQ6MPAM6MNJ":3,"skill-same:01M6F1RKCGRABJ3EQ6MPAM6MNJ":55},{"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":27,"linkOnly":28,"markdownContent":29,"markdownBody":30,"frontMatter":31,"refName":33,"commitSha":34,"skillDirectory":35,"forksCount":36,"repositoryHtmlUrl":37,"repositoryHomepageUrl":38,"ownerHtmlUrl":39,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":40,"install":41,"resources":54},"01M6F1RKCGRABJ3EQ6MPAM6MNJ","github.get_pr_ready_to_merge",null,"Get the current PR to a state where it can be reviewed and merged","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_ready_to_merge\u002FSKILL.md",[],[19,20,21,22,23,24,25,26],"github","merge","pr","github get pr ready to merge","ready","get","state","it","2026-11-10 10:12:30",false,"---\ndescription: Get the current PR to a state where it can be reviewed and merged\nmodel: sonnet\n---\n\n# Goal\n\n- Run the AI lint, the standard linter, the local tests, and GitHub CI for the\n  current PR, fixing anything that comes up, so the PR is ready to be reviewed and\n  merged\n\n# Workflow\n\n## Create and Update a Plan\n\n- Create a file `plan-github.get_pr_ready_to_merge.md` with a plan in the form of a\n  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- E.g.,\n  ```\n  # Plan: get PR #... ready to merge\n\n  - [ ] Get PR number and branch name\n  - [ ] Make sure PR is ready (not draft)\n  - [ ] Run AI lint with --add_todos, commit TODOs\n  - [ ] Resolve added TODO(ai_gp) items\n  - [ ] Run standard linter, fix issues\n  - [ ] Make Sure The Affected Local Tests Pass\n  - [ ] Make local tests pass\n  - [ ] Run and monitor GitHub CI\n  - [ ] Report status on PR\n  - [ ] Fix any CI failures\n  ```\n\n## Get the PR Number and Branch Name\n\n- Get the PR number\n\n  ```bash\n  > GH_PR_NUM=$(gh pr view --json number -q .number)\n  ```\n\n- Get the branch name\n\n  ```bash\n  > BRANCH_NAME=$(git branch --show-current)\n  ```\n\n## Run the AI Lint and Add TODOs\n\n- Run the AI-based linter on the branch, asking it to leave `TODO`s instead of\n  silently rewriting the code\n\n  ```bash\n  > linters2\u002Fcc_lint.py --branch --add_todos\n  ```\n\n- Commit the added `TODO`s together with any other pending changes, following \"Never\n  Commit Junk Files\" below\n\n## Resolve the Added TODOs\n\n- For each file that `cc_lint.py` annotated, use `\u002Fcoding.todoai_gp` to implement the\n  `TODO(ai_gp)` items it added\n- Commit the fixes, following \"Never Commit Junk Files\" below\n\n## Run the Standard Linter\n\n- Run the repo's standard linter on the branch\n\n  ```bash\n  > linters2\u002Flint.py --branch\n  ```\n\n- Commit any resulting changes, following \"Never Commit Junk Files\" below\n\n## Fix Pyright Issues\n- Fix the pyright warnings and errors in the branch\n  ```bash\n  > linters2\u002Flint.py --clear_actions --action \"pyright\" --branch\n  ```\n- Commit any resulting changes, following \"Never Commit Junk Files\" below\n\n## Make Sure The Affected Local Tests Pass\n- Run the subset of tasks that are affected by the change, using\n  ```\n  > pytest \u003CTEST_NAMES>\n  ```\n  to iterate on the tests and then `pytest_multi_build.py` to check all the different\n  builds\n  ```\n  > pytest_multi_build.py --target \u003CTEST_NAMES>\n  ```\n\n## Make Sure Local Tests Pass\n- Use `\u002Fgithub.get_pr_to_pass_local_tests` to run and fix the local unit tests for\n  the branch, even if it's a long task\n\n## Make Sure GitHub CI Passes\n- Use `\u002Fgithub.get_pr_to_pass_ci_tests` to run and monitor GitHub CI, fix any\n  failures\n\n## Never Commit Junk Files\n\n- Never run `git add -A` or `git add .` to stage a fix: it sweeps in every untracked\n  file sitting in the working tree (logs, `tmp.*` scratch files, test-run artifacts\n  like `.pkl`\u002F`.json` caches, etc.), not just the files you 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; drop\n  anything that is not part of the intended fix\n- If junk files were already committed and pushed, fix it by amending the commit to\n  contain only the intended files and force-pushing (`git push --force-with-lease`),\n  rather than leaving the junk in history\n\n## Loop\n\n- Keep repeating until the branch has no outstanding `cc_lint.py` `TODO`s, the\n  standard linter is clean, and the local tests and the GitHub CI checks are all\n  passing\n\n# Constraints\n\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- [ ] `linters2\u002Fcc_lint.py --branch --add_todos` adds no new `TODO`s\n- [ ] No unresolved `TODO(ai_gp)` items remain in the branch's modified files\n- [ ] `linters2\u002Flint.py --branch` reports no issues\n- [ ] Local unit tests pass (per `\u002Fgithub.get_pr_to_pass_local_tests`)\n- [ ] `gh pr checks --watch $GH_PR_NUM` reports all checks successful (per\n      `\u002Fgithub.get_pr_to_pass_ci_tests`)\n- [ ] A PR comment reports the final CI status\n- [ ] `git status --short` shows only the intended files staged before commit\n","# Goal\n\n- Run the AI lint, the standard linter, the local tests, and GitHub CI for the\n  current PR, fixing anything that comes up, so the PR is ready to be reviewed and\n  merged\n\n# Workflow\n\n## Create and Update a Plan\n\n- Create a file `plan-github.get_pr_ready_to_merge.md` with a plan in the form of a\n  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- E.g.,\n  ```\n  # Plan: get PR #... ready to merge\n\n  - [ ] Get PR number and branch name\n  - [ ] Make sure PR is ready (not draft)\n  - [ ] Run AI lint with --add_todos, commit TODOs\n  - [ ] Resolve added TODO(ai_gp) items\n  - [ ] Run standard linter, fix issues\n  - [ ] Make Sure The Affected Local Tests Pass\n  - [ ] Make local tests pass\n  - [ ] Run and monitor GitHub CI\n  - [ ] Report status on PR\n  - [ ] Fix any CI failures\n  ```\n\n## Get the PR Number and Branch Name\n\n- Get the PR number\n\n  ```bash\n  > GH_PR_NUM=$(gh pr view --json number -q .number)\n  ```\n\n- Get the branch name\n\n  ```bash\n  > BRANCH_NAME=$(git branch --show-current)\n  ```\n\n## Run the AI Lint and Add TODOs\n\n- Run the AI-based linter on the branch, asking it to leave `TODO`s instead of\n  silently rewriting the code\n\n  ```bash\n  > linters2\u002Fcc_lint.py --branch --add_todos\n  ```\n\n- Commit the added `TODO`s together with any other pending changes, following \"Never\n  Commit Junk Files\" below\n\n## Resolve the Added TODOs\n\n- For each file that `cc_lint.py` annotated, use `\u002Fcoding.todoai_gp` to implement the\n  `TODO(ai_gp)` items it added\n- Commit the fixes, following \"Never Commit Junk Files\" below\n\n## Run the Standard Linter\n\n- Run the repo's standard linter on the branch\n\n  ```bash\n  > linters2\u002Flint.py --branch\n  ```\n\n- Commit any resulting changes, following \"Never Commit Junk Files\" below\n\n## Fix Pyright Issues\n- Fix the pyright warnings and errors in the branch\n  ```bash\n  > linters2\u002Flint.py --clear_actions --action \"pyright\" --branch\n  ```\n- Commit any resulting changes, following \"Never Commit Junk Files\" below\n\n## Make Sure The Affected Local Tests Pass\n- Run the subset of tasks that are affected by the change, using\n  ```\n  > pytest \u003CTEST_NAMES>\n  ```\n  to iterate on the tests and then `pytest_multi_build.py` to check all the different\n  builds\n  ```\n  > pytest_multi_build.py --target \u003CTEST_NAMES>\n  ```\n\n## Make Sure Local Tests Pass\n- Use `\u002Fgithub.get_pr_to_pass_local_tests` to run and fix the local unit tests for\n  the branch, even if it's a long task\n\n## Make Sure GitHub CI Passes\n- Use `\u002Fgithub.get_pr_to_pass_ci_tests` to run and monitor GitHub CI, fix any\n  failures\n\n## Never Commit Junk Files\n\n- Never run `git add -A` or `git add .` to stage a fix: it sweeps in every untracked\n  file sitting in the working tree (logs, `tmp.*` scratch files, test-run artifacts\n  like `.pkl`\u002F`.json` caches, etc.), not just the files you 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; drop\n  anything that is not part of the intended fix\n- If junk files were already committed and pushed, fix it by amending the commit to\n  contain only the intended files and force-pushing (`git push --force-with-lease`),\n  rather than leaving the junk in history\n\n## Loop\n\n- Keep repeating until the branch has no outstanding `cc_lint.py` `TODO`s, the\n  standard linter is clean, and the local tests and the GitHub CI checks are all\n  passing\n\n# Constraints\n\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- [ ] `linters2\u002Fcc_lint.py --branch --add_todos` adds no new `TODO`s\n- [ ] No unresolved `TODO(ai_gp)` items remain in the branch's modified files\n- [ ] `linters2\u002Flint.py --branch` reports no issues\n- [ ] Local unit tests pass (per `\u002Fgithub.get_pr_to_pass_local_tests`)\n- [ ] `gh pr checks --watch $GH_PR_NUM` reports all checks successful (per\n      `\u002Fgithub.get_pr_to_pass_ci_tests`)\n- [ ] A PR comment reports the final CI status\n- [ ] `git status --short` shows only the intended files staged before commit\n",{"model":32,"description":7},"sonnet","master","804ae3e928c04740cec553be0eb28c8d06ff420e",".claude\u002Fskills\u002Fgithub.get_pr_ready_to_merge",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":42,"prompt":52,"zipAvailable":53},[43,46,49],{"tool":44,"command":45},"npx","npx skills add causify-ai\u002Fhelpers --skill github.get_pr_ready_to_merge",{"tool":47,"command":48},"bunx","bunx skills add causify-ai\u002Fhelpers --skill github.get_pr_ready_to_merge",{"tool":50,"command":51},"pnpm","pnpm dlx skills add causify-ai\u002Fhelpers --skill github.get_pr_ready_to_merge","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fgithub.get_pr_ready_to_merge\u002FSKILL.md",true,[],[56,78,95,107,116,130],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":67,"publishedAt":27},"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",[62],{"categoryNo":63,"categoryName":64,"taxonomyType":65,"taxonomyTypeDesc":66},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[68,69,70,71,72,73,74,75,76,77],"docker","tutorial","tutorial in 60 mins propagate docker changes","propagate","template","sync","haiku","files","project","match",{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":87,"publishedAt":27},"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",[84],{"categoryNo":85,"categoryName":86,"taxonomyType":65,"taxonomyTypeDesc":66},"01JBSEEDCAT000000000000002","文档处理",[88,20,69,89,90,91,74,92,93,94],"markdown","tutorial in 60 mins merge markdown","notebook","jupyter","file","jupyter notebook","content",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":27},"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",[],[102,69,103,104,105,74,106],"tutorial in 60 mins format","format","directory","learn","conventions",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":27},"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",[],[114,69,115,105,104,106],"tutorial in 60 mins create","create",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":27},"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",[],[123,124,125,126,127,128,129],"progress","todo","todo reorg in progress","tasks","queue","task","stage",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":27},"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",[],[137,124,127,128,129],"todo reorg headers"]