[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BZNT53AYGPMD37M2BJRG05":3,"skill-same:01M6BZNT53AYGPMD37M2BJRG05":51},{"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":23,"linkOnly":24,"markdownContent":25,"markdownBody":26,"frontMatter":27,"refName":29,"commitSha":30,"skillDirectory":31,"forksCount":32,"repositoryHtmlUrl":33,"repositoryHomepageUrl":34,"ownerHtmlUrl":35,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":36,"install":37,"resources":50},"01M6BZNT53AYGPMD37M2BJRG05","project.update_progress",null,"Update the plan, the log, and the decisions after a PR is merged","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\u002Fproject.update_progress\u002FSKILL.md",[],[19,20,21,22],"update","project update progress","pr","plan","2026-11-10 10:12:30",false,"---\ndescription: Update the plan, the log, and the decisions after a PR is merged\nmodel: sonnet\n---\n\n# Goal\n\n- Given the plan ids of the merged PR(s), bring the docs of the project in sync:\n  tick the plan, add the log entry, record the decisions\n- Log facts only: never invent a result\n\n## Input\n\n- `\u003CPR_IDS>`: one or more plan ids, e.g., `PR_M10`\n- `\u003CPR_NUM>`: the GitHub PR number, optional\n  - If missing, find the merged PR with `gh pr list --state merged --search\n    \"\u003CPR_ID>\"`\n- `\u003CDOCS_DIR>`: the `docs\u002F` dir of the project, optional\n  - If missing, use `docs\u002F` in the current dir\n\n# Workflow\n\n## Check the PR Is Merged\n\n- Read the PR with `gh pr view \u003CPR_NUM>`\n- If the PR is not merged, stop and tell the user: a PR is checked only when merged\n\n## Update the Plan\n\n- Tick `[x]` the PR in the roadmap and in its entry in `\u003CDOCS_DIR>\u002Fplan.md`\n- For a partly done PR, write the status in its entry and do not tick it\n- If the scope or the order changed, edit the plan and log why in the progress log\n\n## Update the Log\n\n- Add the entry to `\u003CDOCS_DIR>\u002Fprogress.md`, after the older ones\n  - Use a History row, or one section per PR when a row is too short\n  - Follow `.claude\u002Fskills\u002Fproject.rules.md` section \"Write the Log\" and the template\n    `.claude\u002Ftemplates\u002Fproject_progress.template.md`\n- Take from the PR: the issue, the author, the dates in UTC, the testing evidence,\n  the failing checks that the PR did not cause\n- Update \"Status\", \"Built\", and \"Next\"\n- Ask the user for any finding or number that is not in the PR: do not invent it\n\n## Record the Decisions\n\n- For each decision in the \"Decisions\" section of the PR description, add an entry\n  to `\u003CDOCS_DIR>\u002Fdecisions.md`\n  - Follow the template `.claude\u002Ftemplates\u002Fproject_decisions.template.md`\n- Add a one-line pointer to the decision in the log entry\n  - Make the pointer a link to the `### D-\u003CN>. \u003CDecision title>` header in\n    `decisions.md`, per `.claude\u002Fskills\u002Fproject.rules.md` section \"Link\n    Requirements and Decisions\"\n\n## Sync the Other Docs\n\n- Apply the event map in `.claude\u002Fskills\u002Fproject.rules.md` section \"Map Each Event\n  to the Doc to Update\"\n- Update the design doc of each module the PR changed\n- Update `\u003CDOCS_DIR>\u002FREADME.md` if a doc was added, renamed, or removed\n- Add new terms to `\u003CDOCS_DIR>\u002Fglossary.md`, if the file exists\n\n# Conventions\n\n- Follow `.claude\u002Fskills\u002Fproject.rules.md` for the docs of a project\n- Follow `.claude\u002Fskills\u002Fmarkdown.rules.md` and `.claude\u002Fskills\u002Ftext.rules.md`\n\n# Constraints\n\n- Append to the history: do not rewrite the past rows\n- Log facts, not plans\n- Do not commit any change: the user commits the doc update in the PR that finishes\n  the task\n\n# Verification\n\n- [ ] Only merged PRs are ticked\n- [ ] The log entry has the PR link, the dates in UTC, and the testing evidence\n- [ ] Every decision of the PR is in `decisions.md`\n- [ ] `\u003CDOCS_DIR>\u002FREADME.md` lists every doc in the dir\n- [ ] No past row of the history was changed\n","# Goal\n\n- Given the plan ids of the merged PR(s), bring the docs of the project in sync:\n  tick the plan, add the log entry, record the decisions\n- Log facts only: never invent a result\n\n## Input\n\n- `\u003CPR_IDS>`: one or more plan ids, e.g., `PR_M10`\n- `\u003CPR_NUM>`: the GitHub PR number, optional\n  - If missing, find the merged PR with `gh pr list --state merged --search\n    \"\u003CPR_ID>\"`\n- `\u003CDOCS_DIR>`: the `docs\u002F` dir of the project, optional\n  - If missing, use `docs\u002F` in the current dir\n\n# Workflow\n\n## Check the PR Is Merged\n\n- Read the PR with `gh pr view \u003CPR_NUM>`\n- If the PR is not merged, stop and tell the user: a PR is checked only when merged\n\n## Update the Plan\n\n- Tick `[x]` the PR in the roadmap and in its entry in `\u003CDOCS_DIR>\u002Fplan.md`\n- For a partly done PR, write the status in its entry and do not tick it\n- If the scope or the order changed, edit the plan and log why in the progress log\n\n## Update the Log\n\n- Add the entry to `\u003CDOCS_DIR>\u002Fprogress.md`, after the older ones\n  - Use a History row, or one section per PR when a row is too short\n  - Follow `.claude\u002Fskills\u002Fproject.rules.md` section \"Write the Log\" and the template\n    `.claude\u002Ftemplates\u002Fproject_progress.template.md`\n- Take from the PR: the issue, the author, the dates in UTC, the testing evidence,\n  the failing checks that the PR did not cause\n- Update \"Status\", \"Built\", and \"Next\"\n- Ask the user for any finding or number that is not in the PR: do not invent it\n\n## Record the Decisions\n\n- For each decision in the \"Decisions\" section of the PR description, add an entry\n  to `\u003CDOCS_DIR>\u002Fdecisions.md`\n  - Follow the template `.claude\u002Ftemplates\u002Fproject_decisions.template.md`\n- Add a one-line pointer to the decision in the log entry\n  - Make the pointer a link to the `### D-\u003CN>. \u003CDecision title>` header in\n    `decisions.md`, per `.claude\u002Fskills\u002Fproject.rules.md` section \"Link\n    Requirements and Decisions\"\n\n## Sync the Other Docs\n\n- Apply the event map in `.claude\u002Fskills\u002Fproject.rules.md` section \"Map Each Event\n  to the Doc to Update\"\n- Update the design doc of each module the PR changed\n- Update `\u003CDOCS_DIR>\u002FREADME.md` if a doc was added, renamed, or removed\n- Add new terms to `\u003CDOCS_DIR>\u002Fglossary.md`, if the file exists\n\n# Conventions\n\n- Follow `.claude\u002Fskills\u002Fproject.rules.md` for the docs of a project\n- Follow `.claude\u002Fskills\u002Fmarkdown.rules.md` and `.claude\u002Fskills\u002Ftext.rules.md`\n\n# Constraints\n\n- Append to the history: do not rewrite the past rows\n- Log facts, not plans\n- Do not commit any change: the user commits the doc update in the PR that finishes\n  the task\n\n# Verification\n\n- [ ] Only merged PRs are ticked\n- [ ] The log entry has the PR link, the dates in UTC, and the testing evidence\n- [ ] Every decision of the PR is in `decisions.md`\n- [ ] `\u003CDOCS_DIR>\u002FREADME.md` lists every doc in the dir\n- [ ] No past row of the history was changed\n",{"model":28,"description":7},"sonnet","master","39143a859859181eff7e774457997b5278fd9e99",".claude\u002Fskills\u002Fproject.update_progress",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":38,"prompt":48,"zipAvailable":49},[39,42,45],{"tool":40,"command":41},"npx","npx skills add causify-ai\u002Fhelpers --skill project.update_progress",{"tool":43,"command":44},"bunx","bunx skills add causify-ai\u002Fhelpers --skill project.update_progress",{"tool":46,"command":47},"pnpm","pnpm dlx skills add causify-ai\u002Fhelpers --skill project.update_progress","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fproject.update_progress\u002FSKILL.md",true,[],[52,71,88,99,108,117],{"skillNo":53,"name":54,"nameZh":6,"description":55,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":56,"categories":57,"keywords":63,"publishedAt":23},"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",[58],{"categoryNo":59,"categoryName":60,"taxonomyType":61,"taxonomyTypeDesc":62},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[64,65,66,67,68,69,70],"tutorial in 60 mins propagate docker changes","tutorial","docker","files","haiku","template","sync",{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":80,"publishedAt":23},"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",[77],{"categoryNo":78,"categoryName":79,"taxonomyType":61,"taxonomyTypeDesc":62},"01JBSEEDCAT000000000000002","文档处理",[81,82,65,83,84,68,85,86,87],"merge","tutorial in 60 mins merge markdown","markdown","jupyter","file","content","jupyter notebook",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":23},"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",[],[95,65,96,97,98,68],"tutorial in 60 mins format","format","directory","learn",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":23},"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",[],[106,65,107,97,98],"tutorial in 60 mins create","create",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":114,"publishedAt":23},"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",[],[115,116],"todo reorg in progress","tasks",{"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":23},"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",[],[124],"todo reorg headers"]