[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M698SWAFFHSHVSHXH7CD9JPF":3,"skill-same:01M698SWAFFHSHVSHXH7CD9JPF":72},{"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":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":44,"ownerHtmlUrl":45,"ownerBlogUrl":44,"ownerDescription":46,"updatedAt":47,"install":48,"resources":61},"01M698SWAFFHSHVSHXH7CD9JPF","test-audit",null,"Writing\u002Fchanging\u002Freviewing\u002Fsweeping tests: reject duplicate or implementation-coupled proof; remove test-only production seams.","openclaw\u002Fopenclaw","openclaw","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F252820863?v=4","01M698P3FSAZ6B4R928ZF19KPT","01M698PDMDRVH56MV30D253NFP",394352,"MIT","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Ftest-audit\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33],"test audit","test","audit","writing","Production","remove","only","implementation","tests","proof","duplicate","2026-11-10 10:12:30",false,"---\nname: test-audit\ndescription: \"Writing\u002Fchanging\u002Freviewing\u002Fsweeping tests: reject duplicate or implementation-coupled proof; remove test-only production seams.\"\n---\n\n# Test Audit\n\n- Authoring gates every new\u002Fchanged test.\n- Audits: remove low-value proof in coherent owner batches; never chase deletion counts.\n- Whole-subsystem campaign: read [CAMPAIGN.md](CAMPAIGN.md) first.\n\n## Authoring gate\n\nBefore adding test, answer:\n\n1. Protected observable behavior, invariant, or independent contract?\n2. Credible regression that makes it fail?\n3. Why existing proof misses it? Each contract: one primary owner at strongest\n   boundary. Another layer needs distinct transport\u002Flifecycle risk. Extend\n   tables\u002Fshared fixtures; consolidate repeated setup.\n4. Export, flag, wrapper, injection hook with no production caller needed?\n   Move proof to real boundary instead.\n\n- Use [boundary and cost guide](..\u002F..\u002F..\u002Fdocs\u002Fhelp\u002Ftesting\u002Fwriting-tests.md).\n- Regressions must fail pre-fix for intended reason, pass after repair; report\n  unavailable baseline proof.\n- One owner regression covers bug; never replay at every crossed layer.\n- Behavior-preserving refactors should not break test.\n\n## Junk patterns\n\n- Reject self-comparisons, copied inventories, source greps,\n  implementation\u002Fcall-shape assertions, duplicate contracts, test-only seams,\n  subject-generated expected values, mocks supplying asserted behavior.\n- Fixtures must not fabricate owner receipts\u002Forder or claim persistence path\n  never writes.\n- Negative controls must fail at intended guard; names must match exercised behavior.\n- Auditing candidates: use [full checklist](references\u002Faudit.md#junk-patterns).\n\n## Retention bar\n\n- Keep independent API, SDK, protocol, config, migration, storage, security,\n  platform, default, prompt-byte, generated-language, package, release,\n  architecture, observable-ordering contracts. Static\u002Fslow ≠ disposable.\n- Source inspection must survive identifier-only refactors and guard independent\n  user-facing contract.\n- Baseline failures may be bugs to repair, not tests to delete.\n\n## Audit and validation\n\n- Before audit edit: read [candidate evidence and workflow](references\u002Faudit.md#candidate-evidence);\n  inspect full owners\u002Fcallers\u002Fhistory; record remaining proof before deletion.\n- Delete obsolete production seams with tests; never optimize for deletion counts.\n- Follow [proof policy](..\u002Fopenclaw-testing\u002FSKILL.md#proof-policy); preserve active\n  Vitest checkouts; run owner\u002Fsibling proof + changed checks; then autoreview.\n- Report causes, retained contracts, proof\u002Fcost, production versus test LOC,\n  follow-ups. Commit\u002Fpush\u002Fland only with task authority.\n","# Test Audit\n\n- Authoring gates every new\u002Fchanged test.\n- Audits: remove low-value proof in coherent owner batches; never chase deletion counts.\n- Whole-subsystem campaign: read [CAMPAIGN.md](CAMPAIGN.md) first.\n\n## Authoring gate\n\nBefore adding test, answer:\n\n1. Protected observable behavior, invariant, or independent contract?\n2. Credible regression that makes it fail?\n3. Why existing proof misses it? Each contract: one primary owner at strongest\n   boundary. Another layer needs distinct transport\u002Flifecycle risk. Extend\n   tables\u002Fshared fixtures; consolidate repeated setup.\n4. Export, flag, wrapper, injection hook with no production caller needed?\n   Move proof to real boundary instead.\n\n- Use [boundary and cost guide](..\u002F..\u002F..\u002Fdocs\u002Fhelp\u002Ftesting\u002Fwriting-tests.md).\n- Regressions must fail pre-fix for intended reason, pass after repair; report\n  unavailable baseline proof.\n- One owner regression covers bug; never replay at every crossed layer.\n- Behavior-preserving refactors should not break test.\n\n## Junk patterns\n\n- Reject self-comparisons, copied inventories, source greps,\n  implementation\u002Fcall-shape assertions, duplicate contracts, test-only seams,\n  subject-generated expected values, mocks supplying asserted behavior.\n- Fixtures must not fabricate owner receipts\u002Forder or claim persistence path\n  never writes.\n- Negative controls must fail at intended guard; names must match exercised behavior.\n- Auditing candidates: use [full checklist](references\u002Faudit.md#junk-patterns).\n\n## Retention bar\n\n- Keep independent API, SDK, protocol, config, migration, storage, security,\n  platform, default, prompt-byte, generated-language, package, release,\n  architecture, observable-ordering contracts. Static\u002Fslow ≠ disposable.\n- Source inspection must survive identifier-only refactors and guard independent\n  user-facing contract.\n- Baseline failures may be bugs to repair, not tests to delete.\n\n## Audit and validation\n\n- Before audit edit: read [candidate evidence and workflow](references\u002Faudit.md#candidate-evidence);\n  inspect full owners\u002Fcallers\u002Fhistory; record remaining proof before deletion.\n- Delete obsolete production seams with tests; never optimize for deletion counts.\n- Follow [proof policy](..\u002Fopenclaw-testing\u002FSKILL.md#proof-policy); preserve active\n  Vitest checkouts; run owner\u002Fsibling proof + changed checks; then autoreview.\n- Report causes, retained contracts, proof\u002Fcost, production versus test LOC,\n  follow-ups. Commit\u002Fpush\u002Fland only with task authority.\n",{"name":5,"description":7},"main","f1c93577085244aa96aa87b53a2df9b59d293bd7",".agents\u002Fskills\u002Ftest-audit",82861,"https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw","https:\u002F\u002Fopenclaw.ai","https:\u002F\u002Fgithub.com\u002Fopenclaw","Your personal, open source AI assistant.","2026-11-12 03:01:25",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add openclaw\u002Fopenclaw --skill test-audit",{"tool":54,"command":55},"bunx","bunx skills add openclaw\u002Fopenclaw --skill test-audit",{"tool":57,"command":58},"pnpm","pnpm dlx skills add openclaw\u002Fopenclaw --skill test-audit","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Ftest-audit\u002FSKILL.md",true,[62,68],{"path":63,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":66,"sourceHtmlUrl":67},"CAMPAIGN.md","REFERENCE","参考文档",5558,"https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Ftest-audit\u002FCAMPAIGN.md",{"path":69,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":70,"sourceHtmlUrl":71},"references\u002Faudit.md",3535,"https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Ftest-audit\u002Freferences\u002Faudit.md",[73,79,102,120,142,164],{"skillNo":74,"name":75,"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":76,"categories":77,"keywords":78,"publishedAt":34},"01M698VP84FNM6G9MR1HPX7MF7","lobster","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fextensions\u002Flobster\u002FSKILL.md",[],[75],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":34},"01M698YY8QGQ7S8TJNKJG6VTPH","xurl","xurl CLI for authenticated X posts, replies, reads\u002Fsearch, DMs, media upload, followers, auth status, or raw v2 API calls.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fxurl\u002FSKILL.md",[],[81,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101],"for","api","calls","replies","posts","upload","tap","install","brew","node","Media","search","npm","status","auth","cli",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":34},"01M698YWT1CJ0WK88WB909R9RT","weather","Current weather and forecasts with web_fetch, falling back to wttr.in curl for locations, rain, temperature, travel planning.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fweather\u002FSKILL.md",[],[104,109,110,93,111,94,112,113,114,115,116,117,86,118,119],"travel planning","travel","fetch","curl","https","help","planning","web","back","temperature","with",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":131,"publishedAt":34},"01M698YV2Q0R0JJKAWGFS21K0N","visualize","Create inline visuals for code and explanations, or author persistent OpenClaw dashboard widgets with show_widget.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fvisualize\u002FSKILL.md",[126],{"categoryNo":127,"categoryName":128,"taxonomyType":129,"taxonomyTypeDesc":130},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[122,132,133,134,135,86,119,136,137,138,139,140,9,141],"widgets","openclaw dashboard","author","inline","show","code","create","visuals","dashboard","widget",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":154,"publishedAt":34},"01M698YS2TRJH9ENG28HD9CD87","trello","Manage Trello boards, lists, and cards via the Trello REST API.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Ftrello\u002FSKILL.md",[148,151],{"categoryNo":149,"categoryName":150,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":152,"categoryName":153,"taxonomyType":129,"taxonomyTypeDesc":130},"01JBSEEDCAT000000000000030","开发工程师",[144,113,155,156,157,158,159,160,93,94,161,112,87,162,163],"cloud","manage","via","rest api","token","atlassian","jq","REST","developer",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":170,"publishedAt":34},"01M698YQ9Q3M4W78EWV2KSCSVW","tmux","Control tmux sessions\u002Fpanes for interactive CLIs: list, capture output, send keys, paste text, monitor prompts.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Ftmux\u002FSKILL.md",[],[166,93,171,172,86,173,174,175,176,177,178,179,94,180,181,182,183,184,185],"send","darwin","keys","paste","output","control","prompts","interactive","list","capture","panes","text","monitor","sessions","linux"]