[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GZ2HMPH4K2MSSHPDWGXKRY":3,"skill-same:01M6GZ2HMPH4K2MSSHPDWGXKRY":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":24,"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},"01M6GZ2HMPH4K2MSSHPDWGXKRY","keep-tzdb-current",null,"Use when a service stores or converts timezones — update and pin the IANA tz database, because governments change offsets and a stale copy silently computes the wrong instant.","jiayaoqijia\u002Fcryptoskill","jiayaoqijia","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1453879?v=4","01M6GMYTX7Q7S504VC6E756ENR","YQ","01M6GMYV1QKJ1CC75MTTGT9PR0",80,"MIT","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-keep-tzdb-current\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-keep-tzdb-current\u002FSKILL.md",[19],{"categoryNo":20,"categoryName":21,"taxonomyType":22,"taxonomyTypeDesc":23},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"keep","keep tzdb current","change","update","database","pin","instant","use","stale","iana","service","copy","Wrong","tz","when","2026-11-10 10:12:30",false,"---\nname: keep-tzdb-current\ndescription: Use when a service stores or converts timezones — update and pin the IANA tz database, because governments change offsets and a stale copy silently computes the wrong instant.\n---\n\n# Keep the tz database current\n\nTimezone rules are data, and states change them (Chile, Morocco, Kazakhstan and dozens more have moved within the last few years). A stale tz database is not a bug in your code — until a scheduled job fires an hour off — so treat tzdata like any other dependency you patch.\n\n## Procedure\n\n1. Find every tzdata source in the stack — OS, language runtime, container, and any vendored copy:\n```\ndpkg -l tzdata 2>\u002Fdev\u002Fnull; pip show tzdata tzdata 2>\u002Fdev\u002Fnull; python3 -c \"import zoneinfo; print(zoneinfo.TZPATH)\"\nnpm ls --all 2>\u002Fdev\u002Fnull | grep -i tzdata\n```\n2. Check the version actually loaded, not just the installed file:\n```\npython3 -c \"import importlib.metadata as m; print('tzdata', m.version('tzdata'))\"\nzdump -v America\u002FSantiago | tail -4\n```\n3. Pin the data source explicitly so it does not depend on the host. In Python, install the `tzdata` wheel and prefer it over the system copy in containers:\n```\npip install \"tzdata>=2025.1\"     # pure-Python fallback used when \u002Fusr\u002Fshare\u002Fzoneinfo is absent\n```\n4. Update on a cadence and on news of a change; IANA publishes ~4-6 releases a year:\n```\napt-get update && apt-get install -y --only-upgrade tzdata\npip install -U tzdata\n```\n5. Add a check that fails CI when the data is older than a threshold:\n```python\nimport importlib.metadata as m, datetime as dt\nv = m.version(\"tzdata\")  # 2025.1 -> year 2025\nassert int(v.split(\".\")[0]) >= 2025, f\"tzdata stale: {v}\"\n```\n6. Keep Node\u002FBrowser data in sync: browsers carry their own ICU data, so server and client can differ. Compare a known-changed rule:\n```js\nIntl.DateTimeFormat(\"en\", {timeZone:\"America\u002FSantiago\", timeZoneName:\"short\"}).format(new Date())\n```\n7. After any upgrade, re-run the DST test matrix and diff `zdump` output for the zones you schedule against.\n\n## Pitfalls\n\n- A container built with `--no-install-recommends` may ship no tzdata at all; `ZoneInfo` then silently falls back to UTC instead of erroring.\n- Upgrading tzdata can change a stored business-date mapping retroactively; historical reports can shift. Freeze the rule for past periods if that matters (e.g. financial ledgers).\n- Java bundles its own tzdb in the JDK; upgrading the OS package does not help the JVM until the JDK is patched.\n- Locking a dependency without pinning tzdata means two builds a month apart can produce different schedules from identical code.\n- Browsers update ICU on their own cadence, so a correct server can still render a stale offset client-side; the server is the source of truth.\n\n## Verification\n\n```\npython3 -c \"import importlib.metadata as m; print(m.version('tzdata'))\" && zdump -v Europe\u002FLondon | grep 2026 | head -2\n```\nA version at or above the latest IANA release and a `zdump` that shows the current 2026 transitions = the data is live. Report: \"tzdata pinned at the current release, CI fails below the year threshold, zones re-checked with `zdump` after upgrade.\"\n","# Keep the tz database current\n\nTimezone rules are data, and states change them (Chile, Morocco, Kazakhstan and dozens more have moved within the last few years). A stale tz database is not a bug in your code — until a scheduled job fires an hour off — so treat tzdata like any other dependency you patch.\n\n## Procedure\n\n1. Find every tzdata source in the stack — OS, language runtime, container, and any vendored copy:\n```\ndpkg -l tzdata 2>\u002Fdev\u002Fnull; pip show tzdata tzdata 2>\u002Fdev\u002Fnull; python3 -c \"import zoneinfo; print(zoneinfo.TZPATH)\"\nnpm ls --all 2>\u002Fdev\u002Fnull | grep -i tzdata\n```\n2. Check the version actually loaded, not just the installed file:\n```\npython3 -c \"import importlib.metadata as m; print('tzdata', m.version('tzdata'))\"\nzdump -v America\u002FSantiago | tail -4\n```\n3. Pin the data source explicitly so it does not depend on the host. In Python, install the `tzdata` wheel and prefer it over the system copy in containers:\n```\npip install \"tzdata>=2025.1\"     # pure-Python fallback used when \u002Fusr\u002Fshare\u002Fzoneinfo is absent\n```\n4. Update on a cadence and on news of a change; IANA publishes ~4-6 releases a year:\n```\napt-get update && apt-get install -y --only-upgrade tzdata\npip install -U tzdata\n```\n5. Add a check that fails CI when the data is older than a threshold:\n```python\nimport importlib.metadata as m, datetime as dt\nv = m.version(\"tzdata\")  # 2025.1 -> year 2025\nassert int(v.split(\".\")[0]) >= 2025, f\"tzdata stale: {v}\"\n```\n6. Keep Node\u002FBrowser data in sync: browsers carry their own ICU data, so server and client can differ. Compare a known-changed rule:\n```js\nIntl.DateTimeFormat(\"en\", {timeZone:\"America\u002FSantiago\", timeZoneName:\"short\"}).format(new Date())\n```\n7. After any upgrade, re-run the DST test matrix and diff `zdump` output for the zones you schedule against.\n\n## Pitfalls\n\n- A container built with `--no-install-recommends` may ship no tzdata at all; `ZoneInfo` then silently falls back to UTC instead of erroring.\n- Upgrading tzdata can change a stored business-date mapping retroactively; historical reports can shift. Freeze the rule for past periods if that matters (e.g. financial ledgers).\n- Java bundles its own tzdb in the JDK; upgrading the OS package does not help the JVM until the JDK is patched.\n- Locking a dependency without pinning tzdata means two builds a month apart can produce different schedules from identical code.\n- Browsers update ICU on their own cadence, so a correct server can still render a stale offset client-side; the server is the source of truth.\n\n## Verification\n\n```\npython3 -c \"import importlib.metadata as m; print(m.version('tzdata'))\" && zdump -v Europe\u002FLondon | grep 2026 | head -2\n```\nA version at or above the latest IANA release and a `zdump` that shows the current 2026 transitions = the data is live. Report: \"tzdata pinned at the current release, CI fails below the year threshold, zones re-checked with `zdump` after upgrade.\"\n",{"name":5,"description":7},"main","3df1d0d67b30ff15236561f8c0f9f06d33f42dfd","skills\u002Fpayments\u002F0xklen-keep-tzdb-current",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-11 08:47:40",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add jiayaoqijia\u002Fcryptoskill --skill keep-tzdb-current",{"tool":60,"command":61},"bunx","bunx skills add jiayaoqijia\u002Fcryptoskill --skill keep-tzdb-current",{"tool":63,"command":64},"pnpm","pnpm dlx skills add jiayaoqijia\u002Fcryptoskill --skill keep-tzdb-current","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-keep-tzdb-current\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","参考文档",343,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-keep-tzdb-current\u002FSOURCE.md",{"path":79,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":80,"sourceHtmlUrl":81},"TRUST.auto.yaml",2141,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-keep-tzdb-current\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",[],[183,184,185,186,187,188,189,32,190,191,192],"tests","cover","verify tests cover changed lines","verify","coverage","pr","exercise","patch","code","share"]