@raishin/vanguard-frontier-agentic 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +14 -0
- package/.cursor-plugin/plugin.json +14 -0
- package/.github/plugin/marketplace.json +1 -1
- package/README.md +7 -2
- package/agents/marketing/README.md +44 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/AGENT.md +53 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/harnesses/codex.toml +33 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/harnesses/copilot.agent.md +36 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/harnesses/cursor.agent.md +36 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/harnesses/gemini.agent.md +36 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/marketing/ai-advertising-targeting-fairness-review-agent/metadata.json +31 -0
- package/agents/marketing/analytics-data-minimization-review-agent/AGENT.md +51 -0
- package/agents/marketing/analytics-data-minimization-review-agent/harnesses/claude-code.agent.md +34 -0
- package/agents/marketing/analytics-data-minimization-review-agent/harnesses/codex.toml +33 -0
- package/agents/marketing/analytics-data-minimization-review-agent/harnesses/copilot.agent.md +34 -0
- package/agents/marketing/analytics-data-minimization-review-agent/harnesses/cursor.agent.md +34 -0
- package/agents/marketing/analytics-data-minimization-review-agent/harnesses/gemini.agent.md +34 -0
- package/agents/marketing/analytics-data-minimization-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/analytics-data-minimization-review-agent/harnesses/kiro-ide.agent.md +34 -0
- package/agents/marketing/analytics-data-minimization-review-agent/metadata.json +31 -0
- package/agents/marketing/email-sender-authentication-review-agent/AGENT.md +50 -0
- package/agents/marketing/email-sender-authentication-review-agent/harnesses/claude-code.agent.md +33 -0
- package/agents/marketing/email-sender-authentication-review-agent/harnesses/codex.toml +32 -0
- package/agents/marketing/email-sender-authentication-review-agent/harnesses/copilot.agent.md +33 -0
- package/agents/marketing/email-sender-authentication-review-agent/harnesses/cursor.agent.md +33 -0
- package/agents/marketing/email-sender-authentication-review-agent/harnesses/gemini.agent.md +33 -0
- package/agents/marketing/email-sender-authentication-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/email-sender-authentication-review-agent/harnesses/kiro-ide.agent.md +33 -0
- package/agents/marketing/email-sender-authentication-review-agent/metadata.json +31 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/AGENT.md +54 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/harnesses/claude-code.agent.md +37 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/harnesses/codex.toml +33 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/harnesses/copilot.agent.md +37 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/harnesses/cursor.agent.md +37 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/harnesses/gemini.agent.md +37 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/harnesses/kiro-ide.agent.md +37 -0
- package/agents/marketing/eu-ai-act-marketing-system-review-agent/metadata.json +31 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/AGENT.md +52 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/harnesses/claude-code.agent.md +35 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/harnesses/codex.toml +33 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/harnesses/copilot.agent.md +35 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/harnesses/cursor.agent.md +35 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/harnesses/gemini.agent.md +35 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/harnesses/kiro-ide.agent.md +35 -0
- package/agents/marketing/influencer-disclosure-compliance-review-agent/metadata.json +31 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/AGENT.md +54 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/harnesses/claude-code.agent.md +37 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/harnesses/codex.toml +34 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/harnesses/copilot.agent.md +37 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/harnesses/cursor.agent.md +37 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/harnesses/gemini.agent.md +37 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/harnesses/kiro-ide.agent.md +37 -0
- package/agents/marketing/lookalike-audience-upload-compliance-review-agent/metadata.json +31 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/AGENT.md +51 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/harnesses/claude-code.agent.md +34 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/harnesses/codex.toml +33 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/harnesses/copilot.agent.md +34 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/harnesses/cursor.agent.md +34 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/harnesses/gemini.agent.md +34 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/harnesses/kiro-ide.agent.md +34 -0
- package/agents/marketing/marketing-consent-data-collection-review-agent/metadata.json +31 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/AGENT.md +51 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/harnesses/claude-code.agent.md +34 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/harnesses/codex.toml +33 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/harnesses/copilot.agent.md +34 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/harnesses/cursor.agent.md +34 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/harnesses/gemini.agent.md +34 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/harnesses/kiro-ide.agent.md +34 -0
- package/agents/marketing/marketing-conversion-flow-dark-pattern-review-agent/metadata.json +31 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/AGENT.md +50 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/harnesses/claude-code.agent.md +33 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/harnesses/codex.toml +32 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/harnesses/copilot.agent.md +33 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/harnesses/cursor.agent.md +33 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/harnesses/gemini.agent.md +33 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/harnesses/kiro-ide.agent.md +33 -0
- package/agents/marketing/marketing-email-list-retention-review-agent/metadata.json +31 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/AGENT.md +50 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/harnesses/claude-code.agent.md +33 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/harnesses/codex.toml +32 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/harnesses/copilot.agent.md +33 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/harnesses/cursor.agent.md +33 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/harnesses/gemini.agent.md +33 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/harnesses/kiro-ide.agent.md +33 -0
- package/agents/marketing/marketing-gpc-signal-honoring-review-agent/metadata.json +31 -0
- package/agents/marketing/marketing-maestro-agent/AGENT.md +62 -0
- package/agents/marketing/marketing-maestro-agent/PERMISSIONS.md +75 -0
- package/agents/marketing/marketing-maestro-agent/README.md +62 -0
- package/agents/marketing/marketing-maestro-agent/harnesses/claude-code.agent.md +43 -0
- package/agents/marketing/marketing-maestro-agent/harnesses/codex.toml +35 -0
- package/agents/marketing/marketing-maestro-agent/harnesses/copilot.agent.md +43 -0
- package/agents/marketing/marketing-maestro-agent/harnesses/cursor.agent.md +43 -0
- package/agents/marketing/marketing-maestro-agent/harnesses/gemini.agent.md +43 -0
- package/agents/marketing/marketing-maestro-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/marketing-maestro-agent/harnesses/kiro-ide.agent.md +43 -0
- package/agents/marketing/marketing-maestro-agent/metadata.json +38 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/AGENT.md +50 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/harnesses/claude-code.agent.md +33 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/harnesses/codex.toml +32 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/harnesses/copilot.agent.md +33 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/harnesses/cursor.agent.md +33 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/harnesses/gemini.agent.md +33 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/harnesses/kiro-ide.agent.md +33 -0
- package/agents/marketing/marketing-pixel-data-leakage-review-agent/metadata.json +31 -0
- package/agents/marketing/martech-access-governance-review-agent/AGENT.md +51 -0
- package/agents/marketing/martech-access-governance-review-agent/harnesses/claude-code.agent.md +34 -0
- package/agents/marketing/martech-access-governance-review-agent/harnesses/codex.toml +33 -0
- package/agents/marketing/martech-access-governance-review-agent/harnesses/copilot.agent.md +34 -0
- package/agents/marketing/martech-access-governance-review-agent/harnesses/cursor.agent.md +34 -0
- package/agents/marketing/martech-access-governance-review-agent/harnesses/gemini.agent.md +34 -0
- package/agents/marketing/martech-access-governance-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/martech-access-governance-review-agent/harnesses/kiro-ide.agent.md +34 -0
- package/agents/marketing/martech-access-governance-review-agent/metadata.json +31 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/AGENT.md +50 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/harnesses/claude-code.agent.md +33 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/harnesses/codex.toml +32 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/harnesses/copilot.agent.md +33 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/harnesses/cursor.agent.md +33 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/harnesses/gemini.agent.md +33 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/harnesses/kiro-ide.agent.md +33 -0
- package/agents/marketing/programmatic-supply-chain-integrity-review-agent/metadata.json +31 -0
- package/catalog/agents.json +765 -197
- package/catalog/asset-integrity.json +859 -29
- package/catalog/install-roles.json +38 -2
- package/catalog/skill-manifest.json +318 -0
- package/catalog/skills.json +596 -199
- package/package.json +1 -1
- package/plugins/vanguard-frontier-agentic/.codex-plugin/plugin.json +1 -1
- package/skills/marketing/ai-advertising-targeting-fairness-review/SKILL.md +43 -0
- package/skills/marketing/ai-advertising-targeting-fairness-review/metadata.json +21 -0
- package/skills/marketing/ai-advertising-targeting-fairness-review/references/workflow-and-output.md +150 -0
- package/skills/marketing/analytics-data-minimization-review/SKILL.md +44 -0
- package/skills/marketing/analytics-data-minimization-review/metadata.json +22 -0
- package/skills/marketing/analytics-data-minimization-review/references/workflow-and-output.md +187 -0
- package/skills/marketing/email-sender-authentication-review/SKILL.md +43 -0
- package/skills/marketing/email-sender-authentication-review/metadata.json +22 -0
- package/skills/marketing/email-sender-authentication-review/references/workflow-and-output.md +152 -0
- package/skills/marketing/eu-ai-act-marketing-system-review/SKILL.md +43 -0
- package/skills/marketing/eu-ai-act-marketing-system-review/metadata.json +21 -0
- package/skills/marketing/eu-ai-act-marketing-system-review/references/workflow-and-output.md +176 -0
- package/skills/marketing/influencer-disclosure-compliance-review/SKILL.md +43 -0
- package/skills/marketing/influencer-disclosure-compliance-review/metadata.json +22 -0
- package/skills/marketing/influencer-disclosure-compliance-review/references/workflow-and-output.md +156 -0
- package/skills/marketing/lookalike-audience-upload-compliance-review/SKILL.md +44 -0
- package/skills/marketing/lookalike-audience-upload-compliance-review/metadata.json +21 -0
- package/skills/marketing/lookalike-audience-upload-compliance-review/references/workflow-and-output.md +203 -0
- package/skills/marketing/marketing-consent-data-collection-review/SKILL.md +44 -0
- package/skills/marketing/marketing-consent-data-collection-review/metadata.json +21 -0
- package/skills/marketing/marketing-consent-data-collection-review/references/workflow-and-output.md +139 -0
- package/skills/marketing/marketing-conversion-flow-dark-pattern-review/SKILL.md +45 -0
- package/skills/marketing/marketing-conversion-flow-dark-pattern-review/metadata.json +22 -0
- package/skills/marketing/marketing-conversion-flow-dark-pattern-review/references/workflow-and-output.md +160 -0
- package/skills/marketing/marketing-email-list-retention-review/SKILL.md +43 -0
- package/skills/marketing/marketing-email-list-retention-review/metadata.json +22 -0
- package/skills/marketing/marketing-email-list-retention-review/references/workflow-and-output.md +144 -0
- package/skills/marketing/marketing-gpc-signal-honoring-review/SKILL.md +42 -0
- package/skills/marketing/marketing-gpc-signal-honoring-review/metadata.json +22 -0
- package/skills/marketing/marketing-gpc-signal-honoring-review/references/workflow-and-output.md +145 -0
- package/skills/marketing/marketing-maestro/README.md +37 -0
- package/skills/marketing/marketing-maestro/SKILL.md +49 -0
- package/skills/marketing/marketing-maestro/metadata.json +26 -0
- package/skills/marketing/marketing-maestro/references/safety-checklist.md +67 -0
- package/skills/marketing/marketing-maestro/references/workflow-and-output.md +110 -0
- package/skills/marketing/marketing-pixel-data-leakage-review/SKILL.md +43 -0
- package/skills/marketing/marketing-pixel-data-leakage-review/metadata.json +21 -0
- package/skills/marketing/marketing-pixel-data-leakage-review/references/workflow-and-output.md +129 -0
- package/skills/marketing/martech-access-governance-review/SKILL.md +45 -0
- package/skills/marketing/martech-access-governance-review/metadata.json +21 -0
- package/skills/marketing/martech-access-governance-review/references/workflow-and-output.md +116 -0
- package/skills/marketing/programmatic-supply-chain-integrity-review/SKILL.md +43 -0
- package/skills/marketing/programmatic-supply-chain-integrity-review/metadata.json +22 -0
- package/skills/marketing/programmatic-supply-chain-integrity-review/references/workflow-and-output.md +164 -0
- package/tests/fixtures/marketing-maestro-routing/expected/001-happy-ai-advertising-targeting-fairness-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/002-happy-analytics-data-minimization-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/003-happy-consent-data-collection-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/004-happy-conversion-flow-dark-pattern-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/005-happy-email-list-retention-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/006-happy-email-sender-authentication-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/007-happy-eu-ai-act-marketing-system-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/008-happy-gpc-signal-honoring-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/009-happy-influencer-disclosure-compliance-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/010-happy-lookalike-audience-upload-compliance-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/011-happy-martech-access-governance-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/012-happy-pixel-data-leakage-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/013-happy-programmatic-supply-chain-integrity-review.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/adv-ambiguous.json +4 -0
- package/tests/fixtures/marketing-maestro-routing/expected/adv-instruction-injection.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/expected/adv-live-guard-gate.json +4 -0
- package/tests/fixtures/marketing-maestro-routing/expected/adv-persona-replacement.json +6 -0
- package/tests/fixtures/marketing-maestro-routing/expected/adv-secrets-bait.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/001-happy-ai-advertising-targeting-fairness-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/002-happy-analytics-data-minimization-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/003-happy-consent-data-collection-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/004-happy-conversion-flow-dark-pattern-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/005-happy-email-list-retention-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/006-happy-email-sender-authentication-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/007-happy-eu-ai-act-marketing-system-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/008-happy-gpc-signal-honoring-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/009-happy-influencer-disclosure-compliance-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/010-happy-lookalike-audience-upload-compliance-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/011-happy-martech-access-governance-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/012-happy-pixel-data-leakage-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/013-happy-programmatic-supply-chain-integrity-review.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/adv-ambiguous.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/adv-instruction-injection.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/adv-live-guard-gate.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/adv-persona-replacement.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/inputs/adv-secrets-bait.json +7 -0
- package/tests/fixtures/marketing-maestro-routing/taxonomy.json +183 -0
- package/tests/validate-catalog.py +1 -0
- package/tests/validate-maestro-routing.py +4 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lookalike-audience-upload-compliance-review
|
|
3
|
+
description: Use this skill when reviewing custom-audience and lookalike-audience upload specifications for hashing adequacy, PII field scope, consent-basis validity, and platform data-sharing restrictions before the upload is submitted to Meta, Google, LinkedIn, or TikTok. Trigger when a user provides an audience upload field-mapping specification (CSV schema or platform upload template), declared hashing method, consent-basis documentation, or originating list segment metadata — or when they ask whether their customer list upload or lookalike seed list is compliant with GDPR, CCPA/CPRA, or platform terms before uploading.
|
|
4
|
+
allowed-tools: Read Grep Glob
|
|
5
|
+
metadata:
|
|
6
|
+
author: "github: Raishin"
|
|
7
|
+
version: "0.1.0"
|
|
8
|
+
updated: "2026-05-17"
|
|
9
|
+
category: data
|
|
10
|
+
lifecycle: experimental
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Lookalike Audience Upload Compliance Review
|
|
14
|
+
|
|
15
|
+
## Purpose
|
|
16
|
+
This skill reviews custom-audience and lookalike-audience upload specifications for hashing adequacy, PII field scope, consent-basis validity, and platform data-sharing restrictions before the upload is submitted to Meta, Google, LinkedIn, or TikTok. Customer list uploads are one of the most common data-sharing vectors in marketing operations: a brand transmits personal data — email, phone, name, address — to an ad platform under the guise of audience matching. The legal basis, the scope of consent granted, the minimality of the field set, and the reversibility of the hashing method all determine whether the upload is a lawful data-sharing arrangement or an unauthorized third-party disclosure that violates GDPR Article 5 and 6, CCPA/CPRA §1798.100, and platform terms. The review catches underhashed identifiers, oversized field sets, consent-scope mismatches, and re-identification surfaces before the upload fires.
|
|
17
|
+
|
|
18
|
+
## Lean operating rules
|
|
19
|
+
- Treat email addresses, phone numbers, or other direct identifiers hashed with MD5 rather than SHA-256 (or better) as HIGH — MD5 is trivially reversible via rainbow table for common email formats and does not constitute adequate pseudonymization under GDPR Article 5(1)(f).
|
|
20
|
+
- Treat a seed list for a financial-services, insurance, or healthcare lookalike that includes customers who consented only to service communications (transactional consent) as HIGH — sharing that list with an ad platform for advertising targeting exceeds the consent scope, constituting unauthorized "sharing" of personal information under CPRA §1798.100 and a purpose-limitation violation under GDPR Article 5(1)(b).
|
|
21
|
+
- Treat a field mapping that includes home postal code combined with email and phone as HIGH — the combination creates a high-confidence re-identification surface beyond what the matching algorithm requires, violating the data-minimization principle under GDPR Article 5(1)(c) and FTC data-minimization guidance.
|
|
22
|
+
- Treat unhashed upload of any direct identifier (plain-text email, phone, name) as HIGH — no platform terms permit plain-text PII upload, and transmission in the clear is an unequivocal data breach of the identifier.
|
|
23
|
+
- Treat the absence of a documented lawful basis (GDPR Article 6) for the data-sharing arrangement — neither the original collection basis nor a separate legitimate-interest or consent basis for sharing with the ad platform — as HIGH.
|
|
24
|
+
- Treat lookalike seed lists that include individuals in jurisdictions where the operator has no data-processing agreement with the ad platform (e.g., EU residents shared with a non-adequate-country platform without SCCs) as HIGH — the transfer itself is unlawful under GDPR Chapter V.
|
|
25
|
+
- Flag field sets that include date of birth, precise geolocation, or transaction-level history where only email and phone are needed for matching as MEDIUM — over-inclusion violates data minimization and increases re-identification risk.
|
|
26
|
+
- Flag platform-specific restrictions violated by the field mapping — e.g., Meta's Customer List Custom Audience terms prohibit health, financial account data, and sensitive categories — as MEDIUM when inclusion is marginal but potentially violating.
|
|
27
|
+
- Flag the absence of a documented retention or deletion schedule for the matched and unmatched records on the platform side as MEDIUM — GDPR Article 5(1)(e) requires storage limitation; the user should confirm platform-side deletion timelines.
|
|
28
|
+
- Do not recommend uploading any field not strictly needed for the matching objective; default to the minimum field set (normalized lowercase email SHA-256 hashed) unless the user explicitly requires phone or name for match-rate reasons.
|
|
29
|
+
- Label every finding with evidence basis: field-mapping spec provided, hashing method declared, consent documentation provided, or inference from missing information.
|
|
30
|
+
|
|
31
|
+
## References
|
|
32
|
+
Load these only when needed:
|
|
33
|
+
- [Workflow and output contract](references/workflow-and-output.md) — use when executing the full review or formatting the final answer.
|
|
34
|
+
|
|
35
|
+
## Response minimum
|
|
36
|
+
Return, at minimum:
|
|
37
|
+
- Hashing adequacy assessment (algorithm, where hashing occurs, platform requirement alignment)
|
|
38
|
+
- PII field-scope and data-minimization assessment (fields included vs. fields needed)
|
|
39
|
+
- Consent-basis validity assessment (original collection basis, scope for ad-platform sharing)
|
|
40
|
+
- Cross-border transfer assessment (GDPR Chapter V if EU data subjects are in the list)
|
|
41
|
+
- Platform-specific restriction check (Meta, Google, LinkedIn, TikTok terms)
|
|
42
|
+
- Re-identification surface assessment (field combination risk)
|
|
43
|
+
- Severity-labelled finding list (critical / high / medium / low)
|
|
44
|
+
- Safe next actions
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "lookalike-audience-upload-compliance-review",
|
|
3
|
+
"name": "Lookalike Audience Upload Compliance Review",
|
|
4
|
+
"type": "skill",
|
|
5
|
+
"provider": "marketing",
|
|
6
|
+
"harnesses": ["codex", "claude-code", "cursor", "gemini", "kiro", "other"],
|
|
7
|
+
"summary": "Review custom-audience and lookalike-audience upload specifications for hashing adequacy, PII field scope, consent-basis validity, and platform data-sharing restrictions before upload to Meta, Google, LinkedIn, or TikTok — catching underhashed identifiers, consent-scope mismatches, and re-identification surfaces.",
|
|
8
|
+
"source_type": "original",
|
|
9
|
+
"official_docs": [
|
|
10
|
+
"https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32016R0679",
|
|
11
|
+
"https://oag.ca.gov/privacy/ccpa",
|
|
12
|
+
"https://www.ftc.gov/reports/data-brokers-call-transparency-accountability",
|
|
13
|
+
"https://developers.facebook.com/docs/marketing-api/audiences/guides/custom-audiences/",
|
|
14
|
+
"https://support.google.com/google-ads/answer/6334160"
|
|
15
|
+
],
|
|
16
|
+
"security_notes": "Custom-audience uploads transmit hashed personal data to ad platforms under data-sharing arrangements that must have a lawful basis, appropriate consent scope, and adequate pseudonymization. Review works from sanitized field-mapping specifications, declared hashing methods, and consent-basis documentation only; never request actual audience files, real customer records, or platform API credentials.",
|
|
17
|
+
"last_verified": "2026-05-17",
|
|
18
|
+
"path": "skills/marketing/lookalike-audience-upload-compliance-review",
|
|
19
|
+
"author": "github: Raishin",
|
|
20
|
+
"version": "0.1.0"
|
|
21
|
+
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# Workflow and Output Contract
|
|
2
|
+
|
|
3
|
+
## Workflow
|
|
4
|
+
|
|
5
|
+
### Step 1 — Collect inputs
|
|
6
|
+
|
|
7
|
+
Ask the user to provide one or more of the following as sanitized documents (replace real records with schema descriptions; no actual customer PII, no platform API credentials):
|
|
8
|
+
- Audience upload field-mapping specification (CSV column headers, platform upload template, or field list with data types)
|
|
9
|
+
- Declared hashing method (algorithm, whether hashing occurs client-side or server-side, and normalization steps applied before hashing)
|
|
10
|
+
- Consent-basis documentation (privacy notice excerpt, consent-collection mechanism, opt-in/opt-out flow, original collection purpose)
|
|
11
|
+
- Originating list segment metadata (how the list was segmented, which customer population it covers, what action or consent triggered inclusion)
|
|
12
|
+
- Target platform(s) (Meta, Google, LinkedIn, TikTok, or DSP)
|
|
13
|
+
- Whether EU or California resident data subjects are included
|
|
14
|
+
|
|
15
|
+
If the user provides only a partial set, note which sections are absent and scope findings accordingly.
|
|
16
|
+
|
|
17
|
+
### Step 2 — Platform identification and terms baseline
|
|
18
|
+
|
|
19
|
+
Identify the target platform and retrieve the relevant customer-list terms:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
Meta Custom Audiences: Prohibit sensitive categories (health, financial account data, sexual orientation,
|
|
23
|
+
religious beliefs, political views, union membership, biometric data, criminal records, or data from
|
|
24
|
+
users under 13). Require SHA-256 hashing of email, phone, name. Normalize before hashing
|
|
25
|
+
(lowercase, no spaces).
|
|
26
|
+
|
|
27
|
+
Google Customer Match: Prohibit sensitive-category data. Require SHA-256 hashing. Normalization
|
|
28
|
+
required per Google's specification (lowercase email, E.164 phone format before hashing).
|
|
29
|
+
|
|
30
|
+
LinkedIn Matched Audiences: Prohibit sensitive categories. Require SHA-256. Minimum list size
|
|
31
|
+
enforced for privacy (300 matched members).
|
|
32
|
+
|
|
33
|
+
TikTok Custom Audiences: Require SHA-256. Prohibit sensitive categories. GDPR and CCPA
|
|
34
|
+
compliance certifications required for respective geographies.
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Note any field in the specification that appears to violate platform-specific prohibitions.
|
|
38
|
+
|
|
39
|
+
### Step 3 — Hashing adequacy audit
|
|
40
|
+
|
|
41
|
+
Inspect the declared hashing method against minimum requirements:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
# HIGH — MD5 hashing declared
|
|
45
|
+
MD5 produces a 128-bit digest. For common email formats (first.last@domain.com),
|
|
46
|
+
precomputed rainbow tables resolve ~80-90% of hashes. This is not adequate pseudonymization
|
|
47
|
+
under GDPR Article 5(1)(f) and violates platform terms for Meta, Google, LinkedIn, and TikTok.
|
|
48
|
+
Remediation: Replace MD5 with SHA-256. Apply normalization (lowercase, trim whitespace) before hashing.
|
|
49
|
+
|
|
50
|
+
# HIGH — plain-text upload (no hashing declared)
|
|
51
|
+
Direct transmission of email or phone in the clear constitutes unambiguous PII disclosure
|
|
52
|
+
to the ad platform. No platform terms permit this.
|
|
53
|
+
|
|
54
|
+
# MEDIUM — SHA-256 declared but normalization step not documented
|
|
55
|
+
Without documented normalization (lowercase, strip punctuation), match rates degrade and
|
|
56
|
+
partial hash collisions become possible. Confirm normalization spec.
|
|
57
|
+
|
|
58
|
+
# CORRECT — SHA-256 with documented normalization
|
|
59
|
+
Email: lowercase → strip whitespace → SHA-256
|
|
60
|
+
Phone: E.164 format → strip non-numeric → SHA-256
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Hashing reduces re-identification risk but does not eliminate it — flag this explicitly. Hashed identifiers are still personal data under GDPR.
|
|
64
|
+
|
|
65
|
+
### Step 4 — PII field-scope and data-minimization audit
|
|
66
|
+
|
|
67
|
+
Inspect the field mapping for over-inclusion relative to the matching objective:
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
# Minimum field set for match-rate adequacy (any platform)
|
|
71
|
+
- SHA-256 hashed email ← sufficient for >85% match rates on most platforms
|
|
72
|
+
|
|
73
|
+
# Extended field set (justified only when match rate is demonstrably inadequate)
|
|
74
|
+
- SHA-256 hashed phone number
|
|
75
|
+
- SHA-256 hashed first name + last name (separate fields per platform spec)
|
|
76
|
+
|
|
77
|
+
# Over-included fields (data-minimization violation)
|
|
78
|
+
- Date of birth → not needed for matching; increases re-identification
|
|
79
|
+
- Home postal code → combined with email + phone = high-confidence re-identification surface
|
|
80
|
+
- Transaction history columns → no matching function; pure data exposure
|
|
81
|
+
- IP address → not a valid matching identifier; exposes behavioral fingerprint
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Flag any field beyond the minimum set needed for the stated matching objective as MEDIUM. Flag postal code combined with email and phone as HIGH (re-identification surface).
|
|
85
|
+
|
|
86
|
+
### Step 5 — Consent-basis validity audit
|
|
87
|
+
|
|
88
|
+
Map the originating consent basis against the intended use:
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
Scenario A — Transactional consent only
|
|
92
|
+
Original consent: "I agree to receive order confirmations and shipping updates."
|
|
93
|
+
Intended use: Seed list for Facebook lookalike audience targeting financial product ads.
|
|
94
|
+
Assessment: HIGH — sharing for advertising targeting exceeds the transactional consent scope.
|
|
95
|
+
GDPR: Purpose-limitation violation (Article 5(1)(b)). Separate consent for advertising use required.
|
|
96
|
+
CPRA: Unauthorized "sharing" of personal information for cross-context behavioral advertising
|
|
97
|
+
(§1798.100) — constitutes a sale/share requiring opt-out mechanism.
|
|
98
|
+
|
|
99
|
+
Scenario B — Marketing consent with opt-in
|
|
100
|
+
Original consent: "I agree to receive marketing communications from [Brand]."
|
|
101
|
+
Intended use: Custom audience upload for retargeting on Meta.
|
|
102
|
+
Assessment: MEDIUM — first-party retargeting may fall within scope, but sharing PII with Meta
|
|
103
|
+
as a data controller may require separate disclosure in the privacy notice.
|
|
104
|
+
Confirm whether privacy notice discloses ad-platform data sharing.
|
|
105
|
+
|
|
106
|
+
Scenario C — No documented consent, legitimate interest asserted
|
|
107
|
+
Assessment: HIGH — legitimate interest is a narrow basis that rarely survives for ad-platform
|
|
108
|
+
data sharing. LIA (Legitimate Interest Assessment) must be documented; data-subject
|
|
109
|
+
rights (opt-out, erasure) must be honored.
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Step 6 — Cross-border transfer assessment
|
|
113
|
+
|
|
114
|
+
If EU resident data subjects are in the list and the ad platform is a non-adequate-country processor:
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
# Required safeguards for EU → US transfer (post-Schrems II)
|
|
118
|
+
- Standard Contractual Clauses (SCCs) — Module 2 (controller to processor) or
|
|
119
|
+
Module 1 (controller to controller depending on platform's legal role)
|
|
120
|
+
- UK Addendum if UK residents included
|
|
121
|
+
- Transfer Impact Assessment (TIA) documented
|
|
122
|
+
|
|
123
|
+
# HIGH — EU residents in list, no SCC or EU-US DPF certification documented for the platform
|
|
124
|
+
GDPR Chapter V prohibits transfer without adequate safeguard. Confirm platform's DPF
|
|
125
|
+
certification status or execute SCCs before upload.
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Step 7 — Platform-specific sensitive-category restriction check
|
|
129
|
+
|
|
130
|
+
Cross-check each field against platform-specific prohibited categories:
|
|
131
|
+
|
|
132
|
+
| Field | Meta | Google | LinkedIn | TikTok |
|
|
133
|
+
|---|---|---|---|---|
|
|
134
|
+
| Health condition inferred from segment | PROHIBITED | PROHIBITED | PROHIBITED | PROHIBITED |
|
|
135
|
+
| Financial hardship segment label | PROHIBITED | PROHIBITED | Review | Review |
|
|
136
|
+
| Religious affiliation in segment metadata | PROHIBITED | PROHIBITED | PROHIBITED | PROHIBITED |
|
|
137
|
+
| Age (exact DOB) | Allowed (hashed) | Allowed (hashed) | Caution | Caution |
|
|
138
|
+
| Postal code (unhashed) | Not a match field | Not a match field | Not a match field | Not a match field |
|
|
139
|
+
|
|
140
|
+
Flag any field or segment label that maps to a platform-prohibited category.
|
|
141
|
+
|
|
142
|
+
### Step 8 — Retention and deletion assessment
|
|
143
|
+
|
|
144
|
+
Flag the absence of documented platform-side retention limits as MEDIUM:
|
|
145
|
+
|
|
146
|
+
- Confirm the platform's stated retention period for unmatched records (typically 48-72 hours for most platforms).
|
|
147
|
+
- Confirm whether the operator has a deletion schedule for the source list post-upload.
|
|
148
|
+
- Confirm whether the list can be deleted from the platform after campaign completion.
|
|
149
|
+
|
|
150
|
+
### Step 9 — Produce the output
|
|
151
|
+
|
|
152
|
+
Format findings using the Output section below.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Output
|
|
157
|
+
|
|
158
|
+
Return findings in this structure:
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
## Verdict
|
|
162
|
+
<one sentence: pass / needs work / critical issues found>
|
|
163
|
+
|
|
164
|
+
## Evidence level
|
|
165
|
+
<field-mapping spec provided | hashing method declared | consent documentation provided | inference>
|
|
166
|
+
|
|
167
|
+
## Platform(s) in scope
|
|
168
|
+
<Meta | Google | LinkedIn | TikTok | DSP>
|
|
169
|
+
|
|
170
|
+
## Findings
|
|
171
|
+
|
|
172
|
+
### CRITICAL
|
|
173
|
+
- [C1] <finding title>: <description> — <remediation>
|
|
174
|
+
|
|
175
|
+
### HIGH
|
|
176
|
+
- [H1] <finding title>: <description> — <remediation>
|
|
177
|
+
|
|
178
|
+
### MEDIUM
|
|
179
|
+
- [M1] <finding title>: <description> — <remediation>
|
|
180
|
+
|
|
181
|
+
### LOW
|
|
182
|
+
- [L1] <finding title>: <description> — <remediation>
|
|
183
|
+
|
|
184
|
+
## Recommended minimum field set
|
|
185
|
+
<field list with hashing spec>
|
|
186
|
+
|
|
187
|
+
## Safe next actions
|
|
188
|
+
1. <action>
|
|
189
|
+
2. <action>
|
|
190
|
+
|
|
191
|
+
## Open questions
|
|
192
|
+
- <question requiring user clarification>
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Security and scope notes
|
|
198
|
+
|
|
199
|
+
- This is a static review. Never request actual audience files, real customer records, or platform API credentials. Work from sanitized field-mapping specifications, declared hashing methods, and consent-basis documentation.
|
|
200
|
+
- SHA-256 hashing of a common email address is pseudonymization, not anonymization — the hashed identifier is still personal data under GDPR and still requires a lawful basis for sharing with the ad platform.
|
|
201
|
+
- A consent-scope mismatch discovered here may constitute a reportable breach or an unauthorized "sale/share" of personal information under CPRA — flag that possibility and route the legal determination to qualified counsel and the privacy compliance team.
|
|
202
|
+
- Never recommend uploading a field that is not strictly needed for the matching objective. Default to the minimum field set.
|
|
203
|
+
- When evidence is partial, scope each finding to what was provided and state the assumption explicitly.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: marketing-consent-data-collection-review
|
|
3
|
+
description: Use this skill when reviewing a marketing site's consent and data-collection posture — cookie/consent banner (CMP) configuration, tag-manager container exports, Google Consent Mode wiring, or a cookie policy. Trigger when a user provides a CMP configuration, a tag manager container JSON, a consent-banner screenshot description, or asks whether their marketing tracking is GDPR/CCPA/ePrivacy compliant, whether tags fire before consent, or whether their opt-out path is valid.
|
|
4
|
+
allowed-tools: Read Grep Glob
|
|
5
|
+
metadata:
|
|
6
|
+
author: "github: Raishin"
|
|
7
|
+
version: "0.1.0"
|
|
8
|
+
updated: "2026-05-17"
|
|
9
|
+
category: compliance
|
|
10
|
+
lifecycle: experimental
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Marketing Consent and Data-Collection Review
|
|
14
|
+
|
|
15
|
+
## Purpose
|
|
16
|
+
This skill reviews the consent and data-collection layer of a marketing site for regulatory correctness, coverage gaps, and dark-pattern risk. Marketing analytics and advertising tags are a primary enforcement target under GDPR, the ePrivacy Directive, and US state privacy laws (CCPA/CPRA and successors). A tag that fires before a consent signal, a banner with no symmetric reject control, or a missing "Do Not Sell or Share" path converts routine marketing instrumentation into a regulatory liability and a class-action surface. The review catches consent-gating failures, banner dark patterns, Consent Mode misconfiguration, undeclared trackers, and cross-border transfer gaps before they reach production.
|
|
17
|
+
|
|
18
|
+
## Lean operating rules
|
|
19
|
+
- Treat any analytics or advertising tag that fires before an explicit opt-in consent signal (in a GDPR/ePrivacy-scoped jurisdiction) as HIGH — prior consent is required before non-essential storage or access.
|
|
20
|
+
- Treat a consent banner with no reject control, or a reject control that takes more clicks or less visual weight than accept, as HIGH — non-symmetric choice is a recognized dark pattern and invalidates consent.
|
|
21
|
+
- Treat pre-ticked consent checkboxes or "consent by continued browsing / scrolling" as HIGH — neither is freely given, specific, informed, and unambiguous consent.
|
|
22
|
+
- Treat the absence of a "Do Not Sell or Share My Personal Information" link or an equivalent opt-out preference signal path (Global Privacy Control honoring) as HIGH for sites serving California or other opt-out-regime traffic.
|
|
23
|
+
- Treat Google Consent Mode left in its default-granted state, or implemented without `wait_for_update`, as HIGH — tags transmit before the consent decision is captured.
|
|
24
|
+
- Treat trackers observed in the tag container that are not disclosed in the cookie policy or consent vendor list as HIGH — undisclosed processing has no lawful basis.
|
|
25
|
+
- Flag a single global consent toggle with no per-purpose granularity (analytics vs advertising vs personalization) as MEDIUM — purpose-bundled consent is not specific.
|
|
26
|
+
- Flag consent records with no retention of timestamp, scope, and consent-string version as MEDIUM — without a consent record the controller cannot demonstrate compliance.
|
|
27
|
+
- Flag advertising tags that send data to ad networks in non-EEA jurisdictions with no referenced transfer mechanism as MEDIUM.
|
|
28
|
+
- Do not recommend disabling a tag without naming the marketing measurement it supports and the residual attribution loss.
|
|
29
|
+
- Label every finding with evidence basis: configuration provided, policy text provided, documentation-based, or inference from missing config.
|
|
30
|
+
|
|
31
|
+
## References
|
|
32
|
+
Load these only when needed:
|
|
33
|
+
- [Workflow and output contract](references/workflow-and-output.md) — use when executing the full review or formatting the final answer.
|
|
34
|
+
|
|
35
|
+
## Response minimum
|
|
36
|
+
Return, at minimum:
|
|
37
|
+
- Consent-gating findings (tags firing before the consent signal)
|
|
38
|
+
- Banner design assessment (symmetry, granularity, dark-pattern checks)
|
|
39
|
+
- Opt-out / Global Privacy Control path assessment
|
|
40
|
+
- Consent Mode / tag-manager wiring findings
|
|
41
|
+
- Tracker-to-policy disclosure gap list
|
|
42
|
+
- Cross-border transfer assessment
|
|
43
|
+
- Severity-labelled finding list (critical / high / medium / low)
|
|
44
|
+
- Safe next actions
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "marketing-consent-data-collection-review",
|
|
3
|
+
"name": "Marketing Consent and Data-Collection Review",
|
|
4
|
+
"type": "skill",
|
|
5
|
+
"provider": "marketing",
|
|
6
|
+
"harnesses": ["codex", "claude-code", "cursor", "gemini", "kiro", "other"],
|
|
7
|
+
"summary": "Review marketing consent and data-collection posture — CMP banner config, tag-manager containers, Consent Mode wiring, and cookie policy — for GDPR/ePrivacy/CCPA correctness, dark patterns, and undisclosed trackers.",
|
|
8
|
+
"source_type": "original",
|
|
9
|
+
"official_docs": [
|
|
10
|
+
"https://eur-lex.europa.eu/eli/reg/2016/679/oj",
|
|
11
|
+
"https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32002L0058",
|
|
12
|
+
"https://oag.ca.gov/privacy/ccpa",
|
|
13
|
+
"https://developers.google.com/tag-platform/security/guides/consent",
|
|
14
|
+
"https://iabeurope.eu/transparency-consent-framework/"
|
|
15
|
+
],
|
|
16
|
+
"security_notes": "Marketing tags that fire before a consent signal collect personal data with no lawful basis and expose the controller to GDPR/ePrivacy enforcement and CCPA class actions. Consent banners with non-symmetric choice or pre-ticked boxes invalidate consent. Review works from sanitized configuration only; never request real visitor data, consent-string archives, or analytics account credentials.",
|
|
17
|
+
"last_verified": "2026-05-17",
|
|
18
|
+
"path": "skills/marketing/marketing-consent-data-collection-review",
|
|
19
|
+
"author": "github: Raishin",
|
|
20
|
+
"version": "0.1.0"
|
|
21
|
+
}
|
package/skills/marketing/marketing-consent-data-collection-review/references/workflow-and-output.md
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Workflow and Output Contract
|
|
2
|
+
|
|
3
|
+
## Workflow
|
|
4
|
+
|
|
5
|
+
### Step 1 — Collect inputs
|
|
6
|
+
|
|
7
|
+
Ask the user to provide one or more of the following as sanitized exports or descriptions (no real visitor identifiers, no analytics account credentials, no consent-string archives):
|
|
8
|
+
- Consent Management Platform (CMP) configuration — vendor, banner layout, button set, default consent state, per-purpose toggles
|
|
9
|
+
- Tag manager container export (e.g. GTM container JSON) showing tags, triggers, and consent settings
|
|
10
|
+
- Google Consent Mode / consent initialization snippet
|
|
11
|
+
- Cookie / privacy policy text, or the disclosed cookie and vendor table
|
|
12
|
+
- Target jurisdictions and the regimes that apply (EEA/UK, California, other US states, Brazil, etc.)
|
|
13
|
+
|
|
14
|
+
If the user provides only a partial set, note which sections are absent and scope findings accordingly.
|
|
15
|
+
|
|
16
|
+
### Step 2 — Jurisdiction and regime scoping
|
|
17
|
+
|
|
18
|
+
Establish which legal model applies before assessing tags:
|
|
19
|
+
- **Opt-in regimes** (GDPR + ePrivacy, UK GDPR/PECR): non-essential storage and access require prior consent. Default state must be denied.
|
|
20
|
+
- **Opt-out regimes** (CCPA/CPRA and most US state laws): collection may proceed, but a "Do Not Sell or Share" path and Global Privacy Control honoring are required.
|
|
21
|
+
- A global site usually serves both; the CMP must geo-resolve the correct model per visitor.
|
|
22
|
+
|
|
23
|
+
Flag a single consent model applied globally when traffic spans both regimes as MEDIUM.
|
|
24
|
+
|
|
25
|
+
### Step 3 — Consent-gating audit
|
|
26
|
+
|
|
27
|
+
For every analytics and advertising tag, determine whether it fires before or after the consent signal.
|
|
28
|
+
|
|
29
|
+
Check for:
|
|
30
|
+
- Tags with a firing trigger of "page view" / "DOM ready" and no consent condition (HIGH in opt-in regimes)
|
|
31
|
+
- Tag manager "additional consent checks" left unconfigured
|
|
32
|
+
- A hardcoded analytics or pixel snippet in page source, bypassing the tag manager and the CMP entirely (HIGH)
|
|
33
|
+
- Server-side tagging that forwards events with no consent state propagated
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
# RISKY — tag fires on every page view, no consent gate
|
|
37
|
+
Tag: GA4 Configuration
|
|
38
|
+
Trigger: All Pages
|
|
39
|
+
Consent settings: No additional consent required
|
|
40
|
+
|
|
41
|
+
# CORRECT — tag waits for the analytics_storage grant
|
|
42
|
+
Tag: GA4 Configuration
|
|
43
|
+
Trigger: All Pages
|
|
44
|
+
Consent settings: Require additional consent for: analytics_storage
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Step 4 — Banner design audit
|
|
48
|
+
|
|
49
|
+
Assess the banner against recognized dark-pattern guidance:
|
|
50
|
+
- **Symmetry**: accept and reject must be equally prominent and equally reachable. A prominent "Accept All" with reject buried in a secondary "Manage" screen is HIGH.
|
|
51
|
+
- **Pre-selection**: any consent toggle pre-set to ON, or pre-ticked checkbox, is HIGH.
|
|
52
|
+
- **Implied consent**: "by continuing to browse you agree" or scroll-to-consent is HIGH.
|
|
53
|
+
- **Granularity**: distinct purposes (analytics, advertising, personalization) must be independently refusable. A single on/off is MEDIUM.
|
|
54
|
+
- **Nagging / re-prompting**: re-showing the banner to pressure a reluctant visitor is MEDIUM.
|
|
55
|
+
- **Withdrawal**: withdrawing consent must be as easy as giving it — a persistent preferences link must exist.
|
|
56
|
+
|
|
57
|
+
### Step 5 — Consent Mode and signal-propagation audit
|
|
58
|
+
|
|
59
|
+
If Google Consent Mode (or an equivalent) is used:
|
|
60
|
+
- Default consent state must be `denied` for `ad_storage`, `analytics_storage`, `ad_user_data`, `ad_personalization` in opt-in regimes.
|
|
61
|
+
- `wait_for_update` must be set so tags hold until the CMP resolves the choice.
|
|
62
|
+
- Verify the CMP actually calls `gtag('consent', 'update', ...)` on the visitor's decision.
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
# RISKY — default granted, no wait
|
|
66
|
+
gtag('consent', 'default', { ad_storage: 'granted', analytics_storage: 'granted' });
|
|
67
|
+
|
|
68
|
+
# CORRECT — default denied, wait for the CMP update
|
|
69
|
+
gtag('consent', 'default', {
|
|
70
|
+
ad_storage: 'denied', analytics_storage: 'denied',
|
|
71
|
+
ad_user_data: 'denied', ad_personalization: 'denied',
|
|
72
|
+
wait_for_update: 500
|
|
73
|
+
});
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Step 6 — Tracker-to-policy disclosure audit
|
|
77
|
+
|
|
78
|
+
Cross-check every tracker observed in the container against the cookie policy and CMP vendor list:
|
|
79
|
+
- Each cookie and pixel must be named, categorized by purpose, and given a stated retention.
|
|
80
|
+
- Vendors receiving data must appear in the disclosed vendor list.
|
|
81
|
+
- A tracker present in the container but absent from disclosure is HIGH — undisclosed processing has no lawful basis and breaches the transparency obligation.
|
|
82
|
+
|
|
83
|
+
### Step 7 — Opt-out and cross-border audit
|
|
84
|
+
|
|
85
|
+
- Confirm a "Do Not Sell or Share My Personal Information" link (or a Limit-Use link for sensitive data) where opt-out regimes apply.
|
|
86
|
+
- Confirm the CMP honors the Global Privacy Control browser signal.
|
|
87
|
+
- For advertising tags transmitting to ad networks outside the visitor's region, confirm a referenced transfer mechanism exists in the policy (Standard Contractual Clauses, an adequacy decision, or the relevant framework).
|
|
88
|
+
|
|
89
|
+
### Step 8 — Consent-record audit
|
|
90
|
+
|
|
91
|
+
Confirm the CMP retains, per consent event: a timestamp, the scope/purposes accepted, the consent-string version, and a withdrawal record. Without this the controller cannot demonstrate compliance on request. Missing records is MEDIUM.
|
|
92
|
+
|
|
93
|
+
### Step 9 — Produce the output
|
|
94
|
+
|
|
95
|
+
Format findings using the Output section below.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Output
|
|
100
|
+
|
|
101
|
+
Return findings in this structure:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
## Verdict
|
|
105
|
+
<one sentence: pass / needs work / critical issues found>
|
|
106
|
+
|
|
107
|
+
## Evidence level
|
|
108
|
+
<configuration provided | policy text provided | documentation-based | inference>
|
|
109
|
+
|
|
110
|
+
## Findings
|
|
111
|
+
|
|
112
|
+
### CRITICAL
|
|
113
|
+
- [C1] <finding title>: <description> — <remediation>
|
|
114
|
+
|
|
115
|
+
### HIGH
|
|
116
|
+
- [H1] <finding title>: <description> — <remediation>
|
|
117
|
+
|
|
118
|
+
### MEDIUM
|
|
119
|
+
- [M1] <finding title>: <description> — <remediation>
|
|
120
|
+
|
|
121
|
+
### LOW
|
|
122
|
+
- [L1] <finding title>: <description> — <remediation>
|
|
123
|
+
|
|
124
|
+
## Safe next actions
|
|
125
|
+
1. <action>
|
|
126
|
+
2. <action>
|
|
127
|
+
|
|
128
|
+
## Open questions
|
|
129
|
+
- <question requiring user clarification>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Security and scope notes
|
|
135
|
+
|
|
136
|
+
- This is a static review. Never request real visitor data, raw consent-string archives, analytics account credentials, or tag-manager publish access.
|
|
137
|
+
- Do not provide definitive legal conclusions; surface regulatory risk and route binding determinations to qualified privacy counsel.
|
|
138
|
+
- Never recommend removing a consent gate to recover attribution data.
|
|
139
|
+
- When evidence is partial, scope each finding to what was provided and state the assumption explicitly.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: marketing-conversion-flow-dark-pattern-review
|
|
3
|
+
description: Use this skill when reviewing marketing conversion flow specifications — subscription sign-up, upsell interstitial, free-trial enrollment, and cancellation path — for dark-pattern practices that invalidate consent or constitute unfair or deceptive acts under FTC Section 5 and state privacy laws. Trigger when a user provides a UX flow specification including step-by-step page descriptions, annotated wireframes, CTA labels, pre-checked options, visual weight of accept vs decline paths, countdown timer specs, or cancellation flow step counts. Scope is limited to marketing conversion flows; consent banner review is handled by a separate skill.
|
|
4
|
+
allowed-tools: Read Grep Glob
|
|
5
|
+
metadata:
|
|
6
|
+
author: "github: Raishin"
|
|
7
|
+
version: "0.1.0"
|
|
8
|
+
updated: "2026-05-17"
|
|
9
|
+
category: compliance
|
|
10
|
+
lifecycle: experimental
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Marketing Conversion Flow Dark-Pattern Review
|
|
14
|
+
|
|
15
|
+
## Purpose
|
|
16
|
+
This skill reviews marketing conversion flow specifications — subscription sign-up, upsell interstitials, free-trial enrollment, and cancellation paths — for dark-pattern practices that invalidate consent or constitute unfair or deceptive acts under FTC Section 5, the FTC Negative Option Rule (ROSCA), the CPRA statutory dark-pattern definition (§ 1798.140(l)), and EU AI Act Article 5(1)(b). Dark patterns in conversion flows are a distinct and high-priority regulatory surface: pre-checked auto-renew boxes, asymmetric cancel vs. subscribe step counts, artificial countdown timers, and visually suppressed decline paths have drawn FTC enforcement, FTC rules with click-to-cancel mandates, and CPRA enforcement advisories. This skill works from a sanitized UX flow specification or annotated wireframe only. It does not review consent banners — that is the domain of `marketing-consent-data-collection-review`.
|
|
17
|
+
|
|
18
|
+
## Lean operating rules
|
|
19
|
+
- Treat a free-trial or subscription enrollment flow that pre-checks "auto-renew at full price" (or any material recurring-charge term) as HIGH — pre-checked consent for a recurring financial commitment is prohibited under the FTC Negative Option Rule and invalidates consent under CPRA § 1798.140(l).
|
|
20
|
+
- Treat any cancellation path that requires more steps than the enrollment path, or that interposes save-offers between the cancel intent and the cancel confirmation without a direct-cancel alternative, as HIGH — the FTC Negative Option Rule and ROSCA require cancellation to be at least as easy as enrollment.
|
|
21
|
+
- Treat an artificial countdown timer applied to an offer with no real deadline as HIGH — it creates false urgency, a deceptive act under FTC Act Section 5.
|
|
22
|
+
- Treat visual suppression of the decline path (smaller font, lower contrast, grey-out, positioning below the fold, or absence of a visible "no thanks" option) as HIGH when paired with a visually dominant accept CTA — asymmetric visual weight subverts user autonomy under CPRA § 1798.140(l) and constitutes a deceptive format under FTC Section 5.
|
|
23
|
+
- Treat upsell interstitials that make the "continue without upgrade" option absent, invisible, or materially harder to reach than the upgrade CTA as HIGH — the absence of a clear decline path on a mandatory interstitial eliminates meaningful consent.
|
|
24
|
+
- Treat a subscription sign-up flow in which material price, renewal date, and cancellation method are not disclosed clearly and conspicuously before billing information is collected as HIGH — ROSCA requires pre-billing disclosure of all material terms.
|
|
25
|
+
- Flag "confirm-shaming" CTA copy (e.g. "No thanks, I don't want to save money") as MEDIUM — it applies social pressure but may not alone constitute an unfair act; combined with visual suppression it escalates.
|
|
26
|
+
- Flag any save-offer sequence on a cancellation path that does not offer a direct cancel option at each step as MEDIUM — save offers are permissible but must not be the only route.
|
|
27
|
+
- Flag countdown timers whose real deadline is authenticated by server state (session-scoped) as LOW — distinguish from artificial timers which are HIGH.
|
|
28
|
+
- Do not recommend removing a conversion step without naming the revenue or data-collection impact and an FTC-compliant alternative.
|
|
29
|
+
- Label every finding with evidence basis: flow specification provided, wireframe provided, documentation-based, or inference from missing element.
|
|
30
|
+
|
|
31
|
+
## References
|
|
32
|
+
Load these only when needed:
|
|
33
|
+
- [Workflow and output contract](references/workflow-and-output.md) — use when executing the full review or formatting the final answer.
|
|
34
|
+
|
|
35
|
+
## Response minimum
|
|
36
|
+
Return, at minimum:
|
|
37
|
+
- Pre-checked consent assessment (recurring-charge terms, auto-renew)
|
|
38
|
+
- Cancellation path symmetry assessment (step count vs. enrollment path)
|
|
39
|
+
- Countdown timer authenticity assessment
|
|
40
|
+
- Visual weight and decline-path accessibility assessment
|
|
41
|
+
- Upsell interstitial consent assessment
|
|
42
|
+
- Material-term pre-billing disclosure assessment
|
|
43
|
+
- Confirm-shaming CTA assessment
|
|
44
|
+
- Severity-labelled finding list (critical / high / medium / low)
|
|
45
|
+
- Safe next actions
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "marketing-conversion-flow-dark-pattern-review",
|
|
3
|
+
"name": "Marketing Conversion Flow Dark-Pattern Review",
|
|
4
|
+
"type": "skill",
|
|
5
|
+
"provider": "marketing",
|
|
6
|
+
"harnesses": ["codex", "claude-code", "cursor", "gemini", "kiro", "other"],
|
|
7
|
+
"summary": "Review marketing conversion flow specifications — subscription sign-up, upsell interstitial, free-trial enrollment, and cancellation path — for dark-pattern practices that invalidate consent or constitute unfair or deceptive acts under FTC Section 5, the FTC Negative Option Rule, CPRA, and EU AI Act Article 5(1)(b).",
|
|
8
|
+
"source_type": "original",
|
|
9
|
+
"official_docs": [
|
|
10
|
+
"https://www.ftc.gov/legal-library/browse/rules/negative-option-rule",
|
|
11
|
+
"https://www.ftc.gov/system/files/ftc_gov/pdf/P214800+Dark+Patterns+Report+9.14.2022+-+FINAL.pdf",
|
|
12
|
+
"https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=CIV§ionNum=1798.140.",
|
|
13
|
+
"https://oag.ca.gov/privacy/ccpa",
|
|
14
|
+
"https://eur-lex.europa.eu/eli/reg/2024/1689/oj/eng"
|
|
15
|
+
],
|
|
16
|
+
"security_notes": "Read-only static review of sanitized UX flow specifications and annotated wireframes only. Never request real payment credentials, live user-session data, or production A/B-test results. Findings may indicate violations of FTC rules carrying civil penalties — route remediation and enforcement-risk assessment to qualified legal counsel before acting on findings.",
|
|
17
|
+
"last_verified": "2026-05-17",
|
|
18
|
+
"path": "skills/marketing/marketing-conversion-flow-dark-pattern-review",
|
|
19
|
+
"author": "github: Raishin",
|
|
20
|
+
"version": "0.1.0",
|
|
21
|
+
"lifecycle": "experimental"
|
|
22
|
+
}
|