[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71F2JCS3BF4VJRHY8VXBQY3":3,"skill-same:01M71F2JCS3BF4VJRHY8VXBQY3":76},{"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":55,"commitSha":56,"skillDirectory":57,"forksCount":58,"repositoryHtmlUrl":59,"repositoryHomepageUrl":6,"ownerHtmlUrl":60,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":61,"install":62,"resources":75},"01M71F2JCS3BF4VJRHY8VXBQY3","testing-foundation",null,"Minimum testing commands and evidence layers for ai-specs shaped repos. Trigger: before merge, when choosing how to verify a change, or when recording apply\u002Fverify evidence.","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\u002Fcatalog\u002Fskills\u002Ftesting-foundation\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],"testing","foundation","testing foundation","apply","when","how to","repos","commands","default","trigger","layers","merge","for","how","verify","pr","evidence","change","test","recording","2026-11-10 10:12:30",false,"---\nname: testing-foundation\ndescription: >\n  Minimum testing commands and evidence layers for ai-specs shaped repos.\n  Trigger: before merge, when choosing how to verify a change, or when\n  recording apply\u002Fverify evidence.\nlicense: MIT\nmetadata:\n  author: parada1104\n  version: \"1.0\"\n  scope: [root]\n  auto_invoke:\n    - \"Choosing default test commands before merge or PR\"\n---\n\n# Testing Foundation\n\n## Purpose\n\nTesting is part of the ai-specs MVP as a cross-cutting quality foundation. It is\nnot extra functional scope for every card; it is the minimum evidence needed to\ntrust each change.\n\n## Canonical Commands\n\nUse these commands from the repository root:\n\n- `.\u002Ftests\u002Frun.sh` runs the Python unittest suite.\n- `.\u002Ftests\u002Fvalidate.sh` runs syntax checks and then `.\u002Ftests\u002Frun.sh`.\n\n`.\u002Ftests\u002Fvalidate.sh` is the default final verification command for normal\nchanges until stronger tooling is configured.\n\n## Minimum Test Layers\n\nChanges should use the smallest relevant set of these layers:\n\n- Unit tests for pure parsing, normalization, rendering, and validation logic.\n- Integration-style CLI or sync tests for generated files and command flows.\n- Documentation\u002Fgenerated artifact tests when README, AGENTS.md, templates, or\n  contract docs are the source of truth.\n- Smoke validation through `.\u002Ftests\u002Fvalidate.sh` before a change is considered\n  ready to merge.\n\n## Evidence Policy\n\nEvery implementation should leave clear evidence of what was run and what\npassed. In SDD changes, record RED\u002FGREEN and final validation in\n`apply-progress.md` and `verify-report.md`. In non-SDD changes, record the same\nevidence in the commit, PR, or task\u002Fcard update.\n\n## Deferred Tooling\n\nCoverage, linting, type checking, and formatting are desirable but not blocking\nsignals until they are configured in this repository. Do not imply those checks\npassed unless the tooling exists and was actually run.\n","# Testing Foundation\n\n## Purpose\n\nTesting is part of the ai-specs MVP as a cross-cutting quality foundation. It is\nnot extra functional scope for every card; it is the minimum evidence needed to\ntrust each change.\n\n## Canonical Commands\n\nUse these commands from the repository root:\n\n- `.\u002Ftests\u002Frun.sh` runs the Python unittest suite.\n- `.\u002Ftests\u002Fvalidate.sh` runs syntax checks and then `.\u002Ftests\u002Frun.sh`.\n\n`.\u002Ftests\u002Fvalidate.sh` is the default final verification command for normal\nchanges until stronger tooling is configured.\n\n## Minimum Test Layers\n\nChanges should use the smallest relevant set of these layers:\n\n- Unit tests for pure parsing, normalization, rendering, and validation logic.\n- Integration-style CLI or sync tests for generated files and command flows.\n- Documentation\u002Fgenerated artifact tests when README, AGENTS.md, templates, or\n  contract docs are the source of truth.\n- Smoke validation through `.\u002Ftests\u002Fvalidate.sh` before a change is considered\n  ready to merge.\n\n## Evidence Policy\n\nEvery implementation should leave clear evidence of what was run and what\npassed. In SDD changes, record RED\u002FGREEN and final validation in\n`apply-progress.md` and `verify-report.md`. In non-SDD changes, record the same\nevidence in the commit, PR, or task\u002Fcard update.\n\n## Deferred Tooling\n\nCoverage, linting, type checking, and formatting are desirable but not blocking\nsignals until they are configured in this repository. Do not imply those checks\npassed unless the tooling exists and was actually run.\n",{"name":5,"license":14,"metadata":48,"description":54},{"scope":49,"author":9,"version":51,"auto_invoke":52},[50],"root","1.0",[53],"Choosing default test commands before merge or PR","Minimum testing commands and evidence layers for ai-specs shaped repos. Trigger: before merge, when choosing how to verify a change, or when recording apply\u002Fverify evidence.\n","main","c092fc1f51280350a4434827e2f6d6d99e3431ca","catalog\u002Fskills\u002Ftesting-foundation",2,"https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli","https:\u002F\u002Fgithub.com\u002Fparada1104","2026-11-14 03:51:03",{"source":8,"skillName":5,"commands":63,"prompt":73,"zipAvailable":74},[64,67,70],{"tool":65,"command":66},"npx","npx skills add parada1104\u002Fai-specs-cli --skill testing-foundation",{"tool":68,"command":69},"bunx","bunx skills add parada1104\u002Fai-specs-cli --skill testing-foundation",{"tool":71,"command":72},"pnpm","pnpm dlx skills add parada1104\u002Fai-specs-cli --skill testing-foundation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Fcatalog\u002Fskills\u002Ftesting-foundation\u002FSKILL.md",true,[],[77,91,105,114,123,136],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":87,"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",[83,84],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":85,"categoryName":86,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[88,41,35,50,89,90,23],"Test Skill","fixtures","fixture",{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":100,"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",[97],{"categoryNo":98,"categoryName":99,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000002","文档处理",[101,102,103,35,90,104],"markdown","obsidian markdown","obsidian","fixture skill",{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":111,"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",[],[112,103,113,35,90,104],"obsidian cli","cli",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"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",[],[121,122,103,35,90,104],"bases","obsidian bases",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":132,"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",[129],{"categoryNo":130,"categoryName":131,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000015","视觉设计",[133,134,135,104,90,35],"json","json canvas","canvas",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":142,"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",[],[138,104,90,35]]