[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GZ59AX9KZ89YHTMXADD0FZ":3,"skill-same:01M6GZ59AX9KZ89YHTMXADD0FZ":82},{"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":16,"sourceHtmlUrl":17,"categories":18,"keywords":19,"publishedAt":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M6GZ59AX9KZ89YHTMXADD0FZ","map-acceptance-criteria-to-tests",null,"Use when a build is \"done\" but no one can say which tests prove it. Builds a traceability matrix linking every acceptance criterion to a test, and every test to a criterion.","jiayaoqijia\u002Fcryptoskill","jiayaoqijia","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1453879?v=4","01M6GMYTX7Q7S504VC6E756ENR","YQ","01M6GMYV1QKJ1CC75MTTGT9PR0",81,"MIT","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-map-acceptance-criteria-to-tests\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-map-acceptance-criteria-to-tests\u002FSKILL.md",[],[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"acceptance","acceptance criteria","map acceptance criteria to tests","map","tests","prove it","test","when","prove","linking","matrix","can","which","it","traceability","done","but","build","say","use","2026-11-10 10:12:30",false,"---\nname: map-acceptance-criteria-to-tests\ndescription: Use when a build is \"done\" but no one can say which tests prove it. Builds a traceability matrix linking every acceptance criterion to a test, and every test to a criterion.\n---\n\n# Map acceptance criteria to tests\n\n\"Done\" is a claim; the matrix is the proof. This skill links each acceptance criterion to the test that exercises it, and surfaces both untested criteria and orphan tests.\n\n## Procedure\n\n1. List every criterion `AC-01..AC-nn` from `AC.md` as a row in `trace.md`.\n2. For each row name the test that verifies it, with its full path and test name: `tests\u002Ftest_checkout.py::test_retry_does_not_double_charge`.\n3. Fill the `layer` column (`unit`, `integration`, `e2e`, `manual`) and confirm high-risk criteria have a test below `e2e`; an `e2e`-only safety net is slow and flaky.\n4. Find untested criteria: rows with no test path. Each is an unproven requirement, not a pass.\n5. Find orphan tests: tests that map to no criterion. Decide whether they guard an implicit requirement (add the criterion) or are dead weight (delete them).\n6. For manual rows write the exact steps and the expected observation so anyone can repeat them.\n7. Re-run the mapped tests and paste the summary counts beside each row.\n8. Freeze the matrix with the release; a criterion with no test at ship time should block or be explicitly waived with a name.\n9. Include the migration or backfill path as a row if it changes user data, and map it to its own test.\n10. Check that the mapped tests fail when the feature is disabled, or they are not guarding it.\n\n11. Store the matrix where it is regenerated on each release, not hand-maintained in a wiki.\n\n## Pitfalls\n\n- Mapping many criteria to one broad `e2e` test, so one failure hides which requirement broke.\n- Counting test line coverage instead of criterion coverage; 90% line coverage can still leave a criterion unproven.\n- Letting the matrix drift from the tests as they are renamed; regenerate it in CI.\n- Marking a criterion `manual` to avoid writing the test it actually needs.\n- Asserting the happy path only and skipping the negative criterion you wrote.\n- Trusting a green suite without checking that each mapped test actually exercises its criterion.\n- Mapping a criterion to a test that asserts something adjacent, like rendering without behaviour.\n\n- Leaving a criterion mapped to a skipped or quarantined test and counting it as covered.\n\n## Verification\n\n    grep -c 'AC-' trace.md; grep -cE 'tests\u002F.*::' trace.md\n\nPasses when every `AC-` row has a test path or a manual step and the counts match. Report untested criteria and orphan tests.\n","# Map acceptance criteria to tests\n\n\"Done\" is a claim; the matrix is the proof. This skill links each acceptance criterion to the test that exercises it, and surfaces both untested criteria and orphan tests.\n\n## Procedure\n\n1. List every criterion `AC-01..AC-nn` from `AC.md` as a row in `trace.md`.\n2. For each row name the test that verifies it, with its full path and test name: `tests\u002Ftest_checkout.py::test_retry_does_not_double_charge`.\n3. Fill the `layer` column (`unit`, `integration`, `e2e`, `manual`) and confirm high-risk criteria have a test below `e2e`; an `e2e`-only safety net is slow and flaky.\n4. Find untested criteria: rows with no test path. Each is an unproven requirement, not a pass.\n5. Find orphan tests: tests that map to no criterion. Decide whether they guard an implicit requirement (add the criterion) or are dead weight (delete them).\n6. For manual rows write the exact steps and the expected observation so anyone can repeat them.\n7. Re-run the mapped tests and paste the summary counts beside each row.\n8. Freeze the matrix with the release; a criterion with no test at ship time should block or be explicitly waived with a name.\n9. Include the migration or backfill path as a row if it changes user data, and map it to its own test.\n10. Check that the mapped tests fail when the feature is disabled, or they are not guarding it.\n\n11. Store the matrix where it is regenerated on each release, not hand-maintained in a wiki.\n\n## Pitfalls\n\n- Mapping many criteria to one broad `e2e` test, so one failure hides which requirement broke.\n- Counting test line coverage instead of criterion coverage; 90% line coverage can still leave a criterion unproven.\n- Letting the matrix drift from the tests as they are renamed; regenerate it in CI.\n- Marking a criterion `manual` to avoid writing the test it actually needs.\n- Asserting the happy path only and skipping the negative criterion you wrote.\n- Trusting a green suite without checking that each mapped test actually exercises its criterion.\n- Mapping a criterion to a test that asserts something adjacent, like rendering without behaviour.\n\n- Leaving a criterion mapped to a skipped or quarantined test and counting it as covered.\n\n## Verification\n\n    grep -c 'AC-' trace.md; grep -cE 'tests\u002F.*::' trace.md\n\nPasses when every `AC-` row has a test path or a manual step and the counts match. Report untested criteria and orphan tests.\n",{"name":5,"description":7},"main","3df1d0d67b30ff15236561f8c0f9f06d33f42dfd","skills\u002Fpayments\u002F0xklen-map-acceptance-criteria-to-tests",17,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia","https:\u002F\u002Feth2030.com","Hardcore infra. Building @alt-research and applied cryptography.","2026-11-12 02:28:42",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add jiayaoqijia\u002Fcryptoskill --skill map-acceptance-criteria-to-tests",{"tool":60,"command":61},"bunx","bunx skills add jiayaoqijia\u002Fcryptoskill --skill map-acceptance-criteria-to-tests",{"tool":63,"command":64},"pnpm","pnpm dlx skills add jiayaoqijia\u002Fcryptoskill --skill map-acceptance-criteria-to-tests","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-map-acceptance-criteria-to-tests\u002FSKILL.md",true,[68,72,78],{"path":69,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":16},"LICENSE","许可证",1063,{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"SOURCE.md","REFERENCE","参考文档",358,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-map-acceptance-criteria-to-tests\u002FSOURCE.md",{"path":79,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":80,"sourceHtmlUrl":81},"TRUST.auto.yaml",2217,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-map-acceptance-criteria-to-tests\u002FTRUST.auto.yaml",[83,111,134,152,165,175],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":87,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":40},"01M712C436EQYE43342Q4E7GG1","recipe-performance","Diagnose a specific MetaMask user flow's real-app performance and Sentry critical-user-flow telemetry with deterministic mm-harness recipes. Use for CUF boundaries, cold\u002Fwarm\u002Fbackground-resume behavior, latency regressions, lifecycle tags, duplicate or blocking network requests, long tasks, layout\u002Fpaint cost, screen redraws, React rerenders, or browser trace analysis where tests alone cannot prove the real app.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fwallets\u002Fmetamask-official-recipe-performance\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fwallets\u002Fmetamask-official-recipe-performance\u002FSKILL.md",[],[91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110],"performance","recipe performance","recipe","mm","sentry","harness","app","deterministic","recipes","flow","cold","critical","analysis","tasks","react","browser","layout","screen","network","metamask",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":115,"licenseFileUrl":116,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":40},"01M70XT2F8A5CQZ81JBP98KSW3","mexc-spot-websocket","MEXC Spot WebSocket workflows for public streams, protobuf handling, depth maintenance, listen keys, and private streams without exposing API keys.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-websocket\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-websocket\u002FSKILL.md",[],[120,121,122,123,124,125,126,127,128,129,130,131,132,133],"mexc spot websocket","spot","websocket","api","workflows","public","listen","streams","depth","keys","for","api keys","maintenance","protobuf",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":115,"licenseFileUrl":138,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":40},"01M70XT0MBXN3WZY1BKN0CPNKR","mexc-spot-rest","MEXC Spot REST workflows for public data, signed account requests, orders, wallet\u002Fadmin actions, and secure signing without exposing API keys.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-rest\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-rest\u002FSKILL.md",[],[142,121,143,144,145,146,147,131,130,129,148,149,150,125,151,124,123],"mexc spot rest","REST","admin","signing","Wallet","requests","actions","secure","data","orders",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":115,"licenseFileUrl":156,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":40},"01M70XSYSVZ2N0N91XCAR2CAK0","mexc-futures-websocket","MEXC Futures WebSocket workflows for public streams, private account\u002Forder\u002Fposition streams, ping\u002Fpong, subscriptions, and depth maintenance.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-futures-websocket\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-futures-websocket\u002FSKILL.md",[],[160,161,122,162,163,132,130,164,128,127,125,124],"mexc futures websocket","futures","position","ping","subscriptions",{"skillNo":166,"name":167,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":168,"sourceHtmlUrl":169,"categories":170,"keywords":171,"publishedAt":40},"01M6H0ZWHVE5W04WG2DKQE2SQC","0xklen-version-and-refresh-sanctions-lists","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-version-and-refresh-sanctions-lists\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-version-and-refresh-sanctions-lists\u002FSKILL.md",[],[172,173,174],"refresh","0xklen version and refresh sanctions lists","version",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":179,"sourceHtmlUrl":180,"categories":181,"keywords":182,"publishedAt":40},"01M6H0Z28Q3R8J0S799GJQWXM3","verify-tests-cover-changed-lines","Use when a PR adds code that the existing suite may not exercise. Measures patch coverage — the share of newly changed lines hit by tests — before approving.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-verify-tests-cover-changed-lines\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-verify-tests-cover-changed-lines\u002FSKILL.md",[],[24,183,184,185,186,187,188,39,189,190,191],"cover","verify tests cover changed lines","verify","coverage","pr","exercise","patch","code","share"]