[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GZXEX47SHPMT0W7KF74GTR":3,"skill-same:01M6GZXEX47SHPMT0W7KF74GTR":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},"01M6GZXEX47SHPMT0W7KF74GTR","retain-compliance-evidence-on-a-schedule",null,"Use when setting how long screening results, alerts, decisions and travel-rule records are kept, and how they are stored so an examiner can verify them years later.","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-retain-compliance-evidence-on-a-schedule\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-retain-compliance-evidence-on-a-schedule\u002FSKILL.md",[19],{"categoryNo":20,"categoryName":21,"taxonomyType":22,"taxonomyTypeDesc":23},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"retain","schedule","retain compliance evidence on a schedule","evidence","compliance","later","when","can","screening","rule","records","long","alerts","travel","use","results","decisions","how","verify","2026-11-10 10:12:30",false,"---\nname: retain-compliance-evidence-on-a-schedule\ndescription: Use when setting how long screening results, alerts, decisions and travel-rule records are kept, and how they are stored so an examiner can verify them years later.\n---\n\n# Retain compliance evidence on a schedule\n\nThe record is the control. A screen that happened but cannot be evidenced is treated as a screen\nthat did not happen, so retention is designed around reconstructing a decision, not around\narchiving files.\n\n## Procedure\n\n1. Classify each record type and attach a retention period with its source:\n\n       cat > retention.csv \u003C\u003C'CSV'\n       record_type,period_years,basis,format\n       sanctions_screen_result,5,BSA 31 CFR 1010.430(a),json\n       travel_rule_payload,5,BSA\u002FFATF R.16,encrypted_json\n       kyc_verification_ref,5,AMLD5 as applied,pdf_ref_only\n       alert_disposition,5,internal policy,json\n       CSV\n\n2. Store records immutably. Use object-lock in compliance mode with a retention-until date, so a\n   compromised application identity cannot rewrite history.\n\n       aws s3api put-object --bucket compliance-archive --key \"$ID\" --body \"$ID.json\" \\\n         --object-lock-mode COMPLIANCE --object-lock-retain-until-date \"2031-01-01T00:00:00Z\"\n\n3. Write a hash chain: each record's digest includes the previous record's digest, so a gap or an\n   edit is detectable without trusting the store.\n\n       python3 -c 'import hashlib,json;s=open(\"prev.json\",\"rb\").read();\n       print(hashlib.sha256(s+open(\"rec.json\",\"rb\").read()).hexdigest())'\n\n4. Keep the queryable index separate from the evidence blob. The index is small and lets you\n   answer \"what did we do on date X\", while the blob holds the full payload under lock.\n\n5. Encrypt payloads and keep the key outside the archive account. Retention without key custody\n   is only an availability plan.\n\n6. Test the retrieval path on a timer, not on the first examination. Pull a record from two years\n   back and confirm it decrypts and validates against its hash.\n\n## Pitfalls\n\n- Retaining decision metadata but not the input. Without the list digest and the screened subject,\n  the decision cannot be re-evaluated.\n- Letting retention run past the period because deletion is manual. Legal hold is the exception;\n  the default should be automated expiry.\n- Storing person-level data in the immutable archive beyond its period, which converts a records\n  programme into a data-protection problem.\n- Assuming a backup is an archive. Backups rotate; the archive must be addressable by record id\n  for the whole period.\n- Skipping the hash chain, then discovering during an examination that no one can show the record\n  was not altered.\n\n## Verification\n\n    python3 -c 'import csv;r=list(csv.DictReader(open(\"retention.csv\")));\n    print(len(r),\"types\"); assert all(x[\"basis\"] for x in r); print(\"all basis-cited\")'\n    aws s3api get-object-retention --bucket compliance-archive --key sample.json | jq -r '.Retention.Mode'\n\nA pass shows every record type cites a retention basis and the archive returns `COMPLIANCE` mode\nfor a sampled object.\n\nReport the record types, periods and bases, the archive location, the last successful retrieval\ntest, and any keys without an expiry. Final decisions about retention periods and holds belong to\na qualified compliance officer and counsel.\n","# Retain compliance evidence on a schedule\n\nThe record is the control. A screen that happened but cannot be evidenced is treated as a screen\nthat did not happen, so retention is designed around reconstructing a decision, not around\narchiving files.\n\n## Procedure\n\n1. Classify each record type and attach a retention period with its source:\n\n       cat > retention.csv \u003C\u003C'CSV'\n       record_type,period_years,basis,format\n       sanctions_screen_result,5,BSA 31 CFR 1010.430(a),json\n       travel_rule_payload,5,BSA\u002FFATF R.16,encrypted_json\n       kyc_verification_ref,5,AMLD5 as applied,pdf_ref_only\n       alert_disposition,5,internal policy,json\n       CSV\n\n2. Store records immutably. Use object-lock in compliance mode with a retention-until date, so a\n   compromised application identity cannot rewrite history.\n\n       aws s3api put-object --bucket compliance-archive --key \"$ID\" --body \"$ID.json\" \\\n         --object-lock-mode COMPLIANCE --object-lock-retain-until-date \"2031-01-01T00:00:00Z\"\n\n3. Write a hash chain: each record's digest includes the previous record's digest, so a gap or an\n   edit is detectable without trusting the store.\n\n       python3 -c 'import hashlib,json;s=open(\"prev.json\",\"rb\").read();\n       print(hashlib.sha256(s+open(\"rec.json\",\"rb\").read()).hexdigest())'\n\n4. Keep the queryable index separate from the evidence blob. The index is small and lets you\n   answer \"what did we do on date X\", while the blob holds the full payload under lock.\n\n5. Encrypt payloads and keep the key outside the archive account. Retention without key custody\n   is only an availability plan.\n\n6. Test the retrieval path on a timer, not on the first examination. Pull a record from two years\n   back and confirm it decrypts and validates against its hash.\n\n## Pitfalls\n\n- Retaining decision metadata but not the input. Without the list digest and the screened subject,\n  the decision cannot be re-evaluated.\n- Letting retention run past the period because deletion is manual. Legal hold is the exception;\n  the default should be automated expiry.\n- Storing person-level data in the immutable archive beyond its period, which converts a records\n  programme into a data-protection problem.\n- Assuming a backup is an archive. Backups rotate; the archive must be addressable by record id\n  for the whole period.\n- Skipping the hash chain, then discovering during an examination that no one can show the record\n  was not altered.\n\n## Verification\n\n    python3 -c 'import csv;r=list(csv.DictReader(open(\"retention.csv\")));\n    print(len(r),\"types\"); assert all(x[\"basis\"] for x in r); print(\"all basis-cited\")'\n    aws s3api get-object-retention --bucket compliance-archive --key sample.json | jq -r '.Retention.Mode'\n\nA pass shows every record type cites a retention basis and the archive returns `COMPLIANCE` mode\nfor a sampled object.\n\nReport the record types, periods and bases, the archive location, the last successful retrieval\ntest, and any keys without an expiry. Final decisions about retention periods and holds belong to\na qualified compliance officer and counsel.\n",{"name":5,"description":7},"main","3df1d0d67b30ff15236561f8c0f9f06d33f42dfd","skills\u002Fpayments\u002F0xklen-retain-compliance-evidence-on-a-schedule",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 retain-compliance-evidence-on-a-schedule",{"tool":64,"command":65},"bunx","bunx skills add jiayaoqijia\u002Fcryptoskill --skill retain-compliance-evidence-on-a-schedule",{"tool":67,"command":68},"pnpm","pnpm dlx skills add jiayaoqijia\u002Fcryptoskill --skill retain-compliance-evidence-on-a-schedule","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-retain-compliance-evidence-on-a-schedule\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","参考文档",366,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-retain-compliance-evidence-on-a-schedule\u002FSOURCE.md",{"path":83,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":84,"sourceHtmlUrl":85},"TRUST.auto.yaml",2217,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-retain-compliance-evidence-on-a-schedule\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",[],[187,188,189,43,190,191,192,39,193,194,195],"tests","cover","verify tests cover changed lines","coverage","pr","exercise","patch","code","share"]