[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71K7N3ZY9FMMH3CSE1H8K5J":3,"skill-same:01M71K7N3ZY9FMMH3CSE1H8K5J":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":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":68},"01M71K7N3ZY9FMMH3CSE1H8K5J","test-gen",null,"Use when generating tests for untested code — happy path, edge cases, error handling","KeiSeiLab\u002FKeiSeiKit","KeiSeiLab","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F283315582?v=4","01M71K2EW81JRFHSGF0T844B32","KeiSei Lab","01M71K2EWXTB52KWC65E55S6M2",7,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FKeiSeiLab\u002FKeiSeiKit\u002Fblob\u002Fmain\u002Fskills\u002Ftest-gen\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"test gen","gen","test","error","target","for","true","tests","edge","use","when","file","code","error handling","name","path","2026-11-10 10:12:30",false,"---\nname: test-gen\ndescription: Use when generating tests for untested code — happy path, edge cases, error handling\narguments:\n  - name: target\n    description: File path or function name to test\n    required: true\n---\n\n## When to use\n\n- Generating unit tests for a specific function or file (happy path, edge cases, error handling).\n- Writing tests first (TDD) before implementing new functionality.\n- Use `\u002Ftest-gen` for per-function unit tests; use `\u002Ftest-matrix` for project-wide testing strategy.\n\n> **Complements `\u002Ftest-matrix`.** `\u002Ftest-gen` owns per-function unit tests\n> (happy \u002F edge \u002F error). `\u002Ftest-matrix` owns project-wide testing strategy\n> (fuzz \u002F property \u002F load \u002F e2e \u002F mutation) and CI wiring. Use `\u002Ftest-gen`\n> for a specific function, `\u002Ftest-matrix` at project kickoff or when\n> coverage gaps span paradigms. See `skills\u002Ftest-matrix\u002FSKILL.md`.\n\n# Test Generation Workflow\n\n## Step 1: Analyze Target\n- Read the target file\u002Ffunction completely\n- Identify: inputs, outputs, side effects, dependencies, error paths\n- Check existing test files — don't duplicate\n\n## Step 2: Detect Framework\n- Auto-detect test framework from project:\n  - Python: pytest (conftest.py, pytest.ini) or unittest\n  - JS\u002FTS: jest (jest.config), vitest (vitest.config), mocha\n  - Flutter: flutter_test\n  - Go: built-in testing\n- Match existing test file naming: `test_*.py`, `*.test.ts`, `*_test.dart`, `*_test.go`\n\n## Step 3: Plan Test Cases\nCategories (in order of priority):\n1. **Happy path** — normal expected usage (2-3 cases)\n2. **Edge cases** — boundaries, empty inputs, max values (2-3 cases)\n3. **Error handling** — invalid inputs, missing data, network errors (1-2 cases)\n4. **Integration** — only if function interacts with external services (1 case with mock)\n\n## Step 4: Write Tests\n- Follow existing test patterns in the project\n- Use descriptive test names: `test_\u003Cfunction>_\u003Cscenario>_\u003Cexpected>`\n- One assertion per test (prefer)\n- Mock external dependencies, not internal logic\n- Use fixtures\u002Ffactories from existing test infrastructure\n\n## Step 5: Run & Verify\n- Run new tests — all must pass\n- Run full test suite — no regressions\n- Check coverage delta if coverage tool available\n\n## Step 6: Commit\n- `test: add tests for \u003Ctarget>`\n","## When to use\n\n- Generating unit tests for a specific function or file (happy path, edge cases, error handling).\n- Writing tests first (TDD) before implementing new functionality.\n- Use `\u002Ftest-gen` for per-function unit tests; use `\u002Ftest-matrix` for project-wide testing strategy.\n\n> **Complements `\u002Ftest-matrix`.** `\u002Ftest-gen` owns per-function unit tests\n> (happy \u002F edge \u002F error). `\u002Ftest-matrix` owns project-wide testing strategy\n> (fuzz \u002F property \u002F load \u002F e2e \u002F mutation) and CI wiring. Use `\u002Ftest-gen`\n> for a specific function, `\u002Ftest-matrix` at project kickoff or when\n> coverage gaps span paradigms. See `skills\u002Ftest-matrix\u002FSKILL.md`.\n\n# Test Generation Workflow\n\n## Step 1: Analyze Target\n- Read the target file\u002Ffunction completely\n- Identify: inputs, outputs, side effects, dependencies, error paths\n- Check existing test files — don't duplicate\n\n## Step 2: Detect Framework\n- Auto-detect test framework from project:\n  - Python: pytest (conftest.py, pytest.ini) or unittest\n  - JS\u002FTS: jest (jest.config), vitest (vitest.config), mocha\n  - Flutter: flutter_test\n  - Go: built-in testing\n- Match existing test file naming: `test_*.py`, `*.test.ts`, `*_test.dart`, `*_test.go`\n\n## Step 3: Plan Test Cases\nCategories (in order of priority):\n1. **Happy path** — normal expected usage (2-3 cases)\n2. **Edge cases** — boundaries, empty inputs, max values (2-3 cases)\n3. **Error handling** — invalid inputs, missing data, network errors (1-2 cases)\n4. **Integration** — only if function interacts with external services (1 case with mock)\n\n## Step 4: Write Tests\n- Follow existing test patterns in the project\n- Use descriptive test names: `test_\u003Cfunction>_\u003Cscenario>_\u003Cexpected>`\n- One assertion per test (prefer)\n- Mock external dependencies, not internal logic\n- Use fixtures\u002Ffactories from existing test infrastructure\n\n## Step 5: Run & Verify\n- Run new tests — all must pass\n- Run full test suite — no regressions\n- Check coverage delta if coverage tool available\n\n## Step 6: Commit\n- `test: add tests for \u003Ctarget>`\n",{"name":5,"arguments":45,"description":7},[46],{"name":28,"required":47,"description":48},true,"File path or function name to test","main","32e85218a997294f68da27ff3dfd638196186ae5","skills\u002Ftest-gen",8,"https:\u002F\u002Fgithub.com\u002FKeiSeiLab\u002FKeiSeiKit","https:\u002F\u002Fgithub.com\u002FKeiSeiLab","2026-10-11 11:17:46",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":47},[58,61,64],{"tool":59,"command":60},"npx","npx skills add KeiSeiLab\u002FKeiSeiKit --skill test-gen",{"tool":62,"command":63},"bunx","bunx skills add KeiSeiLab\u002FKeiSeiKit --skill test-gen",{"tool":65,"command":66},"pnpm","pnpm dlx skills add KeiSeiLab\u002FKeiSeiKit --skill test-gen","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FKeiSeiLab\u002FKeiSeiKit\u002Fblob\u002Fmain\u002Fskills\u002Ftest-gen\u002FSKILL.md",[],[70,100,124,157,182,204],{"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":79,"publishedAt":40},"01M71K887N78V089XR5BWT0JAV","wave-audit","3-wave parallel audit — Wave 1 discovery (4 agents), Wave 2 verification (4 agents), Wave 3 cross-optimization (1 synthesizer). Each wave runs agents in parallel. Combines security review, runtime analysis, quality check, and constructor pattern into one unified workflow with evidence grading and Go\u002FNo-Go verdict.","https:\u002F\u002Fgithub.com\u002FKeiSeiLab\u002FKeiSeiKit\u002Fblob\u002Fmain\u002Fskills\u002Fwave-audit\u002FSKILL.md",[76],{"categoryNo":77,"categoryName":78,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99],"wave audit","audit","unified workflow","workflow","analysis","review","verification","security review","pattern","grading","go","security","parallel","evidence","runtime","quality check","discovery","Optimization","one","check",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":40},"01M71K85100JQS4Y10EGCTWQXW","vm-provision","End-to-end VPS provisioning — select provider → plan → provision → harden → verify (ssh-check + firewall-diff hard-gate) → handoff. 6 phases, ≥6 AskUserQuestion calls, defensive-only. Stops if either verification primitive fails.","https:\u002F\u002Fgithub.com\u002FKeiSeiLab\u002FKeiSeiKit\u002Fblob\u002Fmain\u002Fskills\u002Fvm-provision\u002FSKILL.md",[],[107,108,109,110,111,112,113,114,115,116,98,117,118,99,86,119,120,121,122,123],"vm","vm provision","firewall","diff","provider","select","end","calls","only","either","api","hetzner","plan","defensive","verify","intent","line",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":128,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":139,"publishedAt":40},"01M71K80ZRH2H5ES83QS97BB91","visual-explainer","Generate beautiful, self-contained HTML pages that visually explain systems, code changes, plans, and data. Use when the user asks for a diagram, architecture overview, diff review, plan review, project recap, comparison table, or any visual explanation of technical concepts. Also use proactively when you are about to render a complex ASCII table (4+ rows or 3+ columns) — present it as a styled HTML page instead.","MIT","https:\u002F\u002Fgithub.com\u002FKeiSeiLab\u002FKeiSeiKit\u002Fblob\u002Fmain\u002Fskills\u002Fvisual-explainer\u002FSKILL.md",[131,134],{"categoryNo":132,"categoryName":133,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":135,"categoryName":136,"taxonomyType":137,"taxonomyTypeDesc":138},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[140,141,142,143,144,145,146,147,119,148,149,150,151,152,153,29,154,155,156,33],"visual","visual explainer","explainer","project","files","image","you","architecture","generate","present","concepts","table","as","view","ascii table","ascii","surf",{"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":166,"publishedAt":40},"01M71K7VSD5ZWN26QJEC4T0770","video-gen","Use when generating video from frame sequences — FFmpeg extraction, WebP\u002FAVIF conversion, sprite sheets, scroll-synced playback, video encoding\u002Ftranscoding. Covers the full pipeline from video source to web-ready frame sequence or optimized video.","https:\u002F\u002Fgithub.com\u002FKeiSeiLab\u002FKeiSeiKit\u002Fblob\u002Fmain\u002Fskills\u002Fvideo-gen\u002FSKILL.md",[163],{"categoryNo":164,"categoryName":165,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[167,25,168,169,170,171,172,173,174,34,145,175,176,177,178,179,180,39,181,28],"Video","video gen","ready","pipeline","default","generated","synced","false","conversion","directory","sequences","sequence","source","full","webp",{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":189,"publishedAt":40},"01M71K7R88RM8ENVCRZHZSMM5T","test-matrix","Use when a project needs testing BEYOND unit tests — fuzzing, property-based, load, E2E, or mutation. Five-phase hub-and-spoke pipeline composes the right mix per language × critical path × CI target, scaffolds configs + corpus + fixtures, wires CI jobs, and defines the crash\u002Fregression triage workflow. Pure-click: every decision except intake is an AskUserQuestion.","https:\u002F\u002Fgithub.com\u002FKeiSeiLab\u002FKeiSeiKit\u002Fblob\u002Fmain\u002Fskills\u002Ftest-matrix\u002FSKILL.md",[188],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[26,190,191,192,28,193,143,194,170,195,196,197,198,199,31,200,201,33,202,203],"matrix","test matrix","unit","click","regression","mix","intake","testing","decision","ci","e2e","mutation","load","fuzzing",{"skillNo":205,"name":206,"nameZh":6,"description":207,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":208,"categories":209,"keywords":211,"publishedAt":40},"01M71K7JZ57GFDT6PA0H1Z1X84","spawn-agent","Prepare a composed Agent-tool invocation via kei-spawn. Click-only wizard — pick role, describe task, set scope. Emits ready-to-paste prompt + subagent_type + isolation + DNA.","https:\u002F\u002Fgithub.com\u002FKeiSeiLab\u002FKeiSeiKit\u002Fblob\u002Fmain\u002Fskills\u002Fspawn-agent\u002FSKILL.md",[210],{"categoryNo":77,"categoryName":78,"taxonomyType":21,"taxonomyTypeDesc":22},[212,213,214,169,193,215,216,217,218,115,219,220,221,222,223,224,225,226,227,228],"spawn agent","spawn","SET","scope","tool","pick","wizard","prompt","subagent","task","type","DNA","via","paste","describe","role","prepare"]