[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71F05HSD5HS059X5ARYV76Q":3,"skill-same:01M71F05HSD5HS059X5ARYV76Q":77},{"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":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":6,"ownerHtmlUrl":61,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":62,"install":63,"resources":76},"01M71F05HSD5HS059X5ARYV76Q","dogfood-verification-isolation",null,"Keeps product code changes and this repo's own dogfooded project state separate when using the in-progress CLI to smoke-test itself inside a worktree. Trigger: before running `ai-specs sync`\u002F`init`\u002F`doctor`\u002F`refresh-bundled` against this repo's own `ai-specs\u002F` project as a live verification step, and before staging\u002Fcommitting anything afterward.","parada1104\u002Fai-specs-cli","parada1104","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F57575053?v=4","01M71EZZV71KAFZKJ47FQ99ZVS","01M71EZZW7JJBY2VAWA5HRD944",0,"MIT","https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Fai-specs\u002Fskills\u002Fdogfood-verification-isolation\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"dogfood verification isolation","verification","isolation","dogfood","test","refresh","state","smoke test","commit","code","when","init","trigger","repo","project","smoke","project state","as","doctor","running","2026-11-10 10:12:30",false,"---\nname: dogfood-verification-isolation\ndescription: >\n  Keeps product code changes and this repo's own dogfooded project state\n  separate when using the in-progress CLI to smoke-test itself inside a\n  worktree.\n  Trigger: before running `ai-specs sync`\u002F`init`\u002F`doctor`\u002F`refresh-bundled`\n  against this repo's own `ai-specs\u002F` project as a live verification step,\n  and before staging\u002Fcommitting anything afterward.\nlicense: MIT\nmetadata:\n  author: parada1104\n  version: \"1.0\"\n  scope: [root]\n  auto_invoke:\n    - \"Verifying an ai-specs CLI change by running it against this repo's own dogfood project\"\n    - \"Deciding what to commit after a live sync\u002Fdoctor smoke test in a worktree\"\n---\n\n# Dogfood Verification Isolation\n\n## Purpose\n\nThis repo is two things at once:\n\n- **The product**: `lib\u002F`, `bin\u002Fai-specs`, `catalog\u002F`, `bundled-skills\u002F`,\n  `bundled-commands\u002F`, `tests\u002F`, `openspec\u002F` — the CLI's own source code.\n- **A project**: `ai-specs\u002Fai-specs.toml`, `ai-specs\u002F.ai-specs.lock`,\n  `ai-specs\u002Fcommands\u002F`, `ai-specs\u002Fskills\u002F` (local ones), `AGENTS.md`, and every\n  gitignored generated agent config (`.claude\u002F`, `.cursor\u002F`, `.opencode\u002F`,\n  `.omp\u002F`, `.mcp.json`, `CLAUDE.md`, `cache\u002F`) — this repo dogfooding the CLI\n  on itself, same as any consumer project would.\n\nRunning the in-progress (unreleased) CLI from a worktree against this repo's\nown dogfooded `ai-specs\u002F` project is a legitimate, valuable smoke test — real\nlegacy state beats synthetic fixtures. But its OUTPUT is verification\nevidence, not a deliverable of the change.\n\n## The rule\n\n- **Product changes** — anything you wrote by hand under `lib\u002F`, `bin\u002F`,\n  `tests\u002F`, `catalog\u002F`, `bundled-skills\u002F`, `bundled-commands\u002F`, `openspec\u002F` —\n  belong in the feature branch. Commit them.\n- **Project-state changes** — anything the CLI itself generates or mutates by\n  running `sync`\u002F`init`\u002F`doctor`\u002F`refresh-bundled` against `ai-specs\u002F` (the\n  lock, bundled-managed files under `ai-specs\u002Fcommands\u002F`, `AGENTS.md`, any\n  agent-config output) — are the OUTPUT of *using* the product, not of\n  *building* it. They must NOT be committed as part of the feature branch,\n  even when the run is real, the behavior is exactly as expected, and it\n  would make a nice piece of evidence to point at.\n- This repo's own dogfood migration to new CLI behavior happens later, as its\n  own ordinary, unrelated act: once the feature is released, a real\n  `ai-specs sync` run against the merged code produces that state change, and\n  it gets committed on its own terms — never smuggled into the feature PR\n  that built the capability.\n\n## How to verify safely inside a worktree\n\n1. Do all live testing inside the change's dedicated worktree\n   (`.worktrees\u002F\u003Cchange>\u002F`) — never in the canonical `development` checkout.\n2. Before running the CLI as a smoke test (`.\u002Fbin\u002Fai-specs sync .`,\n   `doctor .`, etc.) against the worktree's own dogfooded `ai-specs\u002F` project,\n   confirm `git status --short` is clean.\n3. Run the command. Quote the terminal output as verification evidence —\n   citing it in `verify-report.md` is exactly the right use of a live run.\n4. Run `git status --short` again. Anything now showing is project-state\n   output, not something you authored.\n5. Revert every one of those files (`git checkout -- \u003Cpath>` \u002F\n   `git restore \u003Cpath>`) before staging or committing anything else. Confirm\n   `git status --short` is clean again.\n6. Only `git add`\u002F`git commit` files you deliberately wrote as part of the\n   product change.\n\n## The one blind spot: AGENTS.md\n\nMost generated project output is gitignored (`.claude\u002F`, `.cursor\u002F`,\n`.opencode\u002F`, `.omp\u002F`, `.mcp.json`, `opencode.json`, `CLAUDE.md`, `cache\u002F`) —\nstructurally impossible to leak into a commit. `AGENTS.md` is the exception:\nit is a generated file that IS tracked in git by design (so a fresh clone has\na usable brief without running sync first). If a product change alters what\n`agents-render.py` produces, a verification sync run will regenerate it, and\nit becomes commit-eligible like any other tracked file. Always\n`git diff -- AGENTS.md` after a verification run before staging anything,\neven when you don't expect it to have changed.\n\n## Anti-pattern (do not repeat)\n\nTreating \"the sync ran and produced the expected file changes\" as proof those\nchanges belong in the PR. Verification success and shipping eligibility are\nseparate questions. A passing smoke test earns a citation of its output in\n`verify-report.md` — never a commit of its side effects.\n","# Dogfood Verification Isolation\n\n## Purpose\n\nThis repo is two things at once:\n\n- **The product**: `lib\u002F`, `bin\u002Fai-specs`, `catalog\u002F`, `bundled-skills\u002F`,\n  `bundled-commands\u002F`, `tests\u002F`, `openspec\u002F` — the CLI's own source code.\n- **A project**: `ai-specs\u002Fai-specs.toml`, `ai-specs\u002F.ai-specs.lock`,\n  `ai-specs\u002Fcommands\u002F`, `ai-specs\u002Fskills\u002F` (local ones), `AGENTS.md`, and every\n  gitignored generated agent config (`.claude\u002F`, `.cursor\u002F`, `.opencode\u002F`,\n  `.omp\u002F`, `.mcp.json`, `CLAUDE.md`, `cache\u002F`) — this repo dogfooding the CLI\n  on itself, same as any consumer project would.\n\nRunning the in-progress (unreleased) CLI from a worktree against this repo's\nown dogfooded `ai-specs\u002F` project is a legitimate, valuable smoke test — real\nlegacy state beats synthetic fixtures. But its OUTPUT is verification\nevidence, not a deliverable of the change.\n\n## The rule\n\n- **Product changes** — anything you wrote by hand under `lib\u002F`, `bin\u002F`,\n  `tests\u002F`, `catalog\u002F`, `bundled-skills\u002F`, `bundled-commands\u002F`, `openspec\u002F` —\n  belong in the feature branch. Commit them.\n- **Project-state changes** — anything the CLI itself generates or mutates by\n  running `sync`\u002F`init`\u002F`doctor`\u002F`refresh-bundled` against `ai-specs\u002F` (the\n  lock, bundled-managed files under `ai-specs\u002Fcommands\u002F`, `AGENTS.md`, any\n  agent-config output) — are the OUTPUT of *using* the product, not of\n  *building* it. They must NOT be committed as part of the feature branch,\n  even when the run is real, the behavior is exactly as expected, and it\n  would make a nice piece of evidence to point at.\n- This repo's own dogfood migration to new CLI behavior happens later, as its\n  own ordinary, unrelated act: once the feature is released, a real\n  `ai-specs sync` run against the merged code produces that state change, and\n  it gets committed on its own terms — never smuggled into the feature PR\n  that built the capability.\n\n## How to verify safely inside a worktree\n\n1. Do all live testing inside the change's dedicated worktree\n   (`.worktrees\u002F\u003Cchange>\u002F`) — never in the canonical `development` checkout.\n2. Before running the CLI as a smoke test (`.\u002Fbin\u002Fai-specs sync .`,\n   `doctor .`, etc.) against the worktree's own dogfooded `ai-specs\u002F` project,\n   confirm `git status --short` is clean.\n3. Run the command. Quote the terminal output as verification evidence —\n   citing it in `verify-report.md` is exactly the right use of a live run.\n4. Run `git status --short` again. Anything now showing is project-state\n   output, not something you authored.\n5. Revert every one of those files (`git checkout -- \u003Cpath>` \u002F\n   `git restore \u003Cpath>`) before staging or committing anything else. Confirm\n   `git status --short` is clean again.\n6. Only `git add`\u002F`git commit` files you deliberately wrote as part of the\n   product change.\n\n## The one blind spot: AGENTS.md\n\nMost generated project output is gitignored (`.claude\u002F`, `.cursor\u002F`,\n`.opencode\u002F`, `.omp\u002F`, `.mcp.json`, `opencode.json`, `CLAUDE.md`, `cache\u002F`) —\nstructurally impossible to leak into a commit. `AGENTS.md` is the exception:\nit is a generated file that IS tracked in git by design (so a fresh clone has\na usable brief without running sync first). If a product change alters what\n`agents-render.py` produces, a verification sync run will regenerate it, and\nit becomes commit-eligible like any other tracked file. Always\n`git diff -- AGENTS.md` after a verification run before staging anything,\neven when you don't expect it to have changed.\n\n## Anti-pattern (do not repeat)\n\nTreating \"the sync ran and produced the expected file changes\" as proof those\nchanges belong in the PR. Verification success and shipping eligibility are\nseparate questions. A passing smoke test earns a citation of its output in\n`verify-report.md` — never a commit of its side effects.\n",{"name":5,"license":14,"metadata":48,"description":55},{"scope":49,"author":9,"version":51,"auto_invoke":52},[50],"root","1.0",[53,54],"Verifying an ai-specs CLI change by running it against this repo's own dogfood project","Deciding what to commit after a live sync\u002Fdoctor smoke test in a worktree","Keeps product code changes and this repo's own dogfooded project state separate when using the in-progress CLI to smoke-test itself inside a worktree. Trigger: before running `ai-specs sync`\u002F`init`\u002F`doctor`\u002F`refresh-bundled` against this repo's own `ai-specs\u002F` project as a live verification step, and before staging\u002Fcommitting anything afterward.\n","main","c092fc1f51280350a4434827e2f6d6d99e3431ca","ai-specs\u002Fskills\u002Fdogfood-verification-isolation",2,"https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli","https:\u002F\u002Fgithub.com\u002Fparada1104","2026-11-08 05:20:31",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add parada1104\u002Fai-specs-cli --skill dogfood-verification-isolation",{"tool":69,"command":70},"bunx","bunx skills add parada1104\u002Fai-specs-cli --skill dogfood-verification-isolation",{"tool":72,"command":73},"pnpm","pnpm dlx skills add parada1104\u002Fai-specs-cli --skill dogfood-verification-isolation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Fai-specs\u002Fskills\u002Fdogfood-verification-isolation\u002FSKILL.md",true,[],[78,94,108,117,126,139],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":88,"publishedAt":43},"01M71F2TF9TS9DNCJ68M7C3B5S","test-skill","Test skill for fixture purposes.","https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Frecipes\u002Ftest-fixture\u002Fskills\u002Ftest-skill\u002FSKILL.md",[84,85],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":86,"categoryName":87,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[89,27,90,50,91,92,93],"Test Skill","for","fixtures","fixture","testing",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":103,"publishedAt":43},"01M71F2RTH94ZB7XEAW4P6ZG0D","obsidian-markdown","Fixture skill for obsidian-markdown.","https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fkepano-obsidian-skills\u002Fskills\u002Fobsidian-markdown\u002FSKILL.md",[100],{"categoryNo":101,"categoryName":102,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000002","文档处理",[104,105,106,90,92,107],"markdown","obsidian markdown","obsidian","fixture skill",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":114,"publishedAt":43},"01M71F2R20CPTJXD9F7DP4JPP6","obsidian-cli","Fixture skill for obsidian-cli.","https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fkepano-obsidian-skills\u002Fskills\u002Fobsidian-cli\u002FSKILL.md",[],[115,106,116,90,92,107],"obsidian cli","cli",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":43},"01M71F2PCH4NWVTT1J57SHJX33","obsidian-bases","Fixture skill for obsidian-bases.","https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fkepano-obsidian-skills\u002Fskills\u002Fobsidian-bases\u002FSKILL.md",[],[124,125,106,90,92,107],"bases","obsidian bases",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":135,"publishedAt":43},"01M71F2MSS6EVFEYVYAA1KBYCC","json-canvas","Fixture skill for json-canvas.","https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fkepano-obsidian-skills\u002Fskills\u002Fjson-canvas\u002FSKILL.md",[132],{"categoryNo":133,"categoryName":134,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000015","视觉设计",[136,137,138,107,92,90],"json","json canvas","canvas",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":43},"01M71F2KY5QVNEN1Q3REFB0MQZ","defuddle","Fixture skill for defuddle.","https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fkepano-obsidian-skills\u002Fskills\u002Fdefuddle\u002FSKILL.md",[],[141,107,92,90]]