[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ADMGXR024XF79REBWYXS6K":3,"skill-same:01M6ADMGXR024XF79REBWYXS6K":69},{"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":23,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":44,"ownerHtmlUrl":45,"ownerBlogUrl":46,"ownerDescription":47,"updatedAt":48,"install":49,"resources":62},"01M6ADMGXR024XF79REBWYXS6K","test-coverage-check",null,"Check whether changed source files have corresponding test files. Use for code quality review before merging a PR, or when asked whether new code has tests.","davila7\u002Fclaude-with-skills","davila7","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6216945?v=4","01M6ADEWWFPS191NFM0Y1EX1JH","Daniel Avila","01M6ADJHY7XW1NT6J5EJ61Q42B",13,"MIT","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-with-skills\u002Fblob\u002Fmain\u002Fsrc\u002Fcontent\u002Fdocs\u002F03-advanced\u002Fcapstone\u002Fsolution\u002F.claude\u002Fskills\u002Ftest-coverage-check\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[24,25,26,27,28,29,30],"test","test coverage check","review","code quality","pr","code","git","2026-11-10 10:12:30",false,"---\ntitle: \"test-coverage-check\"\nname: test-coverage-check\ndescription: Check whether changed source files have corresponding test files. Use for code quality review before merging a PR, or when asked whether new code has tests.\ncontext: fork\nagent: Explore\nallowed-tools: Grep Glob Read Bash(git diff *) Bash(find *)\n---\n\nCheck whether changed source files have test coverage.\n\n## Changed source files\n\n!`git diff --name-only HEAD~1 2>\u002Fdev\u002Fnull || git diff --name-only origin\u002Fmain...HEAD 2>\u002Fdev\u002Fnull || echo \"none\"`\n\nFilter the list above to source files only. Exclude:\n- Files already in test directories (`test\u002F`, `spec\u002F`, `__tests__\u002F`, `tests\u002F`)\n- Files with `.test.`, `.spec.` in the name\n- Non-source files: `.md`, `.json`, `.yaml`, `.yml`, `.lock`, `.txt`, `.env`, `.gitignore`\n- Configuration files: `*.config.ts`, `*.config.js`, `vite.config.*`, `jest.config.*`\n\nIf the output was \"none\" or after filtering there are no source files, output: `COVERAGE FINDINGS: none — no changed source files detected`\n\n## Check each source file\n\nFor each changed source file, derive candidate test file paths using these conventions:\n\nGiven source file `src\u002Futils\u002Fparser.ts`, check for:\n1. `src\u002Futils\u002Fparser.test.ts`\n2. `src\u002Futils\u002Fparser.spec.ts`\n3. `src\u002Futils\u002F__tests__\u002Fparser.ts`\n4. `src\u002Futils\u002F__tests__\u002Fparser.test.ts`\n5. `tests\u002Futils\u002Fparser.test.ts`\n6. `tests\u002Futils\u002Fparser.spec.ts`\n7. `test\u002Futils\u002Fparser.test.ts`\n8. `test\u002Futils\u002Fparser.spec.ts`\n\nApply the same pattern for `.py`, `.js`, `.jsx`, `.tsx`, `.go`, `.rb` files, substituting the appropriate test file extension:\n- Python: `_test.py` or `test_\u003Cname>.py`\n- JavaScript\u002FTypeScript: `.test.js`, `.spec.js`, `.test.ts`, `.spec.ts`\n- Go: `_test.go` in the same directory\n- Ruby: `_spec.rb` in `spec\u002F`\n\nUse Glob to check whether any of the candidate paths exist.\n\nIf a test file is found, use Grep to check whether it imports or requires the source file, or references the source file's name. If no import is found, mark as \"test file exists but may not cover new changes\".\n\n## Output format\n\nOutput exactly:\n\n```\nCOVERAGE FINDINGS:\n- \u003Csource-file> — no test file found\n- \u003Csource-file> — test file exists but may not cover new changes\n```\n\nExamples:\n```\nCOVERAGE FINDINGS:\n- src\u002Fauth\u002FloginHandler.ts — no test file found\n- src\u002Futils\u002FformatDate.ts — test file exists but may not cover new changes\n```\n\nIf all changed source files have test files that reference them: output exactly `COVERAGE FINDINGS: none`\n\nDo not add any prose before or after the findings block.\n","Check whether changed source files have test coverage.\n\n## Changed source files\n\n!`git diff --name-only HEAD~1 2>\u002Fdev\u002Fnull || git diff --name-only origin\u002Fmain...HEAD 2>\u002Fdev\u002Fnull || echo \"none\"`\n\nFilter the list above to source files only. Exclude:\n- Files already in test directories (`test\u002F`, `spec\u002F`, `__tests__\u002F`, `tests\u002F`)\n- Files with `.test.`, `.spec.` in the name\n- Non-source files: `.md`, `.json`, `.yaml`, `.yml`, `.lock`, `.txt`, `.env`, `.gitignore`\n- Configuration files: `*.config.ts`, `*.config.js`, `vite.config.*`, `jest.config.*`\n\nIf the output was \"none\" or after filtering there are no source files, output: `COVERAGE FINDINGS: none — no changed source files detected`\n\n## Check each source file\n\nFor each changed source file, derive candidate test file paths using these conventions:\n\nGiven source file `src\u002Futils\u002Fparser.ts`, check for:\n1. `src\u002Futils\u002Fparser.test.ts`\n2. `src\u002Futils\u002Fparser.spec.ts`\n3. `src\u002Futils\u002F__tests__\u002Fparser.ts`\n4. `src\u002Futils\u002F__tests__\u002Fparser.test.ts`\n5. `tests\u002Futils\u002Fparser.test.ts`\n6. `tests\u002Futils\u002Fparser.spec.ts`\n7. `test\u002Futils\u002Fparser.test.ts`\n8. `test\u002Futils\u002Fparser.spec.ts`\n\nApply the same pattern for `.py`, `.js`, `.jsx`, `.tsx`, `.go`, `.rb` files, substituting the appropriate test file extension:\n- Python: `_test.py` or `test_\u003Cname>.py`\n- JavaScript\u002FTypeScript: `.test.js`, `.spec.js`, `.test.ts`, `.spec.ts`\n- Go: `_test.go` in the same directory\n- Ruby: `_spec.rb` in `spec\u002F`\n\nUse Glob to check whether any of the candidate paths exist.\n\nIf a test file is found, use Grep to check whether it imports or requires the source file, or references the source file's name. If no import is found, mark as \"test file exists but may not cover new changes\".\n\n## Output format\n\nOutput exactly:\n\n```\nCOVERAGE FINDINGS:\n- \u003Csource-file> — no test file found\n- \u003Csource-file> — test file exists but may not cover new changes\n```\n\nExamples:\n```\nCOVERAGE FINDINGS:\n- src\u002Fauth\u002FloginHandler.ts — no test file found\n- src\u002Futils\u002FformatDate.ts — test file exists but may not cover new changes\n```\n\nIf all changed source files have test files that reference them: output exactly `COVERAGE FINDINGS: none`\n\nDo not add any prose before or after the findings block.\n",{"name":5,"agent":36,"title":5,"context":37,"description":7,"allowed-tools":38},"Explore","fork","Grep Glob Read Bash(git diff *) Bash(find *)","main","55e6468ba43345d07c8a68de983e58403db57c25","src\u002Fcontent\u002Fdocs\u002F03-advanced\u002Fcapstone\u002Fsolution\u002F.claude\u002Fskills\u002Ftest-coverage-check",1,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-with-skills","https:\u002F\u002Fclaude-with-skills.vercel.app","https:\u002F\u002Fgithub.com\u002Fdavila7","https:\u002F\u002Fdanielavila.me","Building AI dev tools with LLMs","2026-05-15 21:54:25",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add davila7\u002Fclaude-with-skills --skill test-coverage-check",{"tool":55,"command":56},"bunx","bunx skills add davila7\u002Fclaude-with-skills --skill test-coverage-check",{"tool":58,"command":59},"pnpm","pnpm dlx skills add davila7\u002Fclaude-with-skills --skill test-coverage-check","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-with-skills\u002Fblob\u002Fmain\u002Fsrc\u002Fcontent\u002Fdocs\u002F03-advanced\u002Fcapstone\u002Fsolution\u002F.claude\u002Fskills\u002Ftest-coverage-check\u002FSKILL.md",true,[63],{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},"agents\u002Fopenai.yaml","REFERENCE","参考文档",160,"https:\u002F\u002Fgithub.com\u002FHasarAli\u002Fdotfiles\u002Fblob\u002Fmain\u002Fdot-agents\u002Fskills\u002Foffer-alternatives\u002Fagents\u002Fopenai.yaml",[70,85,96,102,110,119],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":31},"01M6ADNEC991ZW0GD2D4MY6NEP","tag-version","Bump the package version and create an annotated git tag. Accepts a semantic version number (1.2.0) or a bump type (patch, minor, major). Does not push — use the publish skill to push. Use as part of a release workflow.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-with-skills\u002Fblob\u002Fmain\u002Fsrc\u002Fcontent\u002Fdocs\u002F03-advanced\u002Flesson-08-plugins-and-distribution\u002Fexamples\u002Frelease-plugin\u002Fskills\u002Ftag-version\u002FSKILL.md",[],[77,78,79,80,30,81,82,83,84],"tag version","workflow","create","release","push","npm","package","publish",{"skillNo":86,"name":80,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":31},"01M6ADNCNHCXNHVAW43ZV43ZC8","Run the complete release workflow: changelog entry, version bump, git tag, and GitHub release. Invokes changelog-entry, tag-version, and publish in sequence. Use when releasing a new version of the project.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-with-skills\u002Fblob\u002Fmain\u002Fsrc\u002Fcontent\u002Fdocs\u002F03-advanced\u002Flesson-08-plugins-and-distribution\u002Fexamples\u002Frelease-plugin\u002Fskills\u002Frelease\u002FSKILL.md",[],[80,30,91,82,92,93,84,94,95,78],"changelog","changelog entry","run","status","github",{"skillNo":97,"name":84,"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":31},"01M6ADNAWDDDDX4CS69E1D496X","Push the current branch and all tags to origin, then create a GitHub release using the latest tag and its CHANGELOG.md entry. Use after tag-version to complete a release.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-with-skills\u002Fblob\u002Fmain\u002Fsrc\u002Fcontent\u002Fdocs\u002F03-advanced\u002Flesson-08-plugins-and-distribution\u002Fexamples\u002Frelease-plugin\u002Fskills\u002Fpublish\u002FSKILL.md",[],[84,81,95,79,80,30,91],{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":31},"01M6ADN9MP0ASQ6SX14NEPP5XE","changelog-entry","Draft the changelog entry for all unreleased commits in Keep a Changelog format. Groups commits into Added, Changed, Fixed, Removed, and Security. Use before releasing a new version or when updating CHANGELOG.md.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-with-skills\u002Fblob\u002Fmain\u002Fsrc\u002Fcontent\u002Fdocs\u002F03-advanced\u002Flesson-08-plugins-and-distribution\u002Fexamples\u002Frelease-plugin\u002Fskills\u002Fchangelog-entry\u002FSKILL.md",[],[92,91,109,30],"security",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":31},"01M6ADN8243TD9X8FH7FCQ608R","auto-format-on-edit","Automatically format code files after every edit using Prettier and ESLint. Active in the background whenever Claude edits a file. Formatting is silent — no prompts, no output unless a formatter fails. Use when you want consistent formatting enforced automatically during a coding session.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-with-skills\u002Fblob\u002Fmain\u002Fsrc\u002Fcontent\u002Fdocs\u002F03-advanced\u002Flesson-07-hooks-in-skills\u002Fexamples\u002Fauto-format-on-edit\u002FSKILL.md",[],[117,29,118],"auto format on edit","file",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":130,"publishedAt":31},"01M6ADN5VVNV7Y2WPYQA13M4ZQ","code-quality-audit","Run a comprehensive code quality audit covering security, performance, and maintainability. Use for quarterly audits, pre-release reviews, or when onboarding to a large codebase.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-with-skills\u002Fblob\u002Fmain\u002Fsrc\u002Fcontent\u002Fdocs\u002F03-advanced\u002Flesson-06-context-window-mastery\u002Fexamples\u002Flightweight-orchestrator\u002FSKILL.md",[125],{"categoryNo":126,"categoryName":127,"taxonomyType":128,"taxonomyTypeDesc":129},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[131,132,29,27,133,93,80,134,109],"code quality audit","audit","performance","onboarding"]