[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GYPBVADEY5T4A12QKVHGBA":3,"skill-same:01M6GYPBVADEY5T4A12QKVHGBA":72},{"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":30,"linkOnly":31,"markdownContent":32,"markdownBody":33,"frontMatter":34,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":6,"ownerHtmlUrl":40,"ownerBlogUrl":41,"ownerDescription":42,"updatedAt":43,"install":44,"resources":57},"01M6GYPBVADEY5T4A12QKVHGBA","flag-untestable-words-in-a-spec",null,"Use when reviewing a spec, ticket, or acceptance criteria before build. Greps out vague qualifiers that cannot be tested and forces each to a threshold or an example.","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-flag-untestable-words-in-a-spec\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-flag-untestable-words-in-a-spec\u002FSKILL.md",[],[20,21,22,23,24,25,26,27,28,29],"spec","flag untestable words in a spec","acceptance","use","example","build","acceptance criteria","ticket","vague","when","2026-11-10 10:12:30",false,"---\nname: flag-untestable-words-in-a-spec\ndescription: Use when reviewing a spec, ticket, or acceptance criteria before build. Greps out vague qualifiers that cannot be tested and forces each to a threshold or an example.\n---\n\n# Flag untestable words in a spec\n\n\"Fast\", \"robust\", and \"intuitive\" cannot fail, so they cannot be verified. This skill finds the vague words and replaces each with a number, an example, or a decision.\n\n## Procedure\n\n1. Run a vague-word scan over the spec: `grep -inE '\\b(fast|slow|robust|reliable|scalable|intuitive|seamless|user-friendly|simple|easy|better|improve|optimize|soon|recently|properly|correctly|sometimes)\\b' spec.md`.\n2. For each hit decide which of three fixes applies: replace with a measurable threshold, replace with a concrete example, or delete the claim.\n3. Convert comparative words to a baseline and a target: \"faster\" becomes \"p95 under 300 ms, from 800 ms today\".\n4. Convert quality words to an observable behaviour: \"robust\" becomes \"survives a 500 from the upstream without a 5xx to the client\".\n5. Convert quantity words (\"many\", \"most\", \"soon\") to a number and a window.\n6. Raise any word that hides a genuine dispute to a decision record rather than quietly picking a threshold.\n7. Re-run the scan after editing; a clean pass means every remaining claim is testable.\n8. Do the same scan on the ticket title, which frequently carries the vaguest phrase.\n9. Add project-specific vague words to the scan list, such as internal jargon that means different things to different teams.\n10. Record which hits were false positives so the next reviewer does not re-litigate the same line.\n\n11. Add the scan to the pull request template so vague wording is caught before review, not after.\n\n## Pitfalls\n\n- Replacing \"fast\" with an arbitrary number the requester never agreed to; thresholds are decisions, not guesses.\n- Flagging words like \"simple\" that are legitimately in a non-normative sentence, then over-editing prose.\n- Fixing the spec text but not the acceptance criteria that reference the same vague word.\n- Letting \"soon\" survive as a deadline; a date or window is required.\n- Treating the grep as the goal rather than the meaning; an empty grep over nonsense prose is still nonsense.\n- Editing prose that is deliberately non-normative and does not belong in a test.\n- Replacing a vague word with a precise one nobody agreed to, smuggling a decision into an edit.\n\n- Escalating every vague word to a decision record, which buries the ones that truly need one.\n\n## Verification\n\n    grep -inE '\\b(fast|robust|intuitive|seamless|simple|easy|soon)\\b' spec.md || echo clean\n\nReport each flagged word, its fix (threshold, example, or deleted), and any word you escalated to a decision record.\n","# Flag untestable words in a spec\n\n\"Fast\", \"robust\", and \"intuitive\" cannot fail, so they cannot be verified. This skill finds the vague words and replaces each with a number, an example, or a decision.\n\n## Procedure\n\n1. Run a vague-word scan over the spec: `grep -inE '\\b(fast|slow|robust|reliable|scalable|intuitive|seamless|user-friendly|simple|easy|better|improve|optimize|soon|recently|properly|correctly|sometimes)\\b' spec.md`.\n2. For each hit decide which of three fixes applies: replace with a measurable threshold, replace with a concrete example, or delete the claim.\n3. Convert comparative words to a baseline and a target: \"faster\" becomes \"p95 under 300 ms, from 800 ms today\".\n4. Convert quality words to an observable behaviour: \"robust\" becomes \"survives a 500 from the upstream without a 5xx to the client\".\n5. Convert quantity words (\"many\", \"most\", \"soon\") to a number and a window.\n6. Raise any word that hides a genuine dispute to a decision record rather than quietly picking a threshold.\n7. Re-run the scan after editing; a clean pass means every remaining claim is testable.\n8. Do the same scan on the ticket title, which frequently carries the vaguest phrase.\n9. Add project-specific vague words to the scan list, such as internal jargon that means different things to different teams.\n10. Record which hits were false positives so the next reviewer does not re-litigate the same line.\n\n11. Add the scan to the pull request template so vague wording is caught before review, not after.\n\n## Pitfalls\n\n- Replacing \"fast\" with an arbitrary number the requester never agreed to; thresholds are decisions, not guesses.\n- Flagging words like \"simple\" that are legitimately in a non-normative sentence, then over-editing prose.\n- Fixing the spec text but not the acceptance criteria that reference the same vague word.\n- Letting \"soon\" survive as a deadline; a date or window is required.\n- Treating the grep as the goal rather than the meaning; an empty grep over nonsense prose is still nonsense.\n- Editing prose that is deliberately non-normative and does not belong in a test.\n- Replacing a vague word with a precise one nobody agreed to, smuggling a decision into an edit.\n\n- Escalating every vague word to a decision record, which buries the ones that truly need one.\n\n## Verification\n\n    grep -inE '\\b(fast|robust|intuitive|seamless|simple|easy|soon)\\b' spec.md || echo clean\n\nReport each flagged word, its fix (threshold, example, or deleted), and any word you escalated to a decision record.\n",{"name":5,"description":7},"main","3df1d0d67b30ff15236561f8c0f9f06d33f42dfd","skills\u002Fpayments\u002F0xklen-flag-untestable-words-in-a-spec",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":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add jiayaoqijia\u002Fcryptoskill --skill flag-untestable-words-in-a-spec",{"tool":50,"command":51},"bunx","bunx skills add jiayaoqijia\u002Fcryptoskill --skill flag-untestable-words-in-a-spec",{"tool":53,"command":54},"pnpm","pnpm dlx skills add jiayaoqijia\u002Fcryptoskill --skill flag-untestable-words-in-a-spec","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-flag-untestable-words-in-a-spec\u002FSKILL.md",true,[58,62,68],{"path":59,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":61,"sourceHtmlUrl":16},"LICENSE","许可证",1063,{"path":63,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":66,"sourceHtmlUrl":67},"SOURCE.md","REFERENCE","参考文档",357,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-flag-untestable-words-in-a-spec\u002FSOURCE.md",{"path":69,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":70,"sourceHtmlUrl":71},"TRUST.auto.yaml",2217,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-flag-untestable-words-in-a-spec\u002FTRUST.auto.yaml",[73,101,124,142,155,165],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":77,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":30},"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",[],[81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100],"performance","recipe performance","recipe","mm","sentry","harness","app","deterministic","recipes","flow","cold","critical","analysis","tasks","react","browser","layout","screen","network","metamask",{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":105,"licenseFileUrl":106,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":30},"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",[],[110,111,112,113,114,115,116,117,118,119,120,121,122,123],"mexc spot websocket","spot","websocket","api","workflows","public","listen","streams","depth","keys","for","api keys","maintenance","protobuf",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":105,"licenseFileUrl":128,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":30},"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",[],[132,111,133,134,135,136,137,121,120,119,138,139,140,115,141,114,113],"mexc spot rest","REST","admin","signing","Wallet","requests","actions","secure","data","orders",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":105,"licenseFileUrl":146,"sourceHtmlUrl":147,"categories":148,"keywords":149,"publishedAt":30},"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",[],[150,151,112,152,153,122,120,154,118,117,115,114],"mexc futures websocket","futures","position","ping","subscriptions",{"skillNo":156,"name":157,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":158,"sourceHtmlUrl":159,"categories":160,"keywords":161,"publishedAt":30},"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",[],[162,163,164],"refresh","0xklen version and refresh sanctions lists","version",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":169,"sourceHtmlUrl":170,"categories":171,"keywords":172,"publishedAt":30},"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",[],[173,174,175,176,177,178,179,23,180,181,182],"tests","cover","verify tests cover changed lines","verify","coverage","pr","exercise","patch","code","share"]