[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C7GA0DN5D1K93RZGC2BZ40":3,"skill-same:01M6C7GA0DN5D1K93RZGC2BZ40":59},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":41,"repositoryHtmlUrl":42,"repositoryHomepageUrl":6,"ownerHtmlUrl":43,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":44,"install":45,"resources":58},"01M6C7GA0DN5D1K93RZGC2BZ40","work-gates",null,"Project-specific quality standards — MUST-FIX patterns, test rules, and code quality checks for this codebase. Supplements core task-work skill.","lepahc\u002Fkynetic-spec","lepahc","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F255431765?v=4","01M6C7E6Z0C8SE1X6PJ2F9Q1CX","01M6C7E744QKNYBVZ7KV7Z69GF",1,"MIT","https:\u002F\u002Fgithub.com\u002Flepahc\u002Fkynetic-spec\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwork-gates\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32],"work","work gates","test","code quality","core","code","quality","Rules","fix","standards","2026-11-10 10:12:30",false,"---\nname: work-gates\ndescription: Project-specific quality standards — MUST-FIX patterns, test rules,\n  and code quality checks for this codebase. Supplements core task-work skill.\n---\n\u003C!-- kspec-managed -->\n# Work Gates\n\nProject-specific quality standards for kspec. Supplements the core `$kspec-task-work` skill with MUST-FIX patterns, test rules, and code quality checks specific to this codebase.\n\n## MUST-FIX Patterns\n\nThe following are **always MUST-FIX** in this project — no exceptions, no downgrading:\n\n### Stubs and No-ops\n- `void` expressions, empty function bodies, TODO comments, placeholder returns where the spec requires real behavior\n- Any code path where the AC's core verb (parse, validate, output, persist, exit) is not actually executed\n\n### Test Integrity\n- Tests that verify implementation internals (compiled source strings, parser state, AST shape) rather than user-visible behavior\n- Tests that pass regardless of whether the feature works\n- Tests that mock the thing being tested — if the AC says \"CLI outputs JSON,\" mocking the output formatter proves nothing\n- Tests that claim AC coverage at the wrong abstraction layer (parser tests claiming CLI-level coverage)\n\n### Code Hygiene\n- Imports from unmerged branches — code depending on work not on main must be blocked or rebased\n- Hardcoded absolute paths — `\u002Fhome\u002Fuser\u002Fproject\u002F...` in any file\n- Test helpers exported from production code — test-only exports from `src\u002F` modules belong in `tests\u002F`\n- Bypassing Zod validation — creating parallel validation instead of using schemas in `src\u002Fschema\u002F`\n\n### Build and Verification Config\nAny change to tsconfig, oxlint\u002Foxfmt config, or vitest config that makes the pipeline report *fewer* problems:\n- Adding excludes\u002Fignores to suppress errors instead of fixing them\n- Loosening compiler strictness, disabling rules, skipping test suites\n- Modifying test sharding or timeouts to mask failures\n\n### Test Rewrites That Reduce Coverage\n- Replacement tests must be a **superset** of original coverage\n- Watch for: E2E tests replaced with unit tests, structural assertions replacing behavioral ones, test names describing old behavior with new assertions\n\n### Refactors\n- Refactored code must preserve all behavior including error handling, edge cases, and `Result\u003CT>` chains\n- Verify all call sites still get the same behavior after utility extraction\n\n## Test Strategy\n\n### E2E Preference\nPrefer end-to-end tests over unit tests in this project:\n\n```typescript\n\u002F\u002F Good: test the CLI as a user would\nit('should list tasks', async () => {\n  const result = await kspec(['task', 'list'], tempDir);\n  expect(result.exitCode).toBe(0);\n  expect(result.stdout).toContain('task-slug');\n});\n\n\u002F\u002F Less good: only unit testing internal functions\nit('should format task', () => {\n  const formatted = formatTask(mockTask);\n  expect(formatted).toBe('...');\n});\n```\n\nUnit tests are fine for complex logic, but E2E proves the feature works.\n\n### Test Isolation\nAll tests MUST run in temp directories, not the kspec repo:\n\n```typescript\nlet tempDir: string;\nbeforeEach(async () => {\n  tempDir = await createTempDir();\n  await initGitRepo(tempDir);\n  await setupTempFixtures(tempDir);\n});\n```\n\n### Test Helpers\nUse existing helpers — don't reinvent:\n- `testUlid()` \u002F `testUlids()` — valid test ULIDs (Crockford base32)\n- `setupTempFixtures()` — copy fixtures to temp dir\n- `createTempDir()` — empty temp dir\n- `initGitRepo(dir)` — git init with test config\n- `kspec(args, cwd)` — run CLI, return result\n- `kspecJson\u003CT>(args, cwd)` — run CLI with --json\n\n### Regression Check\n```bash\nnpm test  # Always run full suite — never just new tests\n```\n\n## Kynetic Quality Gate Commands\n\nThe shared `$kspec-task-work` skill defers to \"project-defined\" quality gates. In this repository those gates are:\n\n| Gate                          | Command                                |\n| ----------------------------- | -------------------------------------- |\n| Formatting                    | `npm run format:check`                 |\n| Repo-wide lint (hard gate)    | `npm run lint -- --quiet`              |\n| Focused changed-file lint     | `npx oxlint \u003Cchanged-ts-or-test-files>` |\n| Typecheck                     | `npm run typecheck`                    |\n| Test suite                    | `npm test` (or `npm run test:shard1\u002F2\u002F3` for faster dev runs) |\n| kspec reference validation    | `kspec validate --refs --warnings-ok`  |\n| kspec alignment validation    | `kspec validate --alignment --warnings-ok` |\n| kspec completeness validation | `kspec validate --completeness --warnings-ok` |\n\nRun every applicable gate before `kspec task submit`. Treat any red gate as in-scope task work — do not leave hygiene cleanup for plan closure.\n\nGate semantics:\n\n- `npm run format:check` — if it fails, run `npm run format`, commit the formatting changes, and rerun the check.\n- `npm run lint -- --quiet` — must report 0 errors. Repo-wide lint has a pre-existing warning baseline; that baseline is not your responsibility, but new warnings in your changed files are.\n- `npx oxlint \u003Cchanged files>` — inspect warnings as well as errors in changed TypeScript\u002Ftest files. New warnings in your diff are review findings even when the repo-wide gate passes.\n- `npm run typecheck` — required for any code change.\n- `npm test` — run the full suite for changes with broad or closure-risk impact; new tests alone are not sufficient evidence.\n\n## Generated Artifact Maintenance\n\nSeveral directories in this repository are regenerated outputs, not hand-edited sources. After modifying their inputs, regenerate and commit the output alongside the source change:\n\n| Input you changed                                                           | Regenerate with         | Output directory                                  |\n| --------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------- |\n| `templates\u002Fskills\u002F` (core skill sources) or `.kspec\u002Fskills\u002F` (local skills) | `kspec skill render`    | `.agents\u002Fskills\u002F` (codex\u002Fclaude), `.factory\u002Fskills\u002F` (droid) |\n| `templates\u002Fagents-sections\u002F`, conventions, workflows, agents, or meta       | `kspec agents generate` | `kspec-agents.md`                                 |\n| `templates\u002Fskills\u002F` core skill sources (rendered into the npm plugin)       | `npm run build:plugin`  | `plugin\u002Fplugins\u002Fkspec\u002Fskills\u002F`                    |\n\n`plugin\u002F` is gitignored by default; rebuild locally when verifying that core skill changes still render correctly into the plugin output. Rendered `.agents\u002Fskills\u002F` and `.factory\u002Fskills\u002F` outputs ARE committed and must stay in sync with their sources — `kspec skill verify` should report no drift for the skills you touched.\n\n## Code Quality\n\n- **Search for existing utilities** before creating new ones — kspec has extensive shared helpers\n- **Match neighboring file style** — naming, error handling, imports, `Result\u003CT>` patterns\n- **Schema validation** — Zod schemas in `src\u002Fschema\u002F` are the source of truth. Never bypass them.\n- **Shadow branch integrity** — extra scrutiny for changes touching `.kspec\u002F` state or worktree operations\n\n## Severity Default\n\n**Default to MUST-FIX.** Only downgrade to SUGGESTION for pure style preferences (naming, comment formatting) with zero correctness implications. If it touches behavior or correctness in any way, it is at minimum SHOULD-FIX.\n","\u003C!-- kspec-managed -->\n# Work Gates\n\nProject-specific quality standards for kspec. Supplements the core `$kspec-task-work` skill with MUST-FIX patterns, test rules, and code quality checks specific to this codebase.\n\n## MUST-FIX Patterns\n\nThe following are **always MUST-FIX** in this project — no exceptions, no downgrading:\n\n### Stubs and No-ops\n- `void` expressions, empty function bodies, TODO comments, placeholder returns where the spec requires real behavior\n- Any code path where the AC's core verb (parse, validate, output, persist, exit) is not actually executed\n\n### Test Integrity\n- Tests that verify implementation internals (compiled source strings, parser state, AST shape) rather than user-visible behavior\n- Tests that pass regardless of whether the feature works\n- Tests that mock the thing being tested — if the AC says \"CLI outputs JSON,\" mocking the output formatter proves nothing\n- Tests that claim AC coverage at the wrong abstraction layer (parser tests claiming CLI-level coverage)\n\n### Code Hygiene\n- Imports from unmerged branches — code depending on work not on main must be blocked or rebased\n- Hardcoded absolute paths — `\u002Fhome\u002Fuser\u002Fproject\u002F...` in any file\n- Test helpers exported from production code — test-only exports from `src\u002F` modules belong in `tests\u002F`\n- Bypassing Zod validation — creating parallel validation instead of using schemas in `src\u002Fschema\u002F`\n\n### Build and Verification Config\nAny change to tsconfig, oxlint\u002Foxfmt config, or vitest config that makes the pipeline report *fewer* problems:\n- Adding excludes\u002Fignores to suppress errors instead of fixing them\n- Loosening compiler strictness, disabling rules, skipping test suites\n- Modifying test sharding or timeouts to mask failures\n\n### Test Rewrites That Reduce Coverage\n- Replacement tests must be a **superset** of original coverage\n- Watch for: E2E tests replaced with unit tests, structural assertions replacing behavioral ones, test names describing old behavior with new assertions\n\n### Refactors\n- Refactored code must preserve all behavior including error handling, edge cases, and `Result\u003CT>` chains\n- Verify all call sites still get the same behavior after utility extraction\n\n## Test Strategy\n\n### E2E Preference\nPrefer end-to-end tests over unit tests in this project:\n\n```typescript\n\u002F\u002F Good: test the CLI as a user would\nit('should list tasks', async () => {\n  const result = await kspec(['task', 'list'], tempDir);\n  expect(result.exitCode).toBe(0);\n  expect(result.stdout).toContain('task-slug');\n});\n\n\u002F\u002F Less good: only unit testing internal functions\nit('should format task', () => {\n  const formatted = formatTask(mockTask);\n  expect(formatted).toBe('...');\n});\n```\n\nUnit tests are fine for complex logic, but E2E proves the feature works.\n\n### Test Isolation\nAll tests MUST run in temp directories, not the kspec repo:\n\n```typescript\nlet tempDir: string;\nbeforeEach(async () => {\n  tempDir = await createTempDir();\n  await initGitRepo(tempDir);\n  await setupTempFixtures(tempDir);\n});\n```\n\n### Test Helpers\nUse existing helpers — don't reinvent:\n- `testUlid()` \u002F `testUlids()` — valid test ULIDs (Crockford base32)\n- `setupTempFixtures()` — copy fixtures to temp dir\n- `createTempDir()` — empty temp dir\n- `initGitRepo(dir)` — git init with test config\n- `kspec(args, cwd)` — run CLI, return result\n- `kspecJson\u003CT>(args, cwd)` — run CLI with --json\n\n### Regression Check\n```bash\nnpm test  # Always run full suite — never just new tests\n```\n\n## Kynetic Quality Gate Commands\n\nThe shared `$kspec-task-work` skill defers to \"project-defined\" quality gates. In this repository those gates are:\n\n| Gate                          | Command                                |\n| ----------------------------- | -------------------------------------- |\n| Formatting                    | `npm run format:check`                 |\n| Repo-wide lint (hard gate)    | `npm run lint -- --quiet`              |\n| Focused changed-file lint     | `npx oxlint \u003Cchanged-ts-or-test-files>` |\n| Typecheck                     | `npm run typecheck`                    |\n| Test suite                    | `npm test` (or `npm run test:shard1\u002F2\u002F3` for faster dev runs) |\n| kspec reference validation    | `kspec validate --refs --warnings-ok`  |\n| kspec alignment validation    | `kspec validate --alignment --warnings-ok` |\n| kspec completeness validation | `kspec validate --completeness --warnings-ok` |\n\nRun every applicable gate before `kspec task submit`. Treat any red gate as in-scope task work — do not leave hygiene cleanup for plan closure.\n\nGate semantics:\n\n- `npm run format:check` — if it fails, run `npm run format`, commit the formatting changes, and rerun the check.\n- `npm run lint -- --quiet` — must report 0 errors. Repo-wide lint has a pre-existing warning baseline; that baseline is not your responsibility, but new warnings in your changed files are.\n- `npx oxlint \u003Cchanged files>` — inspect warnings as well as errors in changed TypeScript\u002Ftest files. New warnings in your diff are review findings even when the repo-wide gate passes.\n- `npm run typecheck` — required for any code change.\n- `npm test` — run the full suite for changes with broad or closure-risk impact; new tests alone are not sufficient evidence.\n\n## Generated Artifact Maintenance\n\nSeveral directories in this repository are regenerated outputs, not hand-edited sources. After modifying their inputs, regenerate and commit the output alongside the source change:\n\n| Input you changed                                                           | Regenerate with         | Output directory                                  |\n| --------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------- |\n| `templates\u002Fskills\u002F` (core skill sources) or `.kspec\u002Fskills\u002F` (local skills) | `kspec skill render`    | `.agents\u002Fskills\u002F` (codex\u002Fclaude), `.factory\u002Fskills\u002F` (droid) |\n| `templates\u002Fagents-sections\u002F`, conventions, workflows, agents, or meta       | `kspec agents generate` | `kspec-agents.md`                                 |\n| `templates\u002Fskills\u002F` core skill sources (rendered into the npm plugin)       | `npm run build:plugin`  | `plugin\u002Fplugins\u002Fkspec\u002Fskills\u002F`                    |\n\n`plugin\u002F` is gitignored by default; rebuild locally when verifying that core skill changes still render correctly into the plugin output. Rendered `.agents\u002Fskills\u002F` and `.factory\u002Fskills\u002F` outputs ARE committed and must stay in sync with their sources — `kspec skill verify` should report no drift for the skills you touched.\n\n## Code Quality\n\n- **Search for existing utilities** before creating new ones — kspec has extensive shared helpers\n- **Match neighboring file style** — naming, error handling, imports, `Result\u003CT>` patterns\n- **Schema validation** — Zod schemas in `src\u002Fschema\u002F` are the source of truth. Never bypass them.\n- **Shadow branch integrity** — extra scrutiny for changes touching `.kspec\u002F` state or worktree operations\n\n## Severity Default\n\n**Default to MUST-FIX.** Only downgrade to SUGGESTION for pure style preferences (naming, comment formatting) with zero correctness implications. If it touches behavior or correctness in any way, it is at minimum SHOULD-FIX.\n",{"name":5,"description":7},"main","c4b0de3035f8512bba7eb0a9b4e39ea2fbd3f08e",".agents\u002Fskills\u002Fwork-gates",2,"https:\u002F\u002Fgithub.com\u002Flepahc\u002Fkynetic-spec","https:\u002F\u002Fgithub.com\u002Flepahc","2026-07-22 18:57:40",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add lepahc\u002Fkynetic-spec --skill work-gates",{"tool":51,"command":52},"bunx","bunx skills add lepahc\u002Fkynetic-spec --skill work-gates",{"tool":54,"command":55},"pnpm","pnpm dlx skills add lepahc\u002Fkynetic-spec --skill work-gates","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flepahc\u002Fkynetic-spec\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwork-gates\u002FSKILL.md",true,[],[60,76,82,90,101,108],{"skillNo":61,"name":62,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":73,"publishedAt":33},"01M6C7KCZE43MDZ74FV3A5TDCQ","writing-specs","https:\u002F\u002Fgithub.com\u002Flepahc\u002Fkynetic-spec\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Fwriting-specs\u002FSKILL.md",[65,68],{"categoryNo":66,"categoryName":67,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":69,"categoryName":70,"taxonomyType":71,"taxonomyTypeDesc":72},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[74,75],"writing","writing specs",{"skillNo":77,"name":78,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":33},"01M6C7KAK9CBJ87PX3BCW7B7YG","triage","https:\u002F\u002Fgithub.com\u002Flepahc\u002Fkynetic-spec\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Ftriage\u002FSKILL.md",[],[78],{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":33},"01M6C7K89VN6FJCT8M86K56EE8","triage-inbox","https:\u002F\u002Fgithub.com\u002Flepahc\u002Fkynetic-spec\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Ftriage-inbox\u002FSKILL.md",[],[78,88,89],"inbox","triage inbox",{"skillNo":91,"name":92,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":98,"publishedAt":33},"01M6C7K6F2342AC1TJCN9PM0ZB","triage-automation","https:\u002F\u002Fgithub.com\u002Flepahc\u002Fkynetic-spec\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Ftriage-automation\u002FSKILL.md",[95],{"categoryNo":96,"categoryName":97,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[78,99,100],"automation","triage automation",{"skillNo":102,"name":103,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":33},"01M6C7K3TFQ88QQBW3PXYDHQG2","task-work","https:\u002F\u002Fgithub.com\u002Flepahc\u002Fkynetic-spec\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Ftask-work\u002FSKILL.md",[],[23,107],"task work",{"skillNo":109,"name":110,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":33},"01M6C7K168CH3XJCC3PDGA9H6C","review","https:\u002F\u002Fgithub.com\u002Flepahc\u002Fkynetic-spec\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Freview\u002FSKILL.md",[],[110]]