[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GYNTJ736BG13NJGFKMQCXA":3,"skill-same:01M6GYNTJ736BG13NJGFKMQCXA":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},"01M6GYNTJ736BG13NJGFKMQCXA","fix-scope-before-estimating",null,"Use when an estimate keeps moving because the thing being estimated keeps growing. Writes an explicit done-definition and exclusions first, so the estimate is attached to a fixed object.","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-fix-scope-before-estimating\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-fix-scope-before-estimating\u002FSKILL.md",[],[20,21,22,23,24,25,26,27,28,29],"fix","scope","fix scope before estimating","first","use","done","object","estimate","definition","when","2026-11-10 10:12:30",false,"---\nname: fix-scope-before-estimating\ndescription: Use when an estimate keeps moving because the thing being estimated keeps growing. Writes an explicit done-definition and exclusions first, so the estimate is attached to a fixed object.\n---\n\n# Fix scope before estimating\n\nAn estimate on a moving definition is worthless: any number can be met by adding or removing work after the fact. Freeze what \"done\" means and what is out of scope, then estimate — and treat any change to that boundary as a change to the estimate.\n\n## Procedure\n\n1. Write the done-definition in testable terms: \"a user can reset their password via email link, on desktop, and the old password stops working.\" Not \"improve auth.\"\n2. List explicit exclusions: \"no SMS reset, no admin-forced reset, no rate-limit UI.\" Exclusions are as load-bearing as inclusions.\n3. Estimate only against the frozen definition in `notes\u002Fscope.md`. If a step is needed but excluded, note that the exclusions assume it is not needed.\n4. Version the scope. When scope changes, bump it and re-estimate; never let a silent addition ride inside the old number:\n\n       notes\u002Fscope.md\n       scope v1 (2026-02-01): as above — estimate 6-9 days\n       scope v2 (2026-02-05): +SMS reset (asked by support) — estimate 9-14 days\n\n5. Attach the estimate's confidence to the scope version, so a \"5-day\" answer is never reused for a larger v2.\n6. If asked for a number before scope is fixed, give a range and say it is conditional on scope: any change moves it.\n7. Keep the exclusions visible in the same file reviewers read, not buried in a thread.\n\n## Pitfalls\n\n- Estimating a feature name rather than a behaviour, so the object the number refers to is undefined.\n- Accepting a small mid-flight addition as \"obviously in scope,\" which is how a 6-day estimate becomes 14 with nobody deciding.\n- Listing inclusions but no exclusions, so everything is arguably in scope.\n- Re-using a v1 estimate after a v2 scope change because the ticket number stayed the same.\n- Writing done-definition so loosely (\"works well\") that it cannot be tested and therefore cannot be frozen.\n\n## Verification\n\n    grep -n 'scope v' notes\u002Fscope.md\n    # passes when each scope version has a date, its additions\u002Fremovals, and its own estimate\n\nReport the frozen done-definition, the exclusions, the scope version the estimate belongs to, and the estimate.\n","# Fix scope before estimating\n\nAn estimate on a moving definition is worthless: any number can be met by adding or removing work after the fact. Freeze what \"done\" means and what is out of scope, then estimate — and treat any change to that boundary as a change to the estimate.\n\n## Procedure\n\n1. Write the done-definition in testable terms: \"a user can reset their password via email link, on desktop, and the old password stops working.\" Not \"improve auth.\"\n2. List explicit exclusions: \"no SMS reset, no admin-forced reset, no rate-limit UI.\" Exclusions are as load-bearing as inclusions.\n3. Estimate only against the frozen definition in `notes\u002Fscope.md`. If a step is needed but excluded, note that the exclusions assume it is not needed.\n4. Version the scope. When scope changes, bump it and re-estimate; never let a silent addition ride inside the old number:\n\n       notes\u002Fscope.md\n       scope v1 (2026-02-01): as above — estimate 6-9 days\n       scope v2 (2026-02-05): +SMS reset (asked by support) — estimate 9-14 days\n\n5. Attach the estimate's confidence to the scope version, so a \"5-day\" answer is never reused for a larger v2.\n6. If asked for a number before scope is fixed, give a range and say it is conditional on scope: any change moves it.\n7. Keep the exclusions visible in the same file reviewers read, not buried in a thread.\n\n## Pitfalls\n\n- Estimating a feature name rather than a behaviour, so the object the number refers to is undefined.\n- Accepting a small mid-flight addition as \"obviously in scope,\" which is how a 6-day estimate becomes 14 with nobody deciding.\n- Listing inclusions but no exclusions, so everything is arguably in scope.\n- Re-using a v1 estimate after a v2 scope change because the ticket number stayed the same.\n- Writing done-definition so loosely (\"works well\") that it cannot be tested and therefore cannot be frozen.\n\n## Verification\n\n    grep -n 'scope v' notes\u002Fscope.md\n    # passes when each scope version has a date, its additions\u002Fremovals, and its own estimate\n\nReport the frozen done-definition, the exclusions, the scope version the estimate belongs to, and the estimate.\n",{"name":5,"description":7},"main","3df1d0d67b30ff15236561f8c0f9f06d33f42dfd","skills\u002Fpayments\u002F0xklen-fix-scope-before-estimating",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":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add jiayaoqijia\u002Fcryptoskill --skill fix-scope-before-estimating",{"tool":50,"command":51},"bunx","bunx skills add jiayaoqijia\u002Fcryptoskill --skill fix-scope-before-estimating",{"tool":53,"command":54},"pnpm","pnpm dlx skills add jiayaoqijia\u002Fcryptoskill --skill fix-scope-before-estimating","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-fix-scope-before-estimating\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","参考文档",353,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-fix-scope-before-estimating\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-fix-scope-before-estimating\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,24,180,181,182],"tests","cover","verify tests cover changed lines","verify","coverage","pr","exercise","patch","code","share"]