[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CEAW1MPC6PSC289THGQFM7":3,"skill-same:01M6CEAW1MPC6PSC289THGQFM7":58},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":29,"frontMatter":30,"refName":31,"commitSha":32,"skillDirectory":33,"forksCount":34,"repositoryHtmlUrl":35,"repositoryHomepageUrl":6,"ownerHtmlUrl":36,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":37,"install":38,"resources":51},"01M6CEAW1MPC6PSC289THGQFM7","prepare-pr",null,"Script-first PR preparation with structured findings resolution, deterministic push safety, and explicit gate execution.","LongIV999\u002FOpenclawd","LongIV999","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F92411512?v=4","01M6CEACAHRWWFRVKBQPSQ2WBM","01M6CEACEJDYKGDKD1P6A7J7VV",0,"MIT","https:\u002F\u002Fgithub.com\u002FLongIV999\u002FOpenclawd\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fprepare-pr\u002FSKILL.md",[],[18,19,20,21,22,23,24,25],"prepare","pr","prepare pr","push","execution","Safety","first","gate","2026-11-10 10:12:30",false,"---\nname: prepare-pr\ndescription: Script-first PR preparation with structured findings resolution, deterministic push safety, and explicit gate execution.\n---\n\n# Prepare PR\n\n## Overview\n\nPrepare the PR head branch for merge after `\u002Freview-pr`.\n\n## Inputs\n\n- Ask for PR number or URL.\n- If missing, use `.local\u002Fpr-meta.env` if present in the PR worktree.\n\n## Safety\n\n- Never push to `main`.\n- Only push to PR head with explicit `--force-with-lease` against known head SHA.\n- Do not run `git clean -fdx`.\n- Wrappers are cwd-agnostic; run from repo root or PR worktree.\n\n## Execution Contract\n\n1. Run setup:\n\n```sh\nscripts\u002Fpr-prepare init \u003CPR>\n```\n\n2. Resolve findings from structured review:\n\n- `.local\u002Freview.json` is mandatory.\n- Resolve all `BLOCKER` and `IMPORTANT` items.\n\n3. Commit scoped changes with concise subjects (no PR number\u002Fthanks; those belong on the final merge\u002Fsquash commit).\n\n4. Run gates via wrapper.\n\n5. Push via wrapper (includes pre-push remote verification, one automatic lease-retry path, and post-push API propagation retry).\n\nOptional one-shot path:\n\n```sh\nscripts\u002Fpr-prepare run \u003CPR>\n```\n\n## Steps\n\n1. Setup and artifacts\n\n```sh\nscripts\u002Fpr-prepare init \u003CPR>\n\nls -la .local\u002Freview.md .local\u002Freview.json .local\u002Fpr-meta.env .local\u002Fprep-context.env\njq . .local\u002Freview.json >\u002Fdev\u002Fnull\n```\n\n2. Resolve required findings\n\nList required items:\n\n```sh\njq -r '.findings[] | select(.severity==\"BLOCKER\" or .severity==\"IMPORTANT\") | \"- [\\(.severity)] \\(.id): \\(.title) => \\(.fix)\"' .local\u002Freview.json\n```\n\nFix all required findings. Keep scope tight.\n\n3. Update changelog\u002Fdocs (changelog is mandatory in this workflow)\n\n```sh\njq -r '.changelog' .local\u002Freview.json\njq -r '.docs' .local\u002Freview.json\n```\n\n4. Commit scoped changes\n\nUse concise, action-oriented subject lines without PR numbers\u002Fthanks. The final merge\u002Fsquash commit is the only place we include PR numbers and contributor thanks.\n\nUse explicit file list:\n\n```sh\nscripts\u002Fcommitter \"fix: \u003Csummary>\" \u003Cfile1> \u003Cfile2> ...\n```\n\n5. Run gates\n\n```sh\nscripts\u002Fpr-prepare gates \u003CPR>\n```\n\n6. Push safely to PR head\n\n```sh\nscripts\u002Fpr-prepare push \u003CPR>\n```\n\nThis push step includes:\n\n- robust fork remote resolution from owner\u002Fname,\n- pre-push remote SHA verification,\n- one automatic rebase + gate rerun + retry if lease push fails,\n- post-push PR-head propagation retry,\n- idempotent behavior when local prep HEAD is already on the PR head,\n- post-push SHA verification and `.local\u002Fprep.env` generation.\n\n7. Verify handoff artifacts\n\n```sh\nls -la .local\u002Fprep.md .local\u002Fprep.env\n```\n\n8. Output\n\n- Summarize resolved findings and gate results.\n- Print exactly: `PR is ready for \u002Fmerge-pr`.\n\n## Guardrails\n\n- Do not run `gh pr merge` in this skill.\n- Do not delete worktree.\n","# Prepare PR\n\n## Overview\n\nPrepare the PR head branch for merge after `\u002Freview-pr`.\n\n## Inputs\n\n- Ask for PR number or URL.\n- If missing, use `.local\u002Fpr-meta.env` if present in the PR worktree.\n\n## Safety\n\n- Never push to `main`.\n- Only push to PR head with explicit `--force-with-lease` against known head SHA.\n- Do not run `git clean -fdx`.\n- Wrappers are cwd-agnostic; run from repo root or PR worktree.\n\n## Execution Contract\n\n1. Run setup:\n\n```sh\nscripts\u002Fpr-prepare init \u003CPR>\n```\n\n2. Resolve findings from structured review:\n\n- `.local\u002Freview.json` is mandatory.\n- Resolve all `BLOCKER` and `IMPORTANT` items.\n\n3. Commit scoped changes with concise subjects (no PR number\u002Fthanks; those belong on the final merge\u002Fsquash commit).\n\n4. Run gates via wrapper.\n\n5. Push via wrapper (includes pre-push remote verification, one automatic lease-retry path, and post-push API propagation retry).\n\nOptional one-shot path:\n\n```sh\nscripts\u002Fpr-prepare run \u003CPR>\n```\n\n## Steps\n\n1. Setup and artifacts\n\n```sh\nscripts\u002Fpr-prepare init \u003CPR>\n\nls -la .local\u002Freview.md .local\u002Freview.json .local\u002Fpr-meta.env .local\u002Fprep-context.env\njq . .local\u002Freview.json >\u002Fdev\u002Fnull\n```\n\n2. Resolve required findings\n\nList required items:\n\n```sh\njq -r '.findings[] | select(.severity==\"BLOCKER\" or .severity==\"IMPORTANT\") | \"- [\\(.severity)] \\(.id): \\(.title) => \\(.fix)\"' .local\u002Freview.json\n```\n\nFix all required findings. Keep scope tight.\n\n3. Update changelog\u002Fdocs (changelog is mandatory in this workflow)\n\n```sh\njq -r '.changelog' .local\u002Freview.json\njq -r '.docs' .local\u002Freview.json\n```\n\n4. Commit scoped changes\n\nUse concise, action-oriented subject lines without PR numbers\u002Fthanks. The final merge\u002Fsquash commit is the only place we include PR numbers and contributor thanks.\n\nUse explicit file list:\n\n```sh\nscripts\u002Fcommitter \"fix: \u003Csummary>\" \u003Cfile1> \u003Cfile2> ...\n```\n\n5. Run gates\n\n```sh\nscripts\u002Fpr-prepare gates \u003CPR>\n```\n\n6. Push safely to PR head\n\n```sh\nscripts\u002Fpr-prepare push \u003CPR>\n```\n\nThis push step includes:\n\n- robust fork remote resolution from owner\u002Fname,\n- pre-push remote SHA verification,\n- one automatic rebase + gate rerun + retry if lease push fails,\n- post-push PR-head propagation retry,\n- idempotent behavior when local prep HEAD is already on the PR head,\n- post-push SHA verification and `.local\u002Fprep.env` generation.\n\n7. Verify handoff artifacts\n\n```sh\nls -la .local\u002Fprep.md .local\u002Fprep.env\n```\n\n8. Output\n\n- Summarize resolved findings and gate results.\n- Print exactly: `PR is ready for \u002Fmerge-pr`.\n\n## Guardrails\n\n- Do not run `gh pr merge` in this skill.\n- Do not delete worktree.\n",{"name":5,"description":7},"main","56e72bb5549c5fa0a0470501619427b4f104aa92",".agents\u002Fskills\u002Fprepare-pr",1,"https:\u002F\u002Fgithub.com\u002FLongIV999\u002FOpenclawd","https:\u002F\u002Fgithub.com\u002FLongIV999","2026-02-15 08:26:56",{"source":8,"skillName":5,"commands":39,"prompt":49,"zipAvailable":50},[40,43,46],{"tool":41,"command":42},"npx","npx skills add LongIV999\u002FOpenclawd --skill prepare-pr",{"tool":44,"command":45},"bunx","bunx skills add LongIV999\u002FOpenclawd --skill prepare-pr",{"tool":47,"command":48},"pnpm","pnpm dlx skills add LongIV999\u002FOpenclawd --skill prepare-pr","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FLongIV999\u002FOpenclawd\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fprepare-pr\u002FSKILL.md",true,[52],{"path":53,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":56,"sourceHtmlUrl":57},"agents\u002Fopenai.yaml","REFERENCE","参考文档",175,"https:\u002F\u002Fgithub.com\u002FLongIV999\u002FOpenclawd\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fprepare-pr\u002Fagents\u002Fopenai.yaml",[59,68,79,99,112,128],{"skillNo":60,"name":61,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":64,"publishedAt":26},"01M6CEFMR22ANX8BMWBY9J8VW3","youtube-to-obsidian","https:\u002F\u002Fgithub.com\u002FLongIV999\u002FOpenclawd\u002Fblob\u002Fmain\u002Fskills\u002Fyoutube-to-obsidian\u002FSKILL.md",[],[65,66,67],"youtube to obsidian","youtube","obsidian",{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":26},"01M6CEFJW8HMZ7EY2C7FXDN8HG","weather","Get current weather and forecasts (no API key required).","https:\u002F\u002Fgithub.com\u002FLongIV999\u002FOpenclawd\u002Fblob\u002Fmain\u002Fskills\u002Fweather\u002FSKILL.md",[],[70,75,76,77,78],"help","https","api","curl",{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":26},"01M6CEFGENXXNDQTCWVC82VBFT","wacli","Send WhatsApp messages to other people or search\u002Fsync WhatsApp history via the wacli CLI (not for normal user chats).","https:\u002F\u002Fgithub.com\u002FLongIV999\u002FOpenclawd\u002Fblob\u002Fmain\u002Fskills\u002Fwacli\u002FSKILL.md",[],[81,86,87,88,89,76,90,91,92,93,94,95,96,97,98],"github","cli","sync","search","messages","history","cmd","brew","user","install","tap","whatsapp","go",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":26},"01M6CEFERBY58R1VW8Z8ZCYEMY","voice-call","Start voice calls via the OpenClaw voice-call plugin.","https:\u002F\u002Fgithub.com\u002FLongIV999\u002FOpenclawd\u002Fblob\u002Fmain\u002Fskills\u002Fvoice-call\u002FSKILL.md",[],[106,107,108,109,110,111],"voice","voice call","openclaw","plugin","plugins","start",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":123,"publishedAt":26},"01M6CEFD0C501CWXD9E4BMV2B2","video-frames","Extract frames or short clips from videos using ffmpeg.","https:\u002F\u002Fgithub.com\u002FLongIV999\u002FOpenclawd\u002Fblob\u002Fmain\u002Fskills\u002Fvideo-frames\u002FSKILL.md",[118],{"categoryNo":119,"categoryName":120,"taxonomyType":121,"taxonomyTypeDesc":122},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[124,125,93,76,126,127,95],"Video","video frames","short","extract",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":142,"publishedAt":26},"01M6CEFAJ48939CYW40VTBYGVP","trello","Manage Trello boards, lists, and cards via the Trello REST API.","https:\u002F\u002Fgithub.com\u002FLongIV999\u002FOpenclawd\u002Fblob\u002Fmain\u002Fskills\u002Ftrello\u002FSKILL.md",[134,137],{"categoryNo":135,"categoryName":136,"taxonomyType":121,"taxonomyTypeDesc":122},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":138,"categoryName":139,"taxonomyType":140,"taxonomyTypeDesc":141},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[130,76,143,144,145,77,146,147,148],"cloud","developer","REST","jq","atlassian","manage"]