[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6J7TXRZ4FDTBSP0M3QSC8F3":3,"skill-same:01M6J7TXRZ4FDTBSP0M3QSC8F3":78},{"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":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":50,"ownerDescription":51,"updatedAt":52,"install":53,"resources":66},"01M6J7TXRZ4FDTBSP0M3QSC8F3","ads-attribution",null,"Audit cross-platform attribution, conversion definitions, reporting windows, GA4, AdServices and AdAttributionKit, MMPs, browser and server events, offline conversions, and platform reconciliation. Use for attribution audit, attribution models, conversion windows, requests to add or total Meta and Google conversions, incompatible reporting-window aggregation, GA4 attribution, MMP review, AppsFlyer, Adjust, Branch, Singular, or cross-platform discrepancies.","sgomez-dev\u002Fclaude-skills","sgomez-dev","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F81492002?v=4","01M6J7TFP3PR3PTGBAG3N9Z007","Santiago Gómez de la Torre Romero","01M6J7TFT704JY40NG1YE3V5JQ",1,"MIT","https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fexternal\u002Fads-attribution\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"attribution","ads","ads attribution","conversion","window","for","requests","adjust","platform","reconciliation","ga4","models","review","use","branch","Meta","server","audit","browser","windows","2026-11-10 10:12:30",false,"---\nname: ads-attribution\ndescription: \"Audit cross-platform attribution, conversion definitions, reporting windows, GA4, AdServices and AdAttributionKit, MMPs, browser and server events, offline conversions, and platform reconciliation. Use for attribution audit, attribution models, conversion windows, requests to add or total Meta and Google conversions, incompatible reporting-window aggregation, GA4 attribution, MMP review, AppsFlyer, Adjust, Branch, Singular, or cross-platform discrepancies.\"\n---\n\n# Attribution Audit\n\n1. Read the main `ads` contract and normalized account snapshots.\n2. Declare the business conversion, value, data window, timezone, currency, and\n   decision the attribution analysis must support.\n3. Inventory every browser, server, platform, analytics, MMP, offline, and app\n   attribution source with its identity, counting, deduplication, and privacy rules.\n4. Reconcile comparable events and explain differences caused by eligibility,\n   view-through rules, consent, modeled data, conversion lag, thresholds, or scope.\n5. Separate measurement quality from platform-reported performance.\n6. Return findings, contradictions, confidence, missing evidence, and a measurement\n   improvement plan through the common JSON contract.\n\nDo not assume one platform is ground truth, add incompatible reports together, or\nrecommend an attribution model without the operator's decision context.\n\n## Comparability gate\n\nReject aggregation until the sources share, or are explicitly normalized to, the\nsame conversion event and value definition, attribution window, click\u002Fview scope,\ncounting method, deduplication identity, timezone, currency, attribution model,\nand modeled-data treatment. Until then, report the values side by side with their\ndefinitions; do not compute a total.\n\nExample: Meta seven-day conversions and Google thirty-day conversions are\nincompatible. Refuse to add them, reconcile windows and definitions first, and\nonly aggregate a newly comparable dataset.\n","# Attribution Audit\n\n1. Read the main `ads` contract and normalized account snapshots.\n2. Declare the business conversion, value, data window, timezone, currency, and\n   decision the attribution analysis must support.\n3. Inventory every browser, server, platform, analytics, MMP, offline, and app\n   attribution source with its identity, counting, deduplication, and privacy rules.\n4. Reconcile comparable events and explain differences caused by eligibility,\n   view-through rules, consent, modeled data, conversion lag, thresholds, or scope.\n5. Separate measurement quality from platform-reported performance.\n6. Return findings, contradictions, confidence, missing evidence, and a measurement\n   improvement plan through the common JSON contract.\n\nDo not assume one platform is ground truth, add incompatible reports together, or\nrecommend an attribution model without the operator's decision context.\n\n## Comparability gate\n\nReject aggregation until the sources share, or are explicitly normalized to, the\nsame conversion event and value definition, attribution window, click\u002Fview scope,\ncounting method, deduplication identity, timezone, currency, attribution model,\nand modeled-data treatment. Until then, report the values side by side with their\ndefinitions; do not compute a total.\n\nExample: Meta seven-day conversions and Google thirty-day conversions are\nincompatible. Refuse to add them, reconcile windows and definitions first, and\nonly aggregate a newly comparable dataset.\n",{"name":5,"description":7},"main","563fd9d0d01a7240bf22073090c9484e9070e8e8","external\u002Fads-attribution",0,"https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills","https:\u002F\u002Fgithub.com\u002Fsgomez-dev","https:\u002F\u002Fsgomez.dev","\"Volnuratus non victus\"","2026-10-01 18:25:47",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add sgomez-dev\u002Fclaude-skills --skill ads-attribution",{"tool":59,"command":60},"bunx","bunx skills add sgomez-dev\u002Fclaude-skills --skill ads-attribution",{"tool":62,"command":63},"pnpm","pnpm dlx skills add sgomez-dev\u002Fclaude-skills --skill ads-attribution","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fexternal\u002Fads-attribution\u002FSKILL.md",true,[67,72],{"path":68,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"LICENSE","许可证",1069,"https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fexternal\u002Fads-attribution\u002FLICENSE",{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"UPSTREAM.md","REFERENCE","参考文档",801,"https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fexternal\u002Fads-attribution\u002FUPSTREAM.md",[79,90,98,109,123,132],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":39},"01M6J8Q0WEP76PV381RJDTRTV4","template","YOUR_DESCRIPTION_HERE (shown in command palette, keep under 80 chars)","https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Ftemplate\u002FSKILL.md",[],[81,86,87,88,89],"command palette","command","palette","keep",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":39},"01M6J8PY4KNE7SQP5BD2X1YMHJ","multi","Line one continues here.   Second sentence.","https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fsite\u002Ftests\u002Ffixtures\u002Frepo\u002Fexternal\u002Fmulti\u002FSKILL.md",[],[92,97],"line",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":39},"01M6J8PVS7AY0AWP36JRQ7T8S6","ffmpeg","FFmpeg recipes for video production.","https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fsite\u002Ftests\u002Ffixtures\u002Frepo\u002Fexternal\u002Fffmpeg\u002FSKILL.md",[],[100,105,106,107,108,24],"Production","Video","video production","recipes",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":120,"publishedAt":39},"01M6J8PS6NDT2VY6Y72QW3NGGH","secret-skill","Private, never published.","https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fsite\u002Ftests\u002Ffixtures\u002Frepo\u002Fexternal\u002F.local\u002Fsecret-skill\u002FSKILL.md",[115],{"categoryNo":116,"categoryName":117,"taxonomyType":118,"taxonomyTypeDesc":119},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[121,122],"secret skill","never",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":39},"01M6J8PQETD1FW6BWPPSWXFH5N","external-no-license","Has no license.","https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fsite\u002Ftests\u002Ffixtures\u002Frepo\u002Fbroken\u002Fexternal-no-license\u002FSKILL.md",[],[130,131],"license","external no license",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":149,"publishedAt":39},"01M6J8PJ5XGMZZZZGECEDHN13J","write-swift","How to write modern Swift well — modeling with value types, Swift 6 data-race safety and approachable concurrency (@concurrent, main-actor-by-default, actors, task groups), protocols and generics (some vs any), API design, performance and ARC, Swift Testing, macros, and the modern language features agents don't know about yet. Use when writing, reviewing, or migrating Swift, or when a concurrency error, a hang, a data race, a retain cycle, or a performance problem needs fixing.","https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fexternal\u002Fwrite-swift\u002FSKILL.md",[138,141,144],{"categoryNo":139,"categoryName":140,"taxonomyType":118,"taxonomyTypeDesc":119},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":142,"categoryName":143,"taxonomyType":118,"taxonomyTypeDesc":119},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":145,"categoryName":146,"taxonomyType":147,"taxonomyTypeDesc":148},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[150,151,152,153,154,155,156,157,158,159,160,161,44,162,163,164,165,166,167,168],"swift","write","write swift","features","retain","testing","types","error","how to","problem","modeling","cycle","default","how","api","concurrency","performance","writing","design"]