[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6H072PM01KPEWJHCM7AXDEZ":3,"skill-same:01M6H072PM01KPEWJHCM7AXDEZ":86},{"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":24,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":55,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6H072PM01KPEWJHCM7AXDEZ","score-tests-with-mutation-testing",null,"Use when a green suite might be asserting nothing — run a mutation score to find code the tests execute but never check, then kill the survivors with real assertions.","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-score-tests-with-mutation-testing\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-score-tests-with-mutation-testing\u002FSKILL.md",[19],{"categoryNo":20,"categoryName":21,"taxonomyType":22,"taxonomyTypeDesc":23},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"score tests with mutation testing","with","tests","mutation","mutation testing","testing","kill","when","suite","assertions","green","but","never","use","execute","check","find","code","run","2026-11-10 10:12:30",false,"---\nname: score-tests-with-mutation-testing\ndescription: Use when a green suite might be asserting nothing — run a mutation score to find code the tests execute but never check, then kill the survivors with real assertions.\n---\n\n# Score tests with mutation testing\n\nLine coverage counts execution; mutation score counts detection. Break the source on purpose and keep only mutants your tests kill — survivors mark the assertions you never wrote.\n\n## Procedure\n\n1. Pick the language tool: Python `mutmut` or `cosmic-ray`, JS\u002FTS `npx stryker run`, Rust `cargo mutants`, Java `pitest`, Go `go-mutesting`.\n2. Scope the run to one module to keep it under ~10 minutes. With mutmut:\n```\npip install mutmut\nmutmut run --paths-to-mutate=src\u002Fbilling\u002F --tests-dir=tests\u002F --runner=\"pytest -q\"\n```\n3. Read the score, not just the failures. `mutmut results` prints killed vs survived — survivors are the work list.\n4. Inspect a survivor to judge it:\n```\nmutmut show \u003Cmutant-id>\n```\nA survivor is either (a) untested behavior — write an assertion; or (b) an equivalent mutant that cannot change observable output (e.g. `x * 1` → `x * 2` in dead code) — exclude it with a pragma comment.\n5. For each real survivor add the smallest test that pins the behavior, then re-run the module. Target **≥80% mutation score**; below that the module is under-asserted.\n6. Commit the added tests and record the delta:\n```\ngit commit -am \"kill 7 mutants in billing; score 68% -> 87%\"\n```\n7. Enforce a floor in CI so it cannot regress: wire Stryker's `thresholds: {high: 80, low: 60, break: 60}` in `stryker.conf.json`, or fail the job when `mutmut results` shows survivors above a count.\n\n## Pitfalls\n\n- Chasing 100% means fighting equivalent mutants forever. 80% with every survivor triaged beats 100% with untriaged survivors.\n- Mutation testing costs O(mutants × test runtime); scope it to changed modules or a nightly job or CI time explodes.\n- A high mutation score over unit-tested code still misses wiring bugs. Pair with at least one end-to-end test.\n- `--runner=\"pytest -x\"` stops at the first unrelated failure and can mislabel a mutant as killed. Use the full test command.\n\n## Verification\n\n```\nmutmut results | grep -E \"Killed|Survived\"\n```\nPasses = mutation score ≥80% and every `Survived` line is paired with a new test or annotated `# equivalent`. Report: \"billing mutation score 87% (68→87 after 7 tests), 3 survivors triaged equivalent.\"\n","# Score tests with mutation testing\n\nLine coverage counts execution; mutation score counts detection. Break the source on purpose and keep only mutants your tests kill — survivors mark the assertions you never wrote.\n\n## Procedure\n\n1. Pick the language tool: Python `mutmut` or `cosmic-ray`, JS\u002FTS `npx stryker run`, Rust `cargo mutants`, Java `pitest`, Go `go-mutesting`.\n2. Scope the run to one module to keep it under ~10 minutes. With mutmut:\n```\npip install mutmut\nmutmut run --paths-to-mutate=src\u002Fbilling\u002F --tests-dir=tests\u002F --runner=\"pytest -q\"\n```\n3. Read the score, not just the failures. `mutmut results` prints killed vs survived — survivors are the work list.\n4. Inspect a survivor to judge it:\n```\nmutmut show \u003Cmutant-id>\n```\nA survivor is either (a) untested behavior — write an assertion; or (b) an equivalent mutant that cannot change observable output (e.g. `x * 1` → `x * 2` in dead code) — exclude it with a pragma comment.\n5. For each real survivor add the smallest test that pins the behavior, then re-run the module. Target **≥80% mutation score**; below that the module is under-asserted.\n6. Commit the added tests and record the delta:\n```\ngit commit -am \"kill 7 mutants in billing; score 68% -> 87%\"\n```\n7. Enforce a floor in CI so it cannot regress: wire Stryker's `thresholds: {high: 80, low: 60, break: 60}` in `stryker.conf.json`, or fail the job when `mutmut results` shows survivors above a count.\n\n## Pitfalls\n\n- Chasing 100% means fighting equivalent mutants forever. 80% with every survivor triaged beats 100% with untriaged survivors.\n- Mutation testing costs O(mutants × test runtime); scope it to changed modules or a nightly job or CI time explodes.\n- A high mutation score over unit-tested code still misses wiring bugs. Pair with at least one end-to-end test.\n- `--runner=\"pytest -x\"` stops at the first unrelated failure and can mislabel a mutant as killed. Use the full test command.\n\n## Verification\n\n```\nmutmut results | grep -E \"Killed|Survived\"\n```\nPasses = mutation score ≥80% and every `Survived` line is paired with a new test or annotated `# equivalent`. Report: \"billing mutation score 87% (68→87 after 7 tests), 3 survivors triaged equivalent.\"\n",{"name":5,"description":7},"main","3df1d0d67b30ff15236561f8c0f9f06d33f42dfd","skills\u002Fpayments\u002F0xklen-score-tests-with-mutation-testing",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-14 02:27:51",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add jiayaoqijia\u002Fcryptoskill --skill score-tests-with-mutation-testing",{"tool":64,"command":65},"bunx","bunx skills add jiayaoqijia\u002Fcryptoskill --skill score-tests-with-mutation-testing",{"tool":67,"command":68},"pnpm","pnpm dlx skills add jiayaoqijia\u002Fcryptoskill --skill score-tests-with-mutation-testing","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-score-tests-with-mutation-testing\u002FSKILL.md",true,[72,76,82],{"path":73,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":16},"LICENSE","许可证",1063,{"path":77,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":80,"sourceHtmlUrl":81},"SOURCE.md","REFERENCE","参考文档",359,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-score-tests-with-mutation-testing\u002FSOURCE.md",{"path":83,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":84,"sourceHtmlUrl":85},"TRUST.auto.yaml",2134,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-score-tests-with-mutation-testing\u002FTRUST.auto.yaml",[87,115,138,156,169,179],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":91,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":44},"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",[],[95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114],"performance","recipe performance","recipe","mm","sentry","harness","app","deterministic","recipes","flow","cold","critical","analysis","tasks","react","browser","layout","screen","network","metamask",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":119,"licenseFileUrl":120,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":44},"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",[],[124,125,126,127,128,129,130,131,132,133,134,135,136,137],"mexc spot websocket","spot","websocket","api","workflows","public","listen","streams","depth","keys","for","api keys","maintenance","protobuf",{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":119,"licenseFileUrl":142,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":44},"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",[],[146,125,147,148,149,150,151,135,134,133,152,153,154,129,155,128,127],"mexc spot rest","REST","admin","signing","Wallet","requests","actions","secure","data","orders",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":119,"licenseFileUrl":160,"sourceHtmlUrl":161,"categories":162,"keywords":163,"publishedAt":44},"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",[],[164,165,126,166,167,136,134,168,132,131,129,128],"mexc futures websocket","futures","position","ping","subscriptions",{"skillNo":170,"name":171,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":172,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":44},"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",[],[176,177,178],"refresh","0xklen version and refresh sanctions lists","version",{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":183,"sourceHtmlUrl":184,"categories":185,"keywords":186,"publishedAt":44},"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",[],[27,187,188,189,190,191,192,38,193,42,194],"cover","verify tests cover changed lines","verify","coverage","pr","exercise","patch","share"]