[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CDJ6TKHS94BWP12D3ZJ32R":3,"skill-same:01M6CDJ6TKHS94BWP12D3ZJ32R":64},{"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":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":27,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":45,"ownerHtmlUrl":46,"ownerBlogUrl":47,"ownerDescription":48,"updatedAt":49,"install":50,"resources":63},"01M6CDJ6TKHS94BWP12D3ZJ32R","cw-land",null,"Use when turning verified Codewhale work into commits on main and pushing them, or merging a contributor PR: staging only your paths, the pre-push drift checks, preserving contributor credit, and honoring the gate artifact before merging.","codewhale-hq\u002FCodewhale","codewhale-hq","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F326694313?v=4","01M6CDD9D70AD3631SMRJ7REW4","Codewhale","01M6CDD9H0VAXYCB2NGGPZC16K",41176,"MIT","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fcw-land\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"land","cw land","verified","paths","artifact","drift","when","contributor","main","codewhale","gate","work","use","only","commits","pr","push","2026-11-10 10:12:30",false,"---\nname: cw-land\ndescription: \"Use when turning verified Codewhale work into commits on main and pushing them, or merging a contributor PR: staging only your paths, the pre-push drift checks, preserving contributor credit, and honoring the gate artifact before merging.\"\n---\n\n# cw-land\n\nVerified work still has to land without stepping on other writers, losing\ncontributor credit, or merging past a gate that has not actually passed. This\nstage is about the boundary between \"it works\" and \"it is in `main`\" — and about\nwhich of those steps you are allowed to take.\n\nStage 5 of the loop: [cw-orient](..\u002Fcw-orient\u002FSKILL.md) →\n[cw-slice](..\u002Fcw-slice\u002FSKILL.md) → [cw-gates](..\u002Fcw-gates\u002FSKILL.md) →\n[cw-dogfood](..\u002Fcw-dogfood\u002FSKILL.md) → **land** →\n[cw-handoff](..\u002Fcw-handoff\u002FSKILL.md).\n\n## When to use\n\n- The change is verified and needs to become a commit on `main`.\n- You are landing someone else's PR, harvesting a contributor's work, or\n  resolving a conflict caused by `main` moving.\n- You are about to merge something behind a required gate.\n\n## Workflow\n\n1. **Land on `main`.** `AGENTS.md` owns this: work in your own short-lived\n   worktree, rebase onto `origin\u002Fmain`, push `HEAD:main`, then remove the\n   worktree. No maintainer PR branches, nested clones or integration lanes.\n   Several agents share the checkout, so partition by file, check\n   `git status` before staging, stage only your paths (never `git add -A`),\n   and retry a commit that fails on `index.lock`. Push verified `main`\n   directly. Every push to `main` starts full hosted CI on that commit through\n   the landing gate (`main-landing.yml`): never add `[skip ci]`, watch the run\n   and repair what it finds. PRs are for contributors.\n\n2. **Commit narrow and build-green.** One coherent change per commit; the tree\n   builds at every commit. Put the real verification in the message — actual\n   pass\u002Ffail counts, not \"tests pass\".\n\n   Before every push, run the cheap drift checks that have turned a green\n   `main` red most often. They take seconds:\n   ```bash\n   cargo fmt --all -- --check\n   bash scripts\u002Frelease\u002Fcheck-versions.sh\n   ```\n   The runtime-contract budget checker starts a native Cargo build by default;\n   it is not a cheap drift check. Use an applicable existing measurement with\n   `--receipt`, or run a new measurement through the required build-lock and\n   SSD cache workflow when the changed contract or final validation needs it.\n   Add the one that matches what you touched: `check-tui-locale-parity.py`\n   and `check-tui-product-vocabulary.sh` (locale strings),\n   `check-dead-code-budget.py` (`#[allow(dead_code)]`),\n   `check-blocking-calls-budget.py` (async code),\n   `check-readme-translations.py` and `check-readme-locales.sh` (READMEs),\n   `node web\u002Fscripts\u002Fderive-facts.mjs && node web\u002Fscripts\u002Fcheck-facts.mjs`\n   (public facts and agent docs, which embed the docs), and\n   `node web\u002Fscripts\u002Fcheck-runtime-routes.mjs --write` (a Runtime API route\n   added or removed). Regenerate those two files after every rebase or\n   cherry-pick, even a clean one: git can merge `docs\u002FRUNTIME_ROUTES.md`\n   wrongly with no conflict marker. Put a new CHANGELOG entry at the **top** of\n   `[Unreleased]`. Open contributor PRs append at its end, and an entry of\n   ours there conflicts with every one of them.\n\n   **Record it in the same commit.** A user-visible change, usually a `feat`\n   or `fix` but also user docs, help text, defaults or security behavior,\n   carries its line at the top of the matching `[Unreleased]` section (Added,\n   Changed or Fixed): what changed for the user, what is still unproved,\n   `(#N)` for a public issue or PR (never an internal tracker id), and for\n   reported or contributed work `Thanks [@handle](https:\u002F\u002Fgithub.com\u002Fhandle)`.\n   Tests, CI, refactors and internal docs need no line. Work by someone outside the maintainers also goes on the\n   three credit surfaces in that commit: the CHANGELOG `### Contributors`\n   block, `docs\u002FCONTRIBUTORS.md`, and `UNRELEASED_CONTRIBUTORS` in\n   `web\u002Flib\u002Frelease-credits.ts`. A contributor PR merged as itself gets that\n   commit right after the merge. Before the push:\n   ```bash\n   sh scripts\u002Fsync-changelog.sh                 # regenerates crates\u002Ftui\u002FCHANGELOG.md\n   python3 scripts\u002Fcheck-contributor-credit.py  # since the last tag\n   git log --format='%h %s' \"$(git log -1 --format=%H -- CHANGELOG.md)\"..HEAD | grep -E '^[0-9a-f]+ (feat|fix)'\n   ```\n   The last command must print nothing for commits you are landing.\n   `check-feature-release-notes.sh` covers only issue-linked `feat` commits;\n   fixes slip past it. A catch-up \"changelog: record landed work\" commit is\n   the failure this step prevents, not the routine.\n\n3. **Preserve credit mechanically, not just politely.** GitHub reads neither\n   `.github\u002FAUTHOR_MAP` nor `.mailmap` for the contribution graph, so\n   authorship must use the contributor's own GitHub-linked address; those\n   files are project conventions on top. When a contributor's work lands as\n   our commit, the contributor is its **author**\n   and it carries the harvest line (`AGENTS.md`, \"Harvested contributor\n   credit\"):\n   ```text\n   git commit --author=\"Name \u003CID+handle@users.noreply.github.com>\" ...\n\n   Harvested from PR #N by @handle\n\n   Co-authored-by: \u003Cmaintainer or agent identity>\n   ```\n   GitHub's contributor list counts authors only, and\n   `check-contributor-credit.py` flags a harvested handle who is not credited.\n   Resolve the address from `.github\u002FAUTHOR_MAP`, else\n   `gh api users\u002F\u003Chandle> --jq '\"\\(.id)+\\(.login)@users.noreply.github.com\"'`.\n   A clean cherry-pick keeps the author by itself. This step is the single\n   owner of credit mechanics; other skills link here.\n   Close their PR by hand with a thank-you naming the commit; nothing closes a\n   PR automatically. Canonical human identities live in `.github\u002FAUTHOR_MAP`.\n\n   Whether a bot or agent also appears in a trailer no longer matters — the CI\n   check that policed trailer identities was removed because it rejected\n   ordinary agent commits. Give humans their credit; don't spend time scrubbing\n   tool trailers.\n\n4. **Landing someone else's work: their time is more expensive than ours.**\n   - Never make a contributor rebase around our churn. If their PR conflicts\n     only because `main` moved, a maintainer resolves it.\n   - Read their diff against the **merge base** first, so you know exactly what\n     they added, then re-apply that — rather than hand-merging two large sides\n     and hoping:\n     ```bash\n     git diff $(git merge-base main \u003Cpr-head>)..\u003Cpr-head>\n     ```\n   - **Conflicts that split mid-function do not resolve by keeping both sides.**\n     Git's markers can land inside a body, so a both-sides resolution produces\n     unbalanced braces that look plausible and do not compile. Default: take\n     one side whole, then re-insert the other side's additions at their\n     original anchor; when the conflict doesn't fit that pattern, resolve it\n     however is correct and let the compiler judge.\n   - Resolve on their branch without creating a local branch. Build the merge\n     commit with `git merge-tree --write-tree origin\u002Fmain \u003Cpr-head>` and\n     `git commit-tree \u003Ctree> -p \u003Cpr-head> -p origin\u002Fmain`, then push it with\n     `git push \u003Cfork-url> \"${sha}:refs\u002Fheads\u002F\u003Ctheir-branch>\"`. In zsh, write\n     `${sha}`, not `$sha:refs`, because `:r` is a history modifier.\n     `maintainerCanModify` does not guarantee that the push is accepted. When\n     the fork refuses it, ask on the PR. Harvesting is the last resort.\n   - **Check for runs awaiting approval before assuming a PR is stalled.** A\n     first-time contributor's workflow runs can sit at `action_required` until\n     a maintainer approves them, so the PR looks abandoned when nobody has\n     actually looked at it. Approve the runs.\n\n5. **Merging under a gate.** `AGENTS.md` (\"Merging under a gate\") owns this:\n   the artifact must literally say PASS, the review thread outranks the check\n   rollup, and ambiguity blocks the merge — never the reverse. Before you\n   merge, list the open PRs whose base is the PR's source branch\n   (`gh pr list --base \u003Cbranch>`) and retarget them first. Otherwise they\n   close when that branch goes away.\n\n## Red flags \u002F don't\n\n- Don't tag, create a release, publish, or deploy without explicit\n  authorization. Pushing verified `main` is allowed; it is none of those.\n- Don't rewrite published history, retag a release, or force-push a shared ref.\n- Don't commit `AGENTS.md` \u002F `CLAUDE.md` operator controls that live outside the\n  product repository into a public repo.\n- Don't stage another writer's dirty files to get a clean commit.\n- Don't merge on a green rollup alone when a review thread has open findings.\n- Don't harvest or close from a PR title or label — review the code, tests,\n  comments, and checks.\n- Don't add another legacy call site for convenience once a replacement\n  architecture is adopted. Declared migrations are one-way.\n- Don't leave new enforcement live: keep it dry-run\u002Fadvisory unless approved.\n\n## Output\n\n- Commit SHAs, the paths committed, the drift checks run, and the resulting\n  `origin\u002Fmain` SHA.\n- The credit trailers applied and to whom.\n- The CHANGELOG line and credit-surface entries added, or why none was owed.\n- The Linear\u002FGitHub status written after the push, or why none was owed.\n- The gate artifact's literal verdict at merge time, if a gate applies.\n- Exactly which public actions you took, and which you deliberately did not.\n","# cw-land\n\nVerified work still has to land without stepping on other writers, losing\ncontributor credit, or merging past a gate that has not actually passed. This\nstage is about the boundary between \"it works\" and \"it is in `main`\" — and about\nwhich of those steps you are allowed to take.\n\nStage 5 of the loop: [cw-orient](..\u002Fcw-orient\u002FSKILL.md) →\n[cw-slice](..\u002Fcw-slice\u002FSKILL.md) → [cw-gates](..\u002Fcw-gates\u002FSKILL.md) →\n[cw-dogfood](..\u002Fcw-dogfood\u002FSKILL.md) → **land** →\n[cw-handoff](..\u002Fcw-handoff\u002FSKILL.md).\n\n## When to use\n\n- The change is verified and needs to become a commit on `main`.\n- You are landing someone else's PR, harvesting a contributor's work, or\n  resolving a conflict caused by `main` moving.\n- You are about to merge something behind a required gate.\n\n## Workflow\n\n1. **Land on `main`.** `AGENTS.md` owns this: work in your own short-lived\n   worktree, rebase onto `origin\u002Fmain`, push `HEAD:main`, then remove the\n   worktree. No maintainer PR branches, nested clones or integration lanes.\n   Several agents share the checkout, so partition by file, check\n   `git status` before staging, stage only your paths (never `git add -A`),\n   and retry a commit that fails on `index.lock`. Push verified `main`\n   directly. Every push to `main` starts full hosted CI on that commit through\n   the landing gate (`main-landing.yml`): never add `[skip ci]`, watch the run\n   and repair what it finds. PRs are for contributors.\n\n2. **Commit narrow and build-green.** One coherent change per commit; the tree\n   builds at every commit. Put the real verification in the message — actual\n   pass\u002Ffail counts, not \"tests pass\".\n\n   Before every push, run the cheap drift checks that have turned a green\n   `main` red most often. They take seconds:\n   ```bash\n   cargo fmt --all -- --check\n   bash scripts\u002Frelease\u002Fcheck-versions.sh\n   ```\n   The runtime-contract budget checker starts a native Cargo build by default;\n   it is not a cheap drift check. Use an applicable existing measurement with\n   `--receipt`, or run a new measurement through the required build-lock and\n   SSD cache workflow when the changed contract or final validation needs it.\n   Add the one that matches what you touched: `check-tui-locale-parity.py`\n   and `check-tui-product-vocabulary.sh` (locale strings),\n   `check-dead-code-budget.py` (`#[allow(dead_code)]`),\n   `check-blocking-calls-budget.py` (async code),\n   `check-readme-translations.py` and `check-readme-locales.sh` (READMEs),\n   `node web\u002Fscripts\u002Fderive-facts.mjs && node web\u002Fscripts\u002Fcheck-facts.mjs`\n   (public facts and agent docs, which embed the docs), and\n   `node web\u002Fscripts\u002Fcheck-runtime-routes.mjs --write` (a Runtime API route\n   added or removed). Regenerate those two files after every rebase or\n   cherry-pick, even a clean one: git can merge `docs\u002FRUNTIME_ROUTES.md`\n   wrongly with no conflict marker. Put a new CHANGELOG entry at the **top** of\n   `[Unreleased]`. Open contributor PRs append at its end, and an entry of\n   ours there conflicts with every one of them.\n\n   **Record it in the same commit.** A user-visible change, usually a `feat`\n   or `fix` but also user docs, help text, defaults or security behavior,\n   carries its line at the top of the matching `[Unreleased]` section (Added,\n   Changed or Fixed): what changed for the user, what is still unproved,\n   `(#N)` for a public issue or PR (never an internal tracker id), and for\n   reported or contributed work `Thanks [@handle](https:\u002F\u002Fgithub.com\u002Fhandle)`.\n   Tests, CI, refactors and internal docs need no line. Work by someone outside the maintainers also goes on the\n   three credit surfaces in that commit: the CHANGELOG `### Contributors`\n   block, `docs\u002FCONTRIBUTORS.md`, and `UNRELEASED_CONTRIBUTORS` in\n   `web\u002Flib\u002Frelease-credits.ts`. A contributor PR merged as itself gets that\n   commit right after the merge. Before the push:\n   ```bash\n   sh scripts\u002Fsync-changelog.sh                 # regenerates crates\u002Ftui\u002FCHANGELOG.md\n   python3 scripts\u002Fcheck-contributor-credit.py  # since the last tag\n   git log --format='%h %s' \"$(git log -1 --format=%H -- CHANGELOG.md)\"..HEAD | grep -E '^[0-9a-f]+ (feat|fix)'\n   ```\n   The last command must print nothing for commits you are landing.\n   `check-feature-release-notes.sh` covers only issue-linked `feat` commits;\n   fixes slip past it. A catch-up \"changelog: record landed work\" commit is\n   the failure this step prevents, not the routine.\n\n3. **Preserve credit mechanically, not just politely.** GitHub reads neither\n   `.github\u002FAUTHOR_MAP` nor `.mailmap` for the contribution graph, so\n   authorship must use the contributor's own GitHub-linked address; those\n   files are project conventions on top. When a contributor's work lands as\n   our commit, the contributor is its **author**\n   and it carries the harvest line (`AGENTS.md`, \"Harvested contributor\n   credit\"):\n   ```text\n   git commit --author=\"Name \u003CID+handle@users.noreply.github.com>\" ...\n\n   Harvested from PR #N by @handle\n\n   Co-authored-by: \u003Cmaintainer or agent identity>\n   ```\n   GitHub's contributor list counts authors only, and\n   `check-contributor-credit.py` flags a harvested handle who is not credited.\n   Resolve the address from `.github\u002FAUTHOR_MAP`, else\n   `gh api users\u002F\u003Chandle> --jq '\"\\(.id)+\\(.login)@users.noreply.github.com\"'`.\n   A clean cherry-pick keeps the author by itself. This step is the single\n   owner of credit mechanics; other skills link here.\n   Close their PR by hand with a thank-you naming the commit; nothing closes a\n   PR automatically. Canonical human identities live in `.github\u002FAUTHOR_MAP`.\n\n   Whether a bot or agent also appears in a trailer no longer matters — the CI\n   check that policed trailer identities was removed because it rejected\n   ordinary agent commits. Give humans their credit; don't spend time scrubbing\n   tool trailers.\n\n4. **Landing someone else's work: their time is more expensive than ours.**\n   - Never make a contributor rebase around our churn. If their PR conflicts\n     only because `main` moved, a maintainer resolves it.\n   - Read their diff against the **merge base** first, so you know exactly what\n     they added, then re-apply that — rather than hand-merging two large sides\n     and hoping:\n     ```bash\n     git diff $(git merge-base main \u003Cpr-head>)..\u003Cpr-head>\n     ```\n   - **Conflicts that split mid-function do not resolve by keeping both sides.**\n     Git's markers can land inside a body, so a both-sides resolution produces\n     unbalanced braces that look plausible and do not compile. Default: take\n     one side whole, then re-insert the other side's additions at their\n     original anchor; when the conflict doesn't fit that pattern, resolve it\n     however is correct and let the compiler judge.\n   - Resolve on their branch without creating a local branch. Build the merge\n     commit with `git merge-tree --write-tree origin\u002Fmain \u003Cpr-head>` and\n     `git commit-tree \u003Ctree> -p \u003Cpr-head> -p origin\u002Fmain`, then push it with\n     `git push \u003Cfork-url> \"${sha}:refs\u002Fheads\u002F\u003Ctheir-branch>\"`. In zsh, write\n     `${sha}`, not `$sha:refs`, because `:r` is a history modifier.\n     `maintainerCanModify` does not guarantee that the push is accepted. When\n     the fork refuses it, ask on the PR. Harvesting is the last resort.\n   - **Check for runs awaiting approval before assuming a PR is stalled.** A\n     first-time contributor's workflow runs can sit at `action_required` until\n     a maintainer approves them, so the PR looks abandoned when nobody has\n     actually looked at it. Approve the runs.\n\n5. **Merging under a gate.** `AGENTS.md` (\"Merging under a gate\") owns this:\n   the artifact must literally say PASS, the review thread outranks the check\n   rollup, and ambiguity blocks the merge — never the reverse. Before you\n   merge, list the open PRs whose base is the PR's source branch\n   (`gh pr list --base \u003Cbranch>`) and retarget them first. Otherwise they\n   close when that branch goes away.\n\n## Red flags \u002F don't\n\n- Don't tag, create a release, publish, or deploy without explicit\n  authorization. Pushing verified `main` is allowed; it is none of those.\n- Don't rewrite published history, retag a release, or force-push a shared ref.\n- Don't commit `AGENTS.md` \u002F `CLAUDE.md` operator controls that live outside the\n  product repository into a public repo.\n- Don't stage another writer's dirty files to get a clean commit.\n- Don't merge on a green rollup alone when a review thread has open findings.\n- Don't harvest or close from a PR title or label — review the code, tests,\n  comments, and checks.\n- Don't add another legacy call site for convenience once a replacement\n  architecture is adopted. Declared migrations are one-way.\n- Don't leave new enforcement live: keep it dry-run\u002Fadvisory unless approved.\n\n## Output\n\n- Commit SHAs, the paths committed, the drift checks run, and the resulting\n  `origin\u002Fmain` SHA.\n- The credit trailers applied and to whom.\n- The CHANGELOG line and credit-surface entries added, or why none was owed.\n- The Linear\u002FGitHub status written after the push, or why none was owed.\n- The gate artifact's literal verdict at merge time, if a gate applies.\n- Exactly which public actions you took, and which you deliberately did not.\n",{"name":5,"description":7},"29e9f0835c17fb4a834a82ff7ec5a678b7862070","docs\u002Fskills\u002Fcw-land",3571,"https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale","https:\u002F\u002Fcodewhale.net\u002F","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq","https:\u002F\u002Fcodewhale.net","Open-source coding agent for your terminal. Works with the model provider you choose.","2026-11-12 02:35:28",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add codewhale-hq\u002FCodewhale --skill cw-land",{"tool":56,"command":57},"bunx","bunx skills add codewhale-hq\u002FCodewhale --skill cw-land",{"tool":59,"command":60},"pnpm","pnpm dlx skills add codewhale-hq\u002FCodewhale --skill cw-land","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fcw-land\u002FSKILL.md",true,[],[65,90,117,137,150,157],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":36},"01M6CDJRMPR8FX1WVFP94PGDMD","gh-find-prs","Survey the open Codewhale PR and issue queue read-only: fetch each item, check it against current code, and produce one coverage and disposition matrix with cited evidence and credit owed.","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fgh-find-prs\u002FSKILL.md",[],[72,73,74,75,76,77,78,79,28,80,81,82,83,84,32,85,86,34,87,88,89],"find","gh find prs","gh","prs","produce","with","read-only","matrix","queue","issue","read","check","code","open","survey","evidence","fetch","coverage",{"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":101,"publishedAt":36},"01M6CDJP0ZYMQNA6AN028X7A96","gh-file-issue","Use when filing a new Codewhale GitHub issue: turn a bug or idea into a well-formed, actionable issue with repro, acceptance criteria, labels, and milestone.","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fgh-file-issue\u002FSKILL.md",[96],{"categoryNo":97,"categoryName":98,"taxonomyType":99,"taxonomyTypeDesc":100},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[102,74,103,104,81,105,106,107,25,108,109,110,111,28,112,113,114,77,115,116,31],"file issue","file","gh file issue","milestone","idea","filing","new","labels","acceptance","actionable","bug","github issue","github","acceptance criteria","repro",{"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":124,"publishedAt":36},"01M6CDJJZB0G4XHWWBD12S990C","gh-close-issues","Close resolved Codewhale issues only after verifying the landed behavior: Refs #N per landing, Fixes #N only when the reporter's scenario was reproduced, closure at the release step or on the reporter's confirmation, always with a crediting comment.","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fgh-close-issues\u002FSKILL.md",[123],{"categoryNo":97,"categoryName":98,"taxonomyType":99,"taxonomyTypeDesc":100},[125,126,127,74,128,129,130,131,77,25,132,133,28,134,135,32,136],"gh close issues","close","issues","at","release","reporter","scenario","closure","fixes","behavior","confirmation","landing",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":144,"publishedAt":36},"01M6CDJGR688JJVTG0A1ETBJGQ","gh-assign-issues","Use to assign GitHub issues to a milestone and\u002For owners in bulk, verifying each.","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fgh-assign-issues\u002FSKILL.md",[143],{"categoryNo":97,"categoryName":98,"taxonomyType":99,"taxonomyTypeDesc":100},[145,74,127,146,31,114,105,147,148,149],"gh assign issues","assign","bulk","github issues","owners",{"skillNo":151,"name":152,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":156,"publishedAt":36},"01M6CDJEBMKBAGTBG18N5YJNSE","feedback","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Ffeedback\u002FSKILL.md",[155],{"categoryNo":97,"categoryName":98,"taxonomyType":99,"taxonomyTypeDesc":100},[152],{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":164,"publishedAt":36},"01M6CDJBRQ86PP9XNXQMRB1CGX","cw-slice","Use before writing code for any Codewhale feature, upgrade, or refactor: find the existing owner of the behavior, bound the change to one reviewable slice, and fix the evidence bar before you start.","https:\u002F\u002Fgithub.com\u002Fcodewhale-hq\u002FCodewhale\u002Fblob\u002Fmain\u002Fdocs\u002Fskills\u002Fcw-slice\u002FSKILL.md",[163],{"categoryNo":97,"categoryName":98,"taxonomyType":99,"taxonomyTypeDesc":100},[165,166,167,168,169,170,171,172,173,28,174,134,72,175,84,31,176,177,87],"slice","cw slice","start","bar","you","Existing","upgrade","for","feature","refactor","change","writing","fix"]