@runhalo/engine 1.0.2 → 1.1.0

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/rules/rules.json CHANGED
@@ -45,7 +45,7 @@
45
45
  "ut-sb142": {
46
46
  "id": "ut-sb142",
47
47
  "name": "Utah SB 142 (App Store Accountability)",
48
- "description": "5 rules for Utah SB 142 compliance \u2014 age assurance, parental consent, minor account defaults, DM restrictions, and supervisory tools.",
48
+ "description": "5 rules for Utah SB 142 compliance age assurance, parental consent, minor account defaults, DM restrictions, and supervisory tools.",
49
49
  "jurisdiction": "US-UT",
50
50
  "jurisdiction_level": "state",
51
51
  "is_free": true,
@@ -55,7 +55,7 @@
55
55
  "uk-aadc": {
56
56
  "id": "uk-aadc",
57
57
  "name": "UK Age Appropriate Design Code",
58
- "description": "15 rules for the UK ICO Children's Code (AADC) \u2014 the 15 standards for age-appropriate online services.",
58
+ "description": "15 rules for the UK ICO Children's Code (AADC) the 15 standards for age-appropriate online services.",
59
59
  "jurisdiction": "UK",
60
60
  "jurisdiction_level": "national",
61
61
  "is_free": false,
@@ -65,7 +65,7 @@
65
65
  "eu-dsa": {
66
66
  "id": "eu-dsa",
67
67
  "name": "EU DSA Article 28 (Minor Protection)",
68
- "description": "10 rules for EU Digital Services Act Article 28 \u2014 online protection of minors on platforms.",
68
+ "description": "10 rules for EU Digital Services Act Article 28 online protection of minors on platforms.",
69
69
  "jurisdiction": "EU",
70
70
  "jurisdiction_level": "supranational",
71
71
  "is_free": false,
@@ -75,7 +75,7 @@
75
75
  "au-osa": {
76
76
  "id": "au-osa",
77
77
  "name": "AU Online Safety Act",
78
- "description": "12 rules for Australia's Online Safety Act 2021 (as amended 2024) \u2014 age verification, content moderation, under-16 social media ban, and eSafety Commissioner compliance.",
78
+ "description": "12 rules for Australia's Online Safety Act 2021 (as amended 2024) age verification, content moderation, under-16 social media ban, and eSafety Commissioner compliance.",
79
79
  "jurisdiction": "AU-Federal",
80
80
  "jurisdiction_level": "federal",
81
81
  "is_free": false,
@@ -85,7 +85,7 @@
85
85
  "caadca": {
86
86
  "id": "caadca",
87
87
  "name": "California AADCA",
88
- "description": "15 rules for the California Age-Appropriate Design Code Act (AB 2273) \u2014 default privacy, age estimation, profiling restrictions, dark pattern prohibitions, and data minimization for child users.",
88
+ "description": "15 rules for the California Age-Appropriate Design Code Act (AB 2273) default privacy, age estimation, profiling restrictions, dark pattern prohibitions, and data minimization for child users.",
89
89
  "jurisdiction": "US-CA",
90
90
  "jurisdiction_level": "state",
91
91
  "is_free": false,
@@ -95,7 +95,7 @@
95
95
  "eu-ai-act": {
96
96
  "id": "eu-ai-act",
97
97
  "name": "EU AI Act (Children)",
98
- "description": "30 rules for EU AI Act compliance in children's AI systems \u2014 risk management (Art. 9), data governance (Art. 10), transparency (Art. 13), human oversight (Art. 14), accuracy & robustness (Art. 15), and constitutional AI principles.",
98
+ "description": "30 rules for EU AI Act compliance in children's AI systems risk management (Art. 9), data governance (Art. 10), transparency (Art. 13), human oversight (Art. 14), accuracy & robustness (Art. 15), and constitutional AI principles.",
99
99
  "jurisdiction": "EU",
100
100
  "jurisdiction_level": "supranational",
101
101
  "is_free": false,
@@ -105,7 +105,7 @@
105
105
  "gdpr-art8": {
106
106
  "id": "gdpr-art8",
107
107
  "name": "EU GDPR Article 8 (Child Consent)",
108
- "description": "5 rules for GDPR Article 8 compliance \u2014 child consent age fragmentation across EU member states, legitimate interest restrictions, and data minimization for minors.",
108
+ "description": "5 rules for GDPR Article 8 compliance child consent age fragmentation across EU member states, legitimate interest restrictions, and data minimization for minors.",
109
109
  "jurisdiction": "EU",
110
110
  "jurisdiction_level": "supranational",
111
111
  "is_free": false,
@@ -115,7 +115,7 @@
115
115
  "india-dpdp": {
116
116
  "id": "india-dpdp",
117
117
  "name": "India DPDP Act 2023 (Section 9)",
118
- "description": "5 rules for India's Digital Personal Data Protection Act \u2014 strictest global framework. Under-18 tracking ban, parental consent for all processing, blanket prohibition on behavioral monitoring.",
118
+ "description": "5 rules for India's Digital Personal Data Protection Act strictest global framework. Under-18 tracking ban, parental consent for all processing, blanket prohibition on behavioral monitoring.",
119
119
  "jurisdiction": "IN",
120
120
  "jurisdiction_level": "national",
121
121
  "is_free": false,
@@ -125,7 +125,7 @@
125
125
  "brazil-lgpd": {
126
126
  "id": "brazil-lgpd",
127
127
  "name": "Brazil LGPD Article 14 (Children's Data)",
128
- "description": "4 rules for Brazil's LGPD Article 14 \u2014 best interest standard for children under 12, data minimization, and age-appropriate notices.",
128
+ "description": "4 rules for Brazil's LGPD Article 14 best interest standard for children under 12, data minimization, and age-appropriate notices.",
129
129
  "jurisdiction": "BR",
130
130
  "jurisdiction_level": "national",
131
131
  "is_free": false,
@@ -135,7 +135,7 @@
135
135
  "canada-pipeda": {
136
136
  "id": "canada-pipeda",
137
137
  "name": "Canada PIPEDA (Children's Consent)",
138
- "description": "4 rules for Canada's PIPEDA \u2014 meaningful consent for minors, OPC reasonable purpose test, behavioral advertising restrictions for children.",
138
+ "description": "4 rules for Canada's PIPEDA meaningful consent for minors, OPC reasonable purpose test, behavioral advertising restrictions for children.",
139
139
  "jurisdiction": "CA",
140
140
  "jurisdiction_level": "national",
141
141
  "is_free": false,
@@ -145,7 +145,7 @@
145
145
  "south-korea-pipa": {
146
146
  "id": "south-korea-pipa",
147
147
  "name": "South Korea PIPA (Under-14 Protection)",
148
- "description": "3 rules for South Korea's Personal Information Protection Act \u2014 parental consent for under-14, clear child-appropriate language, and fines up to 3% global revenue.",
148
+ "description": "3 rules for South Korea's Personal Information Protection Act parental consent for under-14, clear child-appropriate language, and fines up to 3% global revenue.",
149
149
  "jurisdiction": "KR",
150
150
  "jurisdiction_level": "national",
151
151
  "is_free": false,
@@ -161,6 +161,16 @@
161
161
  "is_free": false,
162
162
  "effective_date": null,
163
163
  "source_url": "https://runhalo.dev/behavioral-design"
164
+ },
165
+ "asaa": {
166
+ "id": "asaa",
167
+ "name": "App Store Accountability Act (Multi-State)",
168
+ "description": "20 rules for ASAA compliance across TX, AL, LA, UT. Age verification for teens (13-17), parental consent for free app downloads, device-to-parent linking, retroactive verification, and audit trail requirements.",
169
+ "jurisdiction": "US-Multi-State",
170
+ "jurisdiction_level": "state",
171
+ "is_free": false,
172
+ "effective_date": "2026-05-06",
173
+ "source_url": "https://runhalo.dev/asaa-compliance"
164
174
  }
165
175
  },
166
176
  "rules": [
@@ -443,7 +453,7 @@
443
453
  "flags": "gi"
444
454
  }
445
455
  ],
446
- "fix_suggestion": "Add explicit retention period (retentionDays, expiresAt, or TTL index), deleted_at column, and document the purpose limitation for data collection per COPPA 2025 \u00a7 312.10",
456
+ "fix_suggestion": "Add explicit retention period (retentionDays, expiresAt, or TTL index), deleted_at column, and document the purpose limitation for data collection per COPPA 2025 § 312.10",
447
457
  "penalty": "$53,088 per violation (COPPA 2025 indefinite retention prohibition)",
448
458
  "languages": [
449
459
  "typescript",
@@ -927,7 +937,7 @@
927
937
  "flags": "gi"
928
938
  }
929
939
  ],
930
- "fix_suggestion": "Use standard JSX rendering or DOMPurify before setting HTML content. Note: vendor/bundled libraries may trigger this rule \u2014 use .haloignore to suppress.",
940
+ "fix_suggestion": "Use standard JSX rendering or DOMPurify before setting HTML content. Note: vendor/bundled libraries may trigger this rule use .haloignore to suppress.",
931
941
  "penalty": "Security failure",
932
942
  "languages": [
933
943
  "typescript",
@@ -1589,7 +1599,7 @@
1589
1599
  }
1590
1600
  ],
1591
1601
  "fix_suggestion": "Move all secrets to environment variables. Use process.env.API_KEY or a secrets manager. Never hardcode credentials.",
1592
- "penalty": "Security exposure \u2014 credentials in source code",
1602
+ "penalty": "Security exposure credentials in source code",
1593
1603
  "languages": [
1594
1604
  "typescript",
1595
1605
  "javascript",
@@ -1685,7 +1695,7 @@
1685
1695
  "flags": "gi"
1686
1696
  }
1687
1697
  ],
1688
- "fix_suggestion": "Remove session recording and analytics initialization unless COPPA consent is obtained. These tools capture keystrokes, mouse movements, and user behavior \u2014 all PII for children.",
1698
+ "fix_suggestion": "Remove session recording and analytics initialization unless COPPA consent is obtained. These tools capture keystrokes, mouse movements, and user behavior all PII for children.",
1689
1699
  "penalty": "Third-party data collection without consent",
1690
1700
  "languages": [
1691
1701
  "typescript",
@@ -1793,7 +1803,7 @@
1793
1803
  "severity": "high",
1794
1804
  "confidence": "low",
1795
1805
  "category": "safety-by-design",
1796
- "description": "User profiles default to public or visible. AU Safety by Design requires privacy-by-default for minors \u2014 profiles should be private until explicitly changed by the user or a verified parent.",
1806
+ "description": "User profiles default to public or visible. AU Safety by Design requires privacy-by-default for minors profiles should be private until explicitly changed by the user or a verified parent.",
1797
1807
  "patterns": [
1798
1808
  {
1799
1809
  "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|seed|example|test|Test|expect|assert|//|\\*)\\s{0,20})(?:visibility|profile_?visibility|is_?public|isPublic)\\s*[:=]\\s*(?:['\"]public['\"]|true)",
@@ -2027,7 +2037,7 @@
2027
2037
  "severity": "critical",
2028
2038
  "confidence": "low",
2029
2039
  "category": "safety-by-design",
2030
- "description": "Location data collection or sharing enabled without explicit, informed opt-in. AU SbD and the Privacy Act 1988 require data minimization, especially for children's geolocation data \u2014 location should never be collected by default.",
2040
+ "description": "Location data collection or sharing enabled without explicit, informed opt-in. AU SbD and the Privacy Act 1988 require data minimization, especially for children's geolocation data location should never be collected by default.",
2031
2041
  "patterns": [
2032
2042
  {
2033
2043
  "pattern": "(?:shareLocation|share_?location|locationSharing|broadcastLocation)\\s*[:=]\\s*true",
@@ -2097,7 +2107,7 @@
2097
2107
  "flags": "gi"
2098
2108
  }
2099
2109
  ],
2100
- "fix_suggestion": "Add an age assurance step (date-of-birth collection, age estimation, or ID verification) before account creation. If the user is under 18, flag the account as a minor account and require parental consent before activation. See Utah SB 142 \u00a713-72-201.",
2110
+ "fix_suggestion": "Add an age assurance step (date-of-birth collection, age estimation, or ID verification) before account creation. If the user is under 18, flag the account as a minor account and require parental consent before activation. See Utah SB 142 §13-72-201.",
2101
2111
  "penalty": "Up to $2,500 per violation; private right of action for parents",
2102
2112
  "languages": [
2103
2113
  "typescript",
@@ -2141,7 +2151,7 @@
2141
2151
  "flags": "gi"
2142
2152
  }
2143
2153
  ],
2144
- "fix_suggestion": "Before activating any minor account, implement a verifiable parental consent flow: send a verification email/SMS to a parent-linked account, require parental ID verification, or integrate with a COPPA-safe consent provider. See Utah SB 142 \u00a713-72-202.",
2154
+ "fix_suggestion": "Before activating any minor account, implement a verifiable parental consent flow: send a verification email/SMS to a parent-linked account, require parental ID verification, or integrate with a COPPA-safe consent provider. See Utah SB 142 §13-72-202.",
2145
2155
  "penalty": "Up to $2,500 per violation; private right of action for parents",
2146
2156
  "languages": [
2147
2157
  "typescript",
@@ -2185,7 +2195,7 @@
2185
2195
  "flags": "gi"
2186
2196
  }
2187
2197
  ],
2188
- "fix_suggestion": "Set default DM permissions for minor accounts to 'connected-only' or 'friends-only'. Only allow messaging between mutually connected accounts. Provide parental controls to further restrict messaging. See Utah SB 142 \u00a713-72-301.",
2198
+ "fix_suggestion": "Set default DM permissions for minor accounts to 'connected-only' or 'friends-only'. Only allow messaging between mutually connected accounts. Provide parental controls to further restrict messaging. See Utah SB 142 §13-72-301.",
2189
2199
  "penalty": "Up to $2,500 per violation; private right of action for parents",
2190
2200
  "languages": [
2191
2201
  "typescript",
@@ -2221,7 +2231,7 @@
2221
2231
  "flags": "gi"
2222
2232
  }
2223
2233
  ],
2224
- "fix_suggestion": "Implement a parental supervisory dashboard that allows parents to: set daily time limits, schedule mandatory breaks, view usage data and connected account lists, and receive notifications when account settings change. See Utah SB 142 \u00a713-72-302.",
2234
+ "fix_suggestion": "Implement a parental supervisory dashboard that allows parents to: set daily time limits, schedule mandatory breaks, view usage data and connected account lists, and receive notifications when account settings change. See Utah SB 142 §13-72-302.",
2225
2235
  "penalty": "Up to $2,500 per violation; private right of action for parents",
2226
2236
  "languages": [
2227
2237
  "typescript",
@@ -2269,7 +2279,7 @@
2269
2279
  "flags": "gi"
2270
2280
  }
2271
2281
  ],
2272
- "fix_suggestion": "Default minor accounts to non-indexable (noindex, nofollow) and restrict profile visibility to connected/approved users only. Add a robots meta tag or X-Robots-Tag header that blocks search engine crawling for minor profiles. See Utah SB 142 \u00a713-72-301.",
2282
+ "fix_suggestion": "Default minor accounts to non-indexable (noindex, nofollow) and restrict profile visibility to connected/approved users only. Add a robots meta tag or X-Robots-Tag header that blocks search engine crawling for minor profiles. See Utah SB 142 §13-72-301.",
2273
2283
  "penalty": "Up to $2,500 per violation; private right of action for parents",
2274
2284
  "languages": [
2275
2285
  "typescript",
@@ -2369,7 +2379,7 @@
2369
2379
  "flags": "gi"
2370
2380
  }
2371
2381
  ],
2372
- "fix_suggestion": "Gate push notification token registration behind a parental consent check. Under COPPA 2.0, push tokens are 'online contact information' \u2014 parents must explicitly opt in, and you must provide an opt-out mechanism accessible from a parental dashboard.",
2382
+ "fix_suggestion": "Gate push notification token registration behind a parental consent check. Under COPPA 2.0, push tokens are 'online contact information' parents must explicitly opt in, and you must provide an opt-out mechanism accessible from a parental dashboard.",
2373
2383
  "penalty": "$53,088 per violation (FTC Final Rule effective April 22, 2026)",
2374
2384
  "languages": [
2375
2385
  "typescript",
@@ -2542,7 +2552,7 @@
2542
2552
  }
2543
2553
  ],
2544
2554
  "fix_suggestion": "Set all privacy defaults to the most restrictive option. Profiles, activity, and content should be private by default. Users (especially children) should actively opt in to share data with others. See ICO AADC Standard 7.",
2545
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
2555
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
2546
2556
  "languages": [
2547
2557
  "typescript",
2548
2558
  "javascript",
@@ -2582,7 +2592,7 @@
2582
2592
  }
2583
2593
  ],
2584
2594
  "fix_suggestion": "Switch from opt-out to opt-in for all tracking, analytics, and personalization. These features must be off by default and require active user consent before activation. See ICO AADC Standard 7.",
2585
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
2595
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
2586
2596
  "languages": [
2587
2597
  "typescript",
2588
2598
  "javascript",
@@ -2623,7 +2633,7 @@
2623
2633
  }
2624
2634
  ],
2625
2635
  "fix_suggestion": "Review which personal data fields are truly required for your service. Make non-essential fields optional. Give children choices over which elements of data they wish to provide. See ICO AADC Standard 8.",
2626
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
2636
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
2627
2637
  "languages": [
2628
2638
  "typescript",
2629
2639
  "javascript",
@@ -2665,7 +2675,7 @@
2665
2675
  }
2666
2676
  ],
2667
2677
  "fix_suggestion": "Before initializing third-party SDKs, check user age and disable data sharing for children. Use child-directed SDK configurations (e.g., tag_for_child_directed_treatment). Do not share children's data with data brokers or ad networks. See ICO AADC Standard 9.",
2668
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
2678
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
2669
2679
  "languages": [
2670
2680
  "typescript",
2671
2681
  "javascript",
@@ -2704,7 +2714,7 @@
2704
2714
  }
2705
2715
  ],
2706
2716
  "fix_suggestion": "Set geolocation to off by default. Require explicit user action to enable location services. When location is active, provide a prominent visible indicator. Location sharing with others should reset to off at end of session. See ICO AADC Standard 10.",
2707
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
2717
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
2708
2718
  "languages": [
2709
2719
  "typescript",
2710
2720
  "javascript",
@@ -2743,7 +2753,7 @@
2743
2753
  }
2744
2754
  ],
2745
2755
  "fix_suggestion": "Use single-point location requests instead of continuous monitoring. Avoid background location tracking. Use the minimum granularity needed (e.g., city-level rather than precise coordinates). See ICO AADC Standard 10.",
2746
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
2756
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
2747
2757
  "languages": [
2748
2758
  "typescript",
2749
2759
  "javascript",
@@ -2785,7 +2795,7 @@
2785
2795
  }
2786
2796
  ],
2787
2797
  "fix_suggestion": "Switch profiling off by default. Provide a chronological or non-personalized feed as the default experience. Only enable algorithmic personalization if the child actively opts in. See ICO AADC Standard 12.",
2788
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
2798
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
2789
2799
  "languages": [
2790
2800
  "typescript",
2791
2801
  "javascript",
@@ -2824,7 +2834,7 @@
2824
2834
  }
2825
2835
  ],
2826
2836
  "fix_suggestion": "If using recommendation algorithms, implement age-appropriate content filtering. Do not amplify harmful, addictive, or age-inappropriate content to children. Provide transparency about why content is recommended. See ICO AADC Standard 12.",
2827
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
2837
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
2828
2838
  "languages": [
2829
2839
  "typescript",
2830
2840
  "javascript",
@@ -2863,7 +2873,7 @@
2863
2873
  }
2864
2874
  ],
2865
2875
  "fix_suggestion": "Remove all pre-checked consent and data-sharing boxes. Consent inputs should start unchecked, requiring active selection by the user. This applies to marketing consent, newsletter signups, data sharing agreements, and privacy preferences. See ICO AADC Standard 13.",
2866
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
2876
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
2867
2877
  "languages": [
2868
2878
  "typescript",
2869
2879
  "javascript",
@@ -2901,7 +2911,7 @@
2901
2911
  }
2902
2912
  ],
2903
2913
  "fix_suggestion": "Present privacy choices neutrally without emotional manipulation. Avoid language that makes children feel bad for choosing privacy. Do not imply social exclusion or loss for choosing restrictive settings. See ICO AADC Standard 13.",
2904
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
2914
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
2905
2915
  "languages": [
2906
2916
  "typescript",
2907
2917
  "javascript",
@@ -2934,7 +2944,7 @@
2934
2944
  }
2935
2945
  ],
2936
2946
  "fix_suggestion": "Do not gate features or rewards behind data sharing or public profile requirements. Core service features should be available regardless of privacy settings. See ICO AADC Standard 13.",
2937
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
2947
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
2938
2948
  "languages": [
2939
2949
  "typescript",
2940
2950
  "javascript",
@@ -2973,7 +2983,7 @@
2973
2983
  }
2974
2984
  ],
2975
2985
  "fix_suggestion": "Implement a risk-based age assurance approach. For high-risk services, use age estimation technology, identity verification, or neutral age estimation rather than simple self-declaration. If unable to verify age, apply the code's standards to all users. See ICO AADC Standard 3.",
2976
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
2986
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
2977
2987
  "languages": [
2978
2988
  "typescript",
2979
2989
  "javascript",
@@ -3013,7 +3023,7 @@
3013
3023
  }
3014
3024
  ],
3015
3025
  "fix_suggestion": "Do not serve targeted or personalized advertising to children. Use only contextual advertising (based on page content, not user data) if advertising is necessary. See ICO AADC Standard 5.",
3016
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
3026
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
3017
3027
  "languages": [
3018
3028
  "typescript",
3019
3029
  "javascript",
@@ -3052,7 +3062,7 @@
3052
3062
  }
3053
3063
  ],
3054
3064
  "fix_suggestion": "When parental monitoring or tracking is active, display a clear, prominent indicator visible to the child. Provide age-appropriate explanations of what monitoring is active. Respect the child's growing autonomy. See ICO AADC Standard 11.",
3055
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
3065
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
3056
3066
  "languages": [
3057
3067
  "typescript",
3058
3068
  "javascript",
@@ -3091,7 +3101,7 @@
3091
3101
  }
3092
3102
  ],
3093
3103
  "fix_suggestion": "Add prominent report, flag, and block mechanisms alongside all user-generated content features. Implement content moderation for user communications. Provide children with easy ways to report harmful content. See ICO AADC Standards 6 and 15.",
3094
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
3104
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
3095
3105
  "languages": [
3096
3106
  "typescript",
3097
3107
  "javascript",
@@ -3130,7 +3140,7 @@
3130
3140
  }
3131
3141
  ],
3132
3142
  "fix_suggestion": "Before showing monetization prompts (in-app purchases, upsells, premium gates), check if the user is a child and suppress or gate these flows accordingly. The best interests of the child must take priority over commercial interests. See ICO AADC Standard 1.",
3133
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
3143
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
3134
3144
  "languages": [
3135
3145
  "typescript",
3136
3146
  "javascript",
@@ -3165,7 +3175,7 @@
3165
3175
  }
3166
3176
  ],
3167
3177
  "fix_suggestion": "Conduct a DPIA before processing children's data and reference it in your codebase. Add DPIA completion checks or documentation links where child data is processed. See ICO AADC Standard 2 and ICO DPIA guidance.",
3168
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
3178
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
3169
3179
  "languages": [
3170
3180
  "typescript",
3171
3181
  "javascript",
@@ -3201,7 +3211,7 @@
3201
3211
  }
3202
3212
  ],
3203
3213
  "fix_suggestion": "Provide age-appropriate, bite-sized privacy notices alongside standard privacy policies. At the point of data collection, show concise explanations a child can understand. Consider using icons, animations, or short sentences instead of legal language. See ICO AADC Standard 4.",
3204
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
3214
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
3205
3215
  "languages": [
3206
3216
  "typescript",
3207
3217
  "javascript",
@@ -3238,7 +3248,7 @@
3238
3248
  }
3239
3249
  ],
3240
3250
  "fix_suggestion": "Connected toys and IoT devices must include privacy modes that limit data collection, hardware mute capabilities for microphones/cameras, and clear indicators when data is being collected. Ensure parental controls are built into the device software. See ICO AADC Standard 14.",
3241
- "penalty": "Up to \u00a317.5 million or 4% of annual global turnover (UK GDPR)",
3251
+ "penalty": "Up to £17.5 million or 4% of annual global turnover (UK GDPR)",
3242
3252
  "languages": [
3243
3253
  "typescript",
3244
3254
  "javascript",
@@ -4009,7 +4019,7 @@
4009
4019
  "severity": "high",
4010
4020
  "confidence": "low",
4011
4021
  "category": "data-minimization",
4012
- "description": "CAADCA Section 31(b)(3) requires data minimization \u2014 only collect personal information that is reasonably necessary. Code that collects extensive personal data fields beyond what the service needs may violate this requirement.",
4022
+ "description": "CAADCA Section 31(b)(3) requires data minimization only collect personal information that is reasonably necessary. Code that collects extensive personal data fields beyond what the service needs may violate this requirement.",
4013
4023
  "patterns": [
4014
4024
  {
4015
4025
  "pattern": "(?:collectData|collect_data|gatherInfo|gather_info|harvestData|harvest_data)\\s*\\(",
@@ -4236,7 +4246,7 @@
4236
4246
  "severity": "critical",
4237
4247
  "confidence": "medium",
4238
4248
  "category": "online-safety",
4239
- "description": "Account creation or signup flow detected without age verification. The AU Online Safety Act 2021 (as amended 2024) s.63B requires social media platforms to take reasonable steps to verify that users are aged 16 or over before allowing account creation. Registration flows must include age assurance mechanisms \u2014 not just self-declaration.",
4249
+ "description": "Account creation or signup flow detected without age verification. The AU Online Safety Act 2021 (as amended 2024) s.63B requires social media platforms to take reasonable steps to verify that users are aged 16 or over before allowing account creation. Registration flows must include age assurance mechanisms not just self-declaration.",
4240
4250
  "patterns": [
4241
4251
  {
4242
4252
  "pattern": "(?:createAccount|create_account|registerUser|register_user)\\s*\\((?![^)]*(?:age|dob|dateOfBirth|date_of_birth|birthDate|birth_date|ageVerif|ageCheck|age_check|verifyAge|verify_age))[^)]*\\)",
@@ -4259,7 +4269,7 @@
4259
4269
  "flags": "gi"
4260
4270
  }
4261
4271
  ],
4262
- "fix_suggestion": "Add an age verification step before account creation. Under AU OSA s.63B, social media services must use reasonably effective age assurance to prevent under-16s from creating accounts. Implement identity-based verification (document check, biometric estimation, or digital ID) \u2014 not just self-declaration.",
4272
+ "fix_suggestion": "Add an age verification step before account creation. Under AU OSA s.63B, social media services must use reasonably effective age assurance to prevent under-16s from creating accounts. Implement identity-based verification (document check, biometric estimation, or digital ID) not just self-declaration.",
4263
4273
  "penalty": "Up to AUD $49.5M (body corporate) or AUD $2.475M (individual)",
4264
4274
  "languages": [
4265
4275
  "typescript",
@@ -4283,7 +4293,7 @@
4283
4293
  "severity": "high",
4284
4294
  "confidence": "medium",
4285
4295
  "category": "online-safety",
4286
- "description": "Reliance on self-declared age (checkbox, simple DOB field without verification) detected. The AU Online Safety Act 2021 (as amended 2024) s.63C requires 'reasonably effective' age assurance \u2014 simple self-declaration (e.g., 'I am over 16' checkbox or unverified date-of-birth entry) does not meet this threshold. Platforms must use technology-based age assurance methods.",
4296
+ "description": "Reliance on self-declared age (checkbox, simple DOB field without verification) detected. The AU Online Safety Act 2021 (as amended 2024) s.63C requires 'reasonably effective' age assurance simple self-declaration (e.g., 'I am over 16' checkbox or unverified date-of-birth entry) does not meet this threshold. Platforms must use technology-based age assurance methods.",
4287
4297
  "patterns": [
4288
4298
  {
4289
4299
  "pattern": "(?:isOver16|is_over_16|isOver18|is_over_18|isAdult|is_adult|ageConfirmed|age_confirmed)\\s*[:=]\\s*(?:true|false|checkbox|input)",
@@ -4717,7 +4727,7 @@
4717
4727
  "severity": "high",
4718
4728
  "confidence": "medium",
4719
4729
  "category": "online-safety",
4720
- "description": "Access to age-restricted, mature, or harmful content categories detected without re-authentication or age re-verification. The AU Online Safety Act 2021 s.109 BOSE expectations and the Restricted Access System Declaration require platforms to implement stepped access controls \u2014 users must re-verify their age or identity before viewing restricted content, even if previously authenticated.",
4730
+ "description": "Access to age-restricted, mature, or harmful content categories detected without re-authentication or age re-verification. The AU Online Safety Act 2021 s.109 BOSE expectations and the Restricted Access System Declaration require platforms to implement stepped access controls users must re-verify their age or identity before viewing restricted content, even if previously authenticated.",
4721
4731
  "patterns": [
4722
4732
  {
4723
4733
  "pattern": "(?:restrictedContent|restricted_content|matureContent|mature_content|adultContent|adult_content|ageGatedContent|age_gated_content|nsfw)\\s*(?:=|:|\\()(?![^\\n]*(?:reAuth|re_auth|reVerify|re_verify|confirmAge|confirm_age|ageCheck|age_check|verifyAge|verify_age|stepUp|step_up))",
@@ -4776,7 +4786,7 @@
4776
4786
  }
4777
4787
  ],
4778
4788
  "fix_suggestion": "Gate user identification behind explicit consent: if (hasParentalConsent) { analytics.identify(...) }",
4779
- "penalty": "EU AI Act Art. 99: Up to \u20ac35M or 7% of global annual turnover",
4789
+ "penalty": "EU AI Act Art. 99: Up to €35M or 7% of global annual turnover",
4780
4790
  "languages": [
4781
4791
  "typescript",
4782
4792
  "javascript",
@@ -4812,7 +4822,7 @@
4812
4822
  }
4813
4823
  ],
4814
4824
  "fix_suggestion": "Add audit logging to recommendation functions: log input features, output ranking, and model version for each recommendation served.",
4815
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
4825
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
4816
4826
  "languages": [
4817
4827
  "typescript",
4818
4828
  "javascript",
@@ -4856,7 +4866,7 @@
4856
4866
  }
4857
4867
  ],
4858
4868
  "fix_suggestion": "Add fairness testing to ML pipeline: run bias audits (demographic parity, equalized odds) before deploying models that affect children.",
4859
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
4869
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
4860
4870
  "languages": [
4861
4871
  "typescript",
4862
4872
  "javascript",
@@ -4908,7 +4918,7 @@
4908
4918
  }
4909
4919
  ],
4910
4920
  "fix_suggestion": "Add visible AI-generated content labels: include 'AI Generated' badge/watermark on all synthetic media shown to children.",
4911
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
4921
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
4912
4922
  "languages": [
4913
4923
  "typescript",
4914
4924
  "javascript",
@@ -4944,7 +4954,7 @@
4944
4954
  }
4945
4955
  ],
4946
4956
  "fix_suggestion": "Add human appeal mechanism: implement an appeal/review endpoint and surface it in the moderation notification to the user.",
4947
- "penalty": "EU AI Act Art. 99: Up to \u20ac35M or 7% of global annual turnover",
4957
+ "penalty": "EU AI Act Art. 99: Up to €35M or 7% of global annual turnover",
4948
4958
  "languages": [
4949
4959
  "typescript",
4950
4960
  "javascript",
@@ -4980,7 +4990,7 @@
4980
4990
  }
4981
4991
  ],
4982
4992
  "fix_suggestion": "Add AI disclosure: show 'You are chatting with an AI' before first interaction and in the UI header.",
4983
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
4993
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
4984
4994
  "languages": [
4985
4995
  "typescript",
4986
4996
  "javascript",
@@ -5034,7 +5044,7 @@
5034
5044
  }
5035
5045
  ],
5036
5046
  "fix_suggestion": "Create a model card documenting training data sources, intended use, limitations, and bias considerations.",
5037
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
5047
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
5038
5048
  "languages": [
5039
5049
  "typescript",
5040
5050
  "javascript",
@@ -5070,7 +5080,7 @@
5070
5080
  }
5071
5081
  ],
5072
5082
  "fix_suggestion": "Add explainability: include a 'reason' parameter in automated decisions and surface it to affected users.",
5073
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
5083
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
5074
5084
  "languages": [
5075
5085
  "typescript",
5076
5086
  "javascript",
@@ -5106,7 +5116,7 @@
5106
5116
  }
5107
5117
  ],
5108
5118
  "fix_suggestion": "Disclose age-based personalization: add a visible notice that 'Content is adapted for your age group' when age-specific filtering is active.",
5109
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
5119
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
5110
5120
  "languages": [
5111
5121
  "typescript",
5112
5122
  "javascript",
@@ -5144,7 +5154,7 @@
5144
5154
  }
5145
5155
  ],
5146
5156
  "fix_suggestion": "Add dedicated AI terms of service: create an /ai-terms page explaining how AI features work, their limitations, and child-specific protections.",
5147
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
5157
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
5148
5158
  "languages": [
5149
5159
  "typescript",
5150
5160
  "javascript",
@@ -5236,7 +5246,7 @@
5236
5246
  "severity": "medium",
5237
5247
  "confidence": "medium",
5238
5248
  "category": "constitutional-ai",
5239
- "description": "AI-generated content shown to children must have labels comprehensible to the child's age group. Abstract disclaimers are insufficient \u2014 use visual indicators.",
5249
+ "description": "AI-generated content shown to children must have labels comprehensible to the child's age group. Abstract disclaimers are insufficient use visual indicators.",
5240
5250
  "patterns": [
5241
5251
  {
5242
5252
  "pattern": "(?:generateForChild|childContent|kidsGenerate)\\(",
@@ -5310,7 +5320,7 @@
5310
5320
  "severity": "medium",
5311
5321
  "confidence": "low",
5312
5322
  "category": "constitutional-ai",
5313
- "description": "AI systems learning child preferences must offer periodic identity/preference reset capability. Children's interests change rapidly \u2014 stale profiles can create filter bubbles.",
5323
+ "description": "AI systems learning child preferences must offer periodic identity/preference reset capability. Children's interests change rapidly stale profiles can create filter bubbles.",
5314
5324
  "patterns": [
5315
5325
  {
5316
5326
  "pattern": "(?:userPreferences|learningProfile|interestProfile|userModel)\\.(?:save|persist|update)",
@@ -5346,7 +5356,7 @@
5346
5356
  "severity": "high",
5347
5357
  "confidence": "medium",
5348
5358
  "category": "constitutional-ai",
5349
- "description": "AI systems processing children's data must implement data minimization \u2014 collecting only what is strictly necessary. Broad collection scopes, wildcard field selection, or indefinite retention violate the data minimization principle (GDPR Art. 5(1)(c), IEEE 7010-2020).",
5359
+ "description": "AI systems processing children's data must implement data minimization collecting only what is strictly necessary. Broad collection scopes, wildcard field selection, or indefinite retention violate the data minimization principle (GDPR Art. 5(1)(c), IEEE 7010-2020).",
5350
5360
  "patterns": [
5351
5361
  {
5352
5362
  "pattern": "(?:collectUserData|gatherData|harvestData|scrapeUser)\\((?![^)]*(?:fields|only|select))",
@@ -5428,7 +5438,7 @@
5428
5438
  "severity": "high",
5429
5439
  "confidence": "medium",
5430
5440
  "category": "constitutional-ai",
5431
- "description": "High-impact AI decisions about children (content restrictions, learning path changes, behavioral assessments) must include a parental co-regulation mechanism \u2014 parents must be notified and given override capability (IEEE 2089-2021 Section 6.4, UN CRC Art. 5).",
5441
+ "description": "High-impact AI decisions about children (content restrictions, learning path changes, behavioral assessments) must include a parental co-regulation mechanism parents must be notified and given override capability (IEEE 2089-2021 Section 6.4, UN CRC Art. 5).",
5432
5442
  "patterns": [
5433
5443
  {
5434
5444
  "pattern": "(?:setContentRestriction|restrictAccess|blockContent|limitUsage)\\((?![^)]*parent)",
@@ -5508,7 +5518,7 @@
5508
5518
  "severity": "high",
5509
5519
  "confidence": "low",
5510
5520
  "category": "ai-governance",
5511
- "description": "EU AI Act Art. 10(2) requires training data sets to be subject to data governance practices \u2014 including documentation of data sources, collection methodology, and quality metrics. ML pipelines without data provenance tracking violate this requirement.",
5521
+ "description": "EU AI Act Art. 10(2) requires training data sets to be subject to data governance practices including documentation of data sources, collection methodology, and quality metrics. ML pipelines without data provenance tracking violate this requirement.",
5512
5522
  "patterns": [
5513
5523
  {
5514
5524
  "pattern": "(?:loadDataset|readTrainingData|importDataset|fetchTrainingSet)\\((?![^)]*(?:provenance|source|documentation|metadata))",
@@ -5524,7 +5534,7 @@
5524
5534
  }
5525
5535
  ],
5526
5536
  "fix_suggestion": "Add data governance documentation: create a data card for each training dataset documenting source, collection method, size, demographics, known biases, and quality metrics.",
5527
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
5537
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
5528
5538
  "languages": [
5529
5539
  "typescript",
5530
5540
  "javascript",
@@ -5560,7 +5570,7 @@
5560
5570
  }
5561
5571
  ],
5562
5572
  "fix_suggestion": "Add bias testing to the training pipeline: run demographic parity checks, compute equalized odds metrics, and document bias audit results before deployment.",
5563
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
5573
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
5564
5574
  "languages": [
5565
5575
  "typescript",
5566
5576
  "javascript",
@@ -5596,7 +5606,7 @@
5596
5606
  }
5597
5607
  ],
5598
5608
  "fix_suggestion": "Validate data representativeness: use stratified sampling, verify demographic coverage across age groups, and document gaps between training data and target child population.",
5599
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
5609
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
5600
5610
  "languages": [
5601
5611
  "typescript",
5602
5612
  "javascript",
@@ -5632,7 +5642,7 @@
5632
5642
  }
5633
5643
  ],
5634
5644
  "fix_suggestion": "Verify consent before using children's data for training: implement opt-in parental consent for data use in ML training, maintain consent audit trail, and provide data deletion mechanisms.",
5635
- "penalty": "EU AI Act Art. 99: Up to \u20ac35M or 7% of global annual turnover (combined with GDPR)",
5645
+ "penalty": "EU AI Act Art. 99: Up to €35M or 7% of global annual turnover (combined with GDPR)",
5636
5646
  "languages": [
5637
5647
  "typescript",
5638
5648
  "javascript",
@@ -5668,7 +5678,7 @@
5668
5678
  }
5669
5679
  ],
5670
5680
  "fix_suggestion": "Add human-in-the-loop: implement review queues for consequential AI decisions, add manual override capabilities, and require human approval for actions affecting child accounts.",
5671
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
5681
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
5672
5682
  "languages": [
5673
5683
  "typescript",
5674
5684
  "javascript",
@@ -5704,7 +5714,7 @@
5704
5714
  }
5705
5715
  ],
5706
5716
  "fix_suggestion": "Implement emergency stop: add a kill switch endpoint (/api/ai/stop), monitoring alerts for anomalous behavior, and immediate halt capability accessible to human overseers.",
5707
- "penalty": "EU AI Act Art. 99: Up to \u20ac35M or 7% of global annual turnover",
5717
+ "penalty": "EU AI Act Art. 99: Up to €35M or 7% of global annual turnover",
5708
5718
  "languages": [
5709
5719
  "typescript",
5710
5720
  "javascript",
@@ -5740,7 +5750,7 @@
5740
5750
  }
5741
5751
  ],
5742
5752
  "fix_suggestion": "Add interpretability: attach explanation metadata (SHAP values, feature importance, confidence scores, or natural language reasoning) to every AI output served to overseers.",
5743
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
5753
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
5744
5754
  "languages": [
5745
5755
  "typescript",
5746
5756
  "javascript",
@@ -5776,7 +5786,7 @@
5776
5786
  }
5777
5787
  ],
5778
5788
  "fix_suggestion": "Add oversight audit trail: log every human review, override, and approval action with timestamp, reviewer ID, original AI output, and human decision rationale.",
5779
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
5789
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
5780
5790
  "languages": [
5781
5791
  "typescript",
5782
5792
  "javascript",
@@ -5812,7 +5822,7 @@
5812
5822
  }
5813
5823
  ],
5814
5824
  "fix_suggestion": "Add accuracy monitoring: implement real-time error rate tracking, declare expected accuracy levels in model documentation, and set up alerts when accuracy degrades below thresholds.",
5815
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
5825
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
5816
5826
  "languages": [
5817
5827
  "typescript",
5818
5828
  "javascript",
@@ -5860,7 +5870,7 @@
5860
5870
  }
5861
5871
  ],
5862
5872
  "fix_suggestion": "Add AI failure fallback: wrap all AI calls in try/catch with timeouts, implement graceful degradation (e.g., static content when AI unavailable), and log all failures for review.",
5863
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
5873
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
5864
5874
  "languages": [
5865
5875
  "typescript",
5866
5876
  "javascript",
@@ -5900,7 +5910,7 @@
5900
5910
  }
5901
5911
  ],
5902
5912
  "fix_suggestion": "Add adversarial robustness: implement input sanitization for all user-provided text before passing to AI models, add prompt injection detection, and run periodic adversarial testing.",
5903
- "penalty": "EU AI Act Art. 99: Up to \u20ac15M or 3% of global annual turnover",
5913
+ "penalty": "EU AI Act Art. 99: Up to €15M or 3% of global annual turnover",
5904
5914
  "languages": [
5905
5915
  "typescript",
5906
5916
  "javascript",
@@ -6046,7 +6056,7 @@
6046
6056
  "severity": "high",
6047
6057
  "confidence": "medium",
6048
6058
  "category": "data-minimization",
6049
- "description": "GDPR Article 5(1)(c) requires data minimization \u2014 only collecting data that is adequate, relevant, and limited to what is necessary. For children's services, this standard is applied more strictly.",
6059
+ "description": "GDPR Article 5(1)(c) requires data minimization only collecting data that is adequate, relevant, and limited to what is necessary. For children's services, this standard is applied more strictly.",
6050
6060
  "patterns": [
6051
6061
  {
6052
6062
  "pattern": "(?:collectAll|collect_all|gatherAll|gather_all|fetchAll|fetch_all)(?:Data|Info|UserData|Profile)",
@@ -6101,7 +6111,7 @@
6101
6111
  "flags": "gi"
6102
6112
  }
6103
6113
  ],
6104
- "fix_suggestion": "Implement a complete data erasure endpoint that deletes all personal data when requested, with special priority for data collected from children. Do not soft-delete or archive \u2014 GDPR Article 17 requires actual erasure unless a legal retention obligation applies.",
6114
+ "fix_suggestion": "Implement a complete data erasure endpoint that deletes all personal data when requested, with special priority for data collected from children. Do not soft-delete or archive GDPR Article 17 requires actual erasure unless a legal retention obligation applies.",
6105
6115
  "penalty": "Up to 4% of global annual turnover (GDPR Art. 83)",
6106
6116
  "languages": [
6107
6117
  "typescript",
@@ -6158,7 +6168,7 @@
6158
6168
  }
6159
6169
  ],
6160
6170
  "fix_suggestion": "Under India's DPDP Act Section 9(3), ANY tracking or behavioral monitoring for users under 18 is prohibited regardless of consent. Implement age-gating that completely disables all analytics, tracking, and ad SDKs for users under 18 in India.",
6161
- "penalty": "Up to \u20b9250 crore (~$30M USD)",
6171
+ "penalty": "Up to ₹250 crore (~$30M USD)",
6162
6172
  "languages": [
6163
6173
  "typescript",
6164
6174
  "javascript",
@@ -6199,7 +6209,7 @@
6199
6209
  }
6200
6210
  ],
6201
6211
  "fix_suggestion": "Under India's DPDP Act, the age of majority for data processing is 18 (not 13). Implement verifiable parental consent for ALL users under 18 when processing personal data for Indian users.",
6202
- "penalty": "Up to \u20b9250 crore (~$30M USD)",
6212
+ "penalty": "Up to ₹250 crore (~$30M USD)",
6203
6213
  "languages": [
6204
6214
  "typescript",
6205
6215
  "javascript",
@@ -6244,7 +6254,7 @@
6244
6254
  }
6245
6255
  ],
6246
6256
  "fix_suggestion": "Completely disable all targeted/personalized advertising for users under 18 in India. Only contextual (non-personalized) ads are permissible.",
6247
- "penalty": "Up to \u20b9250 crore (~$30M USD)",
6257
+ "penalty": "Up to ₹250 crore (~$30M USD)",
6248
6258
  "languages": [
6249
6259
  "typescript",
6250
6260
  "javascript",
@@ -6289,7 +6299,7 @@
6289
6299
  }
6290
6300
  ],
6291
6301
  "fix_suggestion": "Under India's DPDP Act, behavioral monitoring of anyone under 18 is prohibited. Disable session recording, heatmaps, and engagement analytics for users under 18 in India.",
6292
- "penalty": "Up to \u20b9250 crore (~$30M USD)",
6302
+ "penalty": "Up to ₹250 crore (~$30M USD)",
6293
6303
  "languages": [
6294
6304
  "typescript",
6295
6305
  "javascript",
@@ -6330,7 +6340,7 @@
6330
6340
  }
6331
6341
  ],
6332
6342
  "fix_suggestion": "Review all data processing that involves children for potential detrimental effects on well-being. This includes addictive design patterns, engagement loops, and excessive notifications.",
6333
- "penalty": "Up to \u20b9250 crore (~$30M USD)",
6343
+ "penalty": "Up to ₹250 crore (~$30M USD)",
6334
6344
  "languages": [
6335
6345
  "typescript",
6336
6346
  "javascript",
@@ -6396,7 +6406,7 @@
6396
6406
  "severity": "high",
6397
6407
  "confidence": "medium",
6398
6408
  "category": "consent",
6399
- "description": "LGPD Article 14 \u00a74 prohibits conditioning game/app participation on providing excess personal data. Children must not be required to share data beyond what is necessary to participate.",
6409
+ "description": "LGPD Article 14 §4 prohibits conditioning game/app participation on providing excess personal data. Children must not be required to share data beyond what is necessary to participate.",
6400
6410
  "patterns": [
6401
6411
  {
6402
6412
  "pattern": "(?:requiredToPlay|required_to_play|mustProvide|must_provide|gateContent|gate_content).*(?:email|phone|name|address|school)",
@@ -6411,7 +6421,7 @@
6411
6421
  "flags": "gi"
6412
6422
  }
6413
6423
  ],
6414
- "fix_suggestion": "Do not gate game features, levels, or content behind data collection requirements. Under LGPD Article 14 \u00a74, children's participation cannot be conditioned on providing excess personal data.",
6424
+ "fix_suggestion": "Do not gate game features, levels, or content behind data collection requirements. Under LGPD Article 14 §4, children's participation cannot be conditioned on providing excess personal data.",
6415
6425
  "penalty": "Up to 2% of revenue, capped at R$50 million per violation",
6416
6426
  "languages": [
6417
6427
  "typescript",
@@ -6437,7 +6447,7 @@
6437
6447
  "severity": "critical",
6438
6448
  "confidence": "medium",
6439
6449
  "category": "consent",
6440
- "description": "LGPD Article 14 \u00a71 requires at least one parent or legal guardian to provide specific and highlighted consent for processing children's (under 12) personal data.",
6450
+ "description": "LGPD Article 14 §1 requires at least one parent or legal guardian to provide specific and highlighted consent for processing children's (under 12) personal data.",
6441
6451
  "patterns": [
6442
6452
  {
6443
6453
  "pattern": "(?:age|userAge|childAge)\\s*(?:<|<=|===?|==)\\s*1[2-3](?!\\d)(?!.*(?:parent|guardian|responsavel))",
@@ -6485,7 +6495,7 @@
6485
6495
  "flags": "gi"
6486
6496
  }
6487
6497
  ],
6488
- "fix_suggestion": "For Brazilian adolescents (12-18), ensure data processing includes age-appropriate explanations and respects their right to be consulted. LGPD Article 14 \u00a76 requires notices understandable by the child themselves.",
6498
+ "fix_suggestion": "For Brazilian adolescents (12-18), ensure data processing includes age-appropriate explanations and respects their right to be consulted. LGPD Article 14 §6 requires notices understandable by the child themselves.",
6489
6499
  "penalty": "Up to 2% of revenue, capped at R$50 million per violation",
6490
6500
  "languages": [
6491
6501
  "typescript",
@@ -6571,7 +6581,7 @@
6571
6581
  "flags": "gi"
6572
6582
  }
6573
6583
  ],
6574
- "fix_suggestion": "Ensure consent flows for teen users include simplified, age-appropriate explanations. The OPC requires that the individual can understand what they are consenting to \u2014 complex legal language fails this test for teens.",
6584
+ "fix_suggestion": "Ensure consent flows for teen users include simplified, age-appropriate explanations. The OPC requires that the individual can understand what they are consenting to complex legal language fails this test for teens.",
6575
6585
  "penalty": "OPC compliance orders; Federal Court orders up to $100K CAD per violation",
6576
6586
  "languages": [
6577
6587
  "typescript",
@@ -6634,7 +6644,7 @@
6634
6644
  "severity": "medium",
6635
6645
  "confidence": "low",
6636
6646
  "category": "purpose-limitation",
6637
- "description": "PIPEDA Section 5(3) requires that data collection serve purposes a 'reasonable person' would consider appropriate. For minors, the OPC applies a higher standard \u2014 marketing, profiling, and engagement optimization may fail this test.",
6647
+ "description": "PIPEDA Section 5(3) requires that data collection serve purposes a 'reasonable person' would consider appropriate. For minors, the OPC applies a higher standard marketing, profiling, and engagement optimization may fail this test.",
6638
6648
  "patterns": [
6639
6649
  {
6640
6650
  "pattern": "(?:marketingConsent|marketing_consent|promotionalEmails|promotional_emails)\\s*(?:=|:)\\s*true.*(?:child|minor|kid|teen|student|youth)",
@@ -6671,7 +6681,7 @@
6671
6681
  "severity": "critical",
6672
6682
  "confidence": "medium",
6673
6683
  "category": "consent",
6674
- "description": "South Korea PIPA Article 22-2 requires parental/guardian consent for processing personal data of children under 14. This extends COPPA's threshold by one year \u2014 children aged 13 need parental consent in South Korea.",
6684
+ "description": "South Korea PIPA Article 22-2 requires parental/guardian consent for processing personal data of children under 14. This extends COPPA's threshold by one year children aged 13 need parental consent in South Korea.",
6675
6685
  "patterns": [
6676
6686
  {
6677
6687
  "pattern": "(?:age|userAge|childAge)\\s*(?:<|<=|===?|==)\\s*13(?!\\d)(?!.*(?:parent|guardian|legal))",
@@ -6712,7 +6722,7 @@
6712
6722
  "severity": "high",
6713
6723
  "confidence": "low",
6714
6724
  "category": "transparency",
6715
- "description": "South Korea PIPA Article 39-3 \u00a75 requires privacy information to be presented in clear, understandable language for children under 14. Generic adult privacy policies fail this requirement.",
6725
+ "description": "South Korea PIPA Article 39-3 §5 requires privacy information to be presented in clear, understandable language for children under 14. Generic adult privacy policies fail this requirement.",
6716
6726
  "patterns": [
6717
6727
  {
6718
6728
  "pattern": "(?:privacyPolicy|privacy_policy|termsUrl|terms_url|privacyUrl|privacy_url)\\s*(?:=|:)\\s*['\"](?:https?:\\/\\/|\\/)(?!.*(?:child|kid|minor|simple|easy))",
@@ -6810,7 +6820,7 @@
6810
6820
  }
6811
6821
  ],
6812
6822
  "fix_suggestion": "Hide or disable social comparison metrics (likes, followers, view counts, leaderboards) for users under 18. Consider removing public metrics entirely or showing them only to the content creator.",
6813
- "penalty": "Ethical design advisory \u2014 correlates with AADC Standard 5 (detrimental use), DSA Article 28, CAADCA dark pattern provisions",
6823
+ "penalty": "Ethical design advisory correlates with AADC Standard 5 (detrimental use), DSA Article 28, CAADCA dark pattern provisions",
6814
6824
  "languages": [
6815
6825
  "typescript",
6816
6826
  "javascript",
@@ -6847,7 +6857,7 @@
6847
6857
  }
6848
6858
  ],
6849
6859
  "fix_suggestion": "Implement natural stopping cues: end-of-content screens, session time limits, break prompts ('You've been watching for 30 minutes'), or 'Good Night' modes. Do not allow infinite content consumption without intervention.",
6850
- "penalty": "Ethical design advisory \u2014 correlates with DSA Article 28 (addictive design), AADC Standard 5",
6860
+ "penalty": "Ethical design advisory correlates with DSA Article 28 (addictive design), AADC Standard 5",
6851
6861
  "languages": [
6852
6862
  "typescript",
6853
6863
  "javascript",
@@ -6888,7 +6898,7 @@
6888
6898
  }
6889
6899
  ],
6890
6900
  "fix_suggestion": "Implement a PIN-protected parent dashboard showing usage time, content accessed, and activity summaries. Ensure the dashboard provides oversight without invasive psychometric profiling of the child.",
6891
- "penalty": "Positive design advisory \u2014 correlates with AADC Standard 11 (parental controls), AADCA parental tools requirement",
6901
+ "penalty": "Positive design advisory correlates with AADC Standard 11 (parental controls), AADCA parental tools requirement",
6892
6902
  "languages": [
6893
6903
  "typescript",
6894
6904
  "javascript",
@@ -6937,7 +6947,7 @@
6937
6947
  }
6938
6948
  ],
6939
6949
  "fix_suggestion": "Do not combine randomized rewards with real-money purchases in children's products. Show exact contents before purchase, or use fixed reward systems. Multiple jurisdictions classify loot boxes as gambling when targeting children.",
6940
- "penalty": "Varies by jurisdiction \u2014 Belgium banned (criminal sanctions), Netherlands fined (up to \u20ac10M), Australia under review",
6950
+ "penalty": "Varies by jurisdiction Belgium banned (criminal sanctions), Netherlands fined (up to €10M), Australia under review",
6941
6951
  "languages": [
6942
6952
  "typescript",
6943
6953
  "javascript",
@@ -6977,7 +6987,7 @@
6977
6987
  "flags": "gi"
6978
6988
  }
6979
6989
  ],
6980
- "fix_suggestion": "For Australian deployments, set minimum registration age to 16. Parental consent cannot override this requirement. Implement robust age verification \u2014 simple self-declaration is insufficient under the Act.",
6990
+ "fix_suggestion": "For Australian deployments, set minimum registration age to 16. Parental consent cannot override this requirement. Implement robust age verification simple self-declaration is insufficient under the Act.",
6981
6991
  "penalty": "Up to A$49.5 million (150,000 penalty units)",
6982
6992
  "languages": [
6983
6993
  "typescript",
@@ -6996,6 +7006,798 @@
6996
7006
  "transform_type": null,
6997
7007
  "scaffold_id": "age-gate-auth",
6998
7008
  "guidance_url": "https://www.esafety.gov.au/about-us/industry-regulation/social-media-age-restrictions"
7009
+ },
7010
+ {
7011
+ "id": "asaa-av-001",
7012
+ "name": "Missing Platform Age API Integration",
7013
+ "severity": "critical",
7014
+ "confidence": "medium",
7015
+ "category": "age-verification",
7016
+ "description": "ASAA requires app stores and developers to integrate platform-native age APIs (Apple Declared Age Range API, Google Play Age Verification) during account creation and onboarding. Account creation flows that do not call these APIs leave teen users (13-17) unverified, violating TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7017
+ "patterns": [
7018
+ {
7019
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:createUser|signUp|createAccount|registerUser|onboardUser)\\s*\\([^)]*\\)(?!.*(?:declaredAgeRange|ageRangeAPI|AgeVerification|PlayIntegrity|ageAssurance))",
7020
+ "flags": "gi"
7021
+ },
7022
+ {
7023
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:create_user|sign_up|create_account|register_user|onboard_user)\\s*\\([^)]*\\)(?!.*(?:declared_age_range|age_range_api|age_verification|play_integrity|age_assurance))",
7024
+ "flags": "gi"
7025
+ },
7026
+ {
7027
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:AuthService|UserService|AccountService)\\.(?:create|register|signUp)\\s*\\((?!.*(?:ageAPI|ageRange|AgeVerification|ageAssurance))",
7028
+ "flags": "gi"
7029
+ }
7030
+ ],
7031
+ "fix_suggestion": "Integrate Apple's Declared Age Range API (DeviceCheck framework) or Google Play Age Verification API into your account creation flow. Query the platform age signal before completing registration and branch logic for users identified as under 18.",
7032
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7033
+ "languages": [
7034
+ "typescript",
7035
+ "javascript",
7036
+ "python",
7037
+ "go",
7038
+ "java",
7039
+ "kotlin",
7040
+ "swift"
7041
+ ],
7042
+ "packs": [
7043
+ "asaa"
7044
+ ],
7045
+ "fixability": "guided",
7046
+ "transform_type": null,
7047
+ "scaffold_id": null,
7048
+ "guidance_url": null
7049
+ },
7050
+ {
7051
+ "id": "asaa-av-002",
7052
+ "name": "Raw DOB Storage Instead of Age Tokens",
7053
+ "severity": "critical",
7054
+ "confidence": "high",
7055
+ "category": "age-verification",
7056
+ "description": "ASAA and data minimization principles require apps to store age verification tokens or age bands rather than raw dates of birth. Storing date_of_birth or dob fields directly exposes sensitive PII and creates unnecessary liability under TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7057
+ "patterns": [
7058
+ {
7059
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:date_of_birth|dateOfBirth|dob|birthDate|birth_date)\\s*[:=]\\s*(?:req\\.|request\\.|params\\.|body\\.|input\\.|data\\.)",
7060
+ "flags": "gi"
7061
+ },
7062
+ {
7063
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:INSERT|UPDATE)\\s+(?:INTO\\s+)?\\w+.*(?:date_of_birth|dob|birth_date)\\s*[,)]",
7064
+ "flags": "gi"
7065
+ },
7066
+ {
7067
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})\\buser\\.(?:dob|dateOfBirth|date_of_birth|birthDate|birth_date)\\s*=",
7068
+ "flags": "gi"
7069
+ }
7070
+ ],
7071
+ "fix_suggestion": "Replace raw DOB storage with an age verification token or age band (e.g., 'under-13', '13-17', '18+'). Compute the age category at verification time and discard the raw date. Store only the verification result and method.",
7072
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7073
+ "languages": [
7074
+ "typescript",
7075
+ "javascript",
7076
+ "python",
7077
+ "go",
7078
+ "java",
7079
+ "kotlin",
7080
+ "swift"
7081
+ ],
7082
+ "packs": [
7083
+ "asaa"
7084
+ ],
7085
+ "fixability": "guided",
7086
+ "transform_type": null,
7087
+ "scaffold_id": null,
7088
+ "guidance_url": null
7089
+ },
7090
+ {
7091
+ "id": "asaa-av-003",
7092
+ "name": "Missing Fallback Age Verification",
7093
+ "severity": "critical",
7094
+ "confidence": "medium",
7095
+ "category": "age-verification",
7096
+ "description": "ASAA requires robust age verification that does not rely solely on self-declaration. When platform-native age APIs are unavailable or inconclusive, apps must fall back to a third-party age verification provider (e.g., Ondato, Veriff, Yoti). Age check flows without a fallback path leave gaps in compliance.",
7097
+ "patterns": [
7098
+ {
7099
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:verifyAge|checkAge|ageGate|ageCheck|age_verify|age_gate|age_check)\\s*\\([^)]*\\)(?!.*(?:ondato|Ondato|veriff|Veriff|yoti|Yoti|jumio|Jumio|fallback|Fallback|thirdParty|third_party))",
7100
+ "flags": "gi"
7101
+ },
7102
+ {
7103
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:ageVerification|age_verification)\\s*(?:=|:)\\s*(?:self_declared|selfDeclared|checkbox|user_input|userInput)",
7104
+ "flags": "gi"
7105
+ },
7106
+ {
7107
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})if\\s*\\(\\s*(?:age|userAge|user_age)\\s*(?:>=?|<=?|===?)\\s*\\d+\\s*\\)(?!.*(?:verify|ondato|veriff|yoti|fallback|thirdParty|third_party))",
7108
+ "flags": "gi"
7109
+ }
7110
+ ],
7111
+ "fix_suggestion": "Add a fallback age verification path using a certified third-party provider (Ondato, Veriff, Yoti, or equivalent). When platform age APIs return inconclusive results, redirect to the fallback provider before granting access.",
7112
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7113
+ "languages": [
7114
+ "typescript",
7115
+ "javascript",
7116
+ "python",
7117
+ "go",
7118
+ "java",
7119
+ "kotlin",
7120
+ "swift"
7121
+ ],
7122
+ "packs": [
7123
+ "asaa"
7124
+ ],
7125
+ "fixability": "guided",
7126
+ "transform_type": null,
7127
+ "scaffold_id": null,
7128
+ "guidance_url": null
7129
+ },
7130
+ {
7131
+ "id": "asaa-av-004",
7132
+ "name": "Inadequate Age Category Assignment",
7133
+ "severity": "critical",
7134
+ "confidence": "high",
7135
+ "category": "age-verification",
7136
+ "description": "COPPA only requires checks for users under 13, but ASAA extends protections to teens aged 13-17. Code that checks only for <13 (COPPA threshold) without a separate 13-17 category fails to apply ASAA teen protections required by TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7137
+ "patterns": [
7138
+ {
7139
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:age|userAge|user_age)\\s*<\\s*13(?!.*(?:teen|minor|17|18|youngAdult|young_adult|ageBand|age_band))",
7140
+ "flags": "gi"
7141
+ },
7142
+ {
7143
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:isChild|is_child|isMinor|is_minor)\\s*(?:=|:)\\s*(?:age|userAge|user_age)\\s*<\\s*13(?!.*(?:teen|isTeen|is_teen|under18|under_18))",
7144
+ "flags": "gi"
7145
+ },
7146
+ {
7147
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})COPPA_AGE\\s*(?:=|:)\\s*13(?!.*(?:ASAA|TEEN|teen_age|teenAge|MINOR_AGE|minor_age))",
7148
+ "flags": "gi"
7149
+ }
7150
+ ],
7151
+ "fix_suggestion": "Add a teen age category (13-17) alongside the existing COPPA child category (<13). Implement separate permission levels: children (<13) require full COPPA compliance, teens (13-17) require ASAA parental consent and device linking, adults (18+) have standard access.",
7152
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7153
+ "languages": [
7154
+ "typescript",
7155
+ "javascript",
7156
+ "python",
7157
+ "go",
7158
+ "java",
7159
+ "kotlin",
7160
+ "swift"
7161
+ ],
7162
+ "packs": [
7163
+ "asaa"
7164
+ ],
7165
+ "fixability": "guided",
7166
+ "transform_type": null,
7167
+ "scaffold_id": null,
7168
+ "guidance_url": null
7169
+ },
7170
+ {
7171
+ "id": "asaa-av-005",
7172
+ "name": "Missing Retroactive Account Verification (Alabama)",
7173
+ "severity": "critical",
7174
+ "confidence": "low",
7175
+ "category": "age-verification",
7176
+ "description": "Alabama HB 161 uniquely requires retroactive age verification for existing user accounts by Oct 1, 2027. Apps must implement a re-verification flow for their existing user base, not just new signups. Lack of a retroactive verification migration or batch process violates this requirement.",
7177
+ "patterns": [
7178
+ {
7179
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:existingUsers|existing_users|legacyUsers|legacy_users|currentUsers|current_users)(?!.*(?:reverify|reVerify|re_verify|ageCheck|age_check|retroactive|migration|batch))",
7180
+ "flags": "gi"
7181
+ },
7182
+ {
7183
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:userMigration|user_migration|accountUpgrade|account_upgrade)(?!.*(?:age|verify|ageVerif|age_verif))",
7184
+ "flags": "gi"
7185
+ },
7186
+ {
7187
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:SELECT|query)\\s+.*\\bFROM\\s+(?:users|accounts)\\b.*WHERE(?!.*(?:age_verified|ageVerified|verification_status|verificationStatus))",
7188
+ "flags": "gi"
7189
+ }
7190
+ ],
7191
+ "fix_suggestion": "Implement a retroactive age verification flow for existing accounts. Create a migration that flags unverified accounts and prompts users to complete age verification on next login. Set a compliance deadline (Oct 1, 2027 for Alabama HB 161) and restrict unverified accounts after that date.",
7192
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7193
+ "languages": [
7194
+ "typescript",
7195
+ "javascript",
7196
+ "python",
7197
+ "go",
7198
+ "java",
7199
+ "kotlin",
7200
+ "swift"
7201
+ ],
7202
+ "packs": [
7203
+ "asaa"
7204
+ ],
7205
+ "fixability": "flag-only",
7206
+ "transform_type": null,
7207
+ "scaffold_id": null,
7208
+ "guidance_url": null
7209
+ },
7210
+ {
7211
+ "id": "asaa-vpc-001",
7212
+ "name": "Free App Without Consent Flow",
7213
+ "severity": "critical",
7214
+ "confidence": "medium",
7215
+ "category": "parental-consent",
7216
+ "description": "ASAA requires verifiable parental consent before a minor (under 18) can download or install a free app. Download and install handlers that do not gate on parental consent violate TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7217
+ "patterns": [
7218
+ {
7219
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:downloadApp|installApp|startDownload|beginInstall|download_app|install_app|start_download|begin_install)\\s*\\([^)]*\\)(?!.*(?:parentalConsent|parental_consent|guardianApproval|guardian_approval|consentCheck|consent_check))",
7220
+ "flags": "gi"
7221
+ },
7222
+ {
7223
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:AppStore|PlayStore|appStore|playStore)\\.(?:download|install|purchase)\\s*\\((?!.*(?:consent|parental|guardian))",
7224
+ "flags": "gi"
7225
+ },
7226
+ {
7227
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:price|cost)\\s*(?:===?|==)\\s*(?:0|'free'|\"free\"|null).*(?:download|install)(?!.*(?:consent|parental|guardian))",
7228
+ "flags": "gi"
7229
+ }
7230
+ ],
7231
+ "fix_suggestion": "Add a parental consent gate before allowing free app downloads for users identified as minors. The consent mechanism must be verifiable (not just a checkbox). Consider using platform-native parental consent flows (Ask to Buy on iOS, Family Link on Android).",
7232
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7233
+ "languages": [
7234
+ "typescript",
7235
+ "javascript",
7236
+ "python",
7237
+ "go",
7238
+ "java",
7239
+ "kotlin",
7240
+ "swift"
7241
+ ],
7242
+ "packs": [
7243
+ "asaa"
7244
+ ],
7245
+ "fixability": "guided",
7246
+ "transform_type": null,
7247
+ "scaffold_id": null,
7248
+ "guidance_url": null
7249
+ },
7250
+ {
7251
+ "id": "asaa-vpc-002",
7252
+ "name": "Missing In-App Consent Triggers",
7253
+ "severity": "critical",
7254
+ "confidence": "medium",
7255
+ "category": "parental-consent",
7256
+ "description": "ASAA extends parental consent requirements to in-app purchases made by minors. Purchase flows that do not check for parental consent when the user is under 18 violate TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7257
+ "patterns": [
7258
+ {
7259
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:purchaseItem|buyItem|makePurchase|completePurchase|purchase_item|buy_item|make_purchase|complete_purchase)\\s*\\([^)]*\\)(?!.*(?:parentalConsent|parental_consent|guardianApproval|guardian_approval|isMinor|is_minor))",
7260
+ "flags": "gi"
7261
+ },
7262
+ {
7263
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:InAppPurchase|StoreKit|BillingClient)\\.(?:purchase|buy|initiate)\\s*\\((?!.*(?:consent|parental|guardian|minor))",
7264
+ "flags": "gi"
7265
+ },
7266
+ {
7267
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:checkout|processPayment|process_payment|chargeUser|charge_user)\\s*\\((?!.*(?:consent|parental|guardian|minor|ageCheck|age_check))",
7268
+ "flags": "gi"
7269
+ }
7270
+ ],
7271
+ "fix_suggestion": "Add a parental consent verification step to in-app purchase flows when the buyer is identified as a minor (under 18). Use platform-native purchase approval (Ask to Buy, Family Link) or implement a custom consent flow with verifiable parental identity.",
7272
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7273
+ "languages": [
7274
+ "typescript",
7275
+ "javascript",
7276
+ "python",
7277
+ "go",
7278
+ "java",
7279
+ "kotlin",
7280
+ "swift"
7281
+ ],
7282
+ "packs": [
7283
+ "asaa"
7284
+ ],
7285
+ "fixability": "guided",
7286
+ "transform_type": null,
7287
+ "scaffold_id": null,
7288
+ "guidance_url": null
7289
+ },
7290
+ {
7291
+ "id": "asaa-vpc-003",
7292
+ "name": "Data Sharing Without Parental Approval",
7293
+ "severity": "critical",
7294
+ "confidence": "medium",
7295
+ "category": "parental-consent",
7296
+ "description": "ASAA requires parental consent before sharing a minor's data with third parties. Features that enable data sharing, analytics opt-in, or social sharing without checking parental consent status violate TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7297
+ "patterns": [
7298
+ {
7299
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:shareData|share_data|enableSharing|enable_sharing|optInAnalytics|opt_in_analytics|thirdPartyShare|third_party_share)\\s*\\((?!.*(?:consent|parental|guardian|minor|ageCheck|age_check))",
7300
+ "flags": "gi"
7301
+ },
7302
+ {
7303
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:socialShare|social_share|shareProfile|share_profile|exportData|export_data)\\s*\\((?!.*(?:consent|parental|guardian|minor))",
7304
+ "flags": "gi"
7305
+ },
7306
+ {
7307
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:dataSharing|data_sharing|shareWithPartners|share_with_partners)\\s*(?:=|:)\\s*(?:true|enabled)(?!.*(?:consent|parental|guardian))",
7308
+ "flags": "gi"
7309
+ }
7310
+ ],
7311
+ "fix_suggestion": "Gate all data sharing features behind a parental consent check for minor accounts. Require verifiable parental approval before enabling analytics opt-in, social sharing, or third-party data transfers. Log the consent decision with timestamp and method.",
7312
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7313
+ "languages": [
7314
+ "typescript",
7315
+ "javascript",
7316
+ "python",
7317
+ "go",
7318
+ "java",
7319
+ "kotlin",
7320
+ "swift"
7321
+ ],
7322
+ "packs": [
7323
+ "asaa"
7324
+ ],
7325
+ "fixability": "guided",
7326
+ "transform_type": null,
7327
+ "scaffold_id": null,
7328
+ "guidance_url": null
7329
+ },
7330
+ {
7331
+ "id": "asaa-vpc-004",
7332
+ "name": "Inadequate Consent Verification Method",
7333
+ "severity": "critical",
7334
+ "confidence": "high",
7335
+ "category": "parental-consent",
7336
+ "description": "ASAA requires verifiable parental consent, meaning a simple checkbox or click-through is insufficient. Consent flows that rely solely on a checkbox, toggle, or single-click confirmation do not meet the verifiable consent standard required by TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7337
+ "patterns": [
7338
+ {
7339
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:parentalConsent|parental_consent|guardianConsent|guardian_consent)\\s*(?:=|:)\\s*(?:checkbox|toggle|isChecked|is_checked|clicked|accepted)",
7340
+ "flags": "gi"
7341
+ },
7342
+ {
7343
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})<(?:input|checkbox)\\s[^>]*(?:parentalConsent|parental-consent|guardian-consent)[^>]*(?:type\\s*=\\s*[\"']checkbox[\"'])",
7344
+ "flags": "gi"
7345
+ },
7346
+ {
7347
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:consentMethod|consent_method|verificationMethod|verification_method)\\s*(?:=|:)\\s*(?:[\"']checkbox[\"']|[\"']click[\"']|[\"']toggle[\"']|[\"']self-declared[\"'])",
7348
+ "flags": "gi"
7349
+ }
7350
+ ],
7351
+ "fix_suggestion": "Replace checkbox-based consent with a verifiable method: credit card transaction, government ID verification, video call verification, or signed consent form. The FTC's COPPA verifiable consent methods are the minimum standard. Store the verification method used alongside the consent record.",
7352
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7353
+ "languages": [
7354
+ "typescript",
7355
+ "javascript",
7356
+ "python",
7357
+ "go",
7358
+ "java",
7359
+ "kotlin",
7360
+ "swift"
7361
+ ],
7362
+ "packs": [
7363
+ "asaa"
7364
+ ],
7365
+ "fixability": "guided",
7366
+ "transform_type": null,
7367
+ "scaffold_id": null,
7368
+ "guidance_url": null
7369
+ },
7370
+ {
7371
+ "id": "asaa-vpc-005",
7372
+ "name": "Missing Consent Record Persistence",
7373
+ "severity": "critical",
7374
+ "confidence": "medium",
7375
+ "category": "parental-consent",
7376
+ "description": "ASAA requires apps to maintain proof of verifiable parental consent. Consent flows that do not persist the consent record (timestamp, method, parent identity) to durable storage fail audit requirements under TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7377
+ "patterns": [
7378
+ {
7379
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:parentalConsent|parental_consent|consentGranted|consent_granted)\\s*=\\s*true(?!.*(?:save|store|persist|log|record|insert|write|db|database|redis|dynamo))",
7380
+ "flags": "gi"
7381
+ },
7382
+ {
7383
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:setConsent|set_consent|grantConsent|grant_consent)\\s*\\([^)]*\\)(?!.*(?:save|store|persist|log|record|insert|write|db|database))",
7384
+ "flags": "gi"
7385
+ },
7386
+ {
7387
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:consentStatus|consent_status)\\s*=\\s*(?:true|'granted'|\"granted\")(?!.*(?:timestamp|createdAt|created_at|method|verifiedBy|verified_by))",
7388
+ "flags": "gi"
7389
+ }
7390
+ ],
7391
+ "fix_suggestion": "Persist all consent records to durable storage with: timestamp, consent method (e.g., credit card, ID verification), parent/guardian identifier, minor account identifier, and consent scope. Records must be retained for the lifetime of the account plus 3 years.",
7392
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7393
+ "languages": [
7394
+ "typescript",
7395
+ "javascript",
7396
+ "python",
7397
+ "go",
7398
+ "java",
7399
+ "kotlin",
7400
+ "swift"
7401
+ ],
7402
+ "packs": [
7403
+ "asaa"
7404
+ ],
7405
+ "fixability": "guided",
7406
+ "transform_type": null,
7407
+ "scaffold_id": null,
7408
+ "guidance_url": null
7409
+ },
7410
+ {
7411
+ "id": "asaa-dpl-001",
7412
+ "name": "Missing Parent Account Linking",
7413
+ "severity": "high",
7414
+ "confidence": "medium",
7415
+ "category": "device-parent-linking",
7416
+ "description": "ASAA requires minor accounts to be linked to a verified parent or guardian account. Account creation flows for minors that do not bind to a parent/guardian account violate the device-to-parent linking requirements of TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7417
+ "patterns": [
7418
+ {
7419
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:createMinorAccount|createChildAccount|create_minor_account|create_child_account|registerMinor|register_minor)\\s*\\((?!.*(?:parent|guardian|family|linked|binding))",
7420
+ "flags": "gi"
7421
+ },
7422
+ {
7423
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:accountType|account_type|userType|user_type)\\s*(?:=|:)\\s*(?:[\"']minor[\"']|[\"']child[\"']|[\"']teen[\"'])(?!.*(?:parent|guardian|family|linked))",
7424
+ "flags": "gi"
7425
+ },
7426
+ {
7427
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:isMinor|is_minor|isTeen|is_teen)\\s*(?:=|:)\\s*true(?!.*(?:parentId|parent_id|guardianId|guardian_id|familyId|family_id))",
7428
+ "flags": "gi"
7429
+ }
7430
+ ],
7431
+ "fix_suggestion": "Require a parent/guardian account link during minor account creation. Store parentId or guardianId as a required foreign key on minor accounts. Use platform family APIs (Apple Family Sharing, Google Family Link) where available.",
7432
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7433
+ "languages": [
7434
+ "typescript",
7435
+ "javascript",
7436
+ "python",
7437
+ "go",
7438
+ "java",
7439
+ "kotlin",
7440
+ "swift"
7441
+ ],
7442
+ "packs": [
7443
+ "asaa"
7444
+ ],
7445
+ "fixability": "guided",
7446
+ "transform_type": null,
7447
+ "scaffold_id": null,
7448
+ "guidance_url": null
7449
+ },
7450
+ {
7451
+ "id": "asaa-dpl-002",
7452
+ "name": "No Cross-Platform Family Linking",
7453
+ "severity": "high",
7454
+ "confidence": "low",
7455
+ "category": "device-parent-linking",
7456
+ "description": "ASAA device-to-parent linking must work across platforms. Family linking implementations that are hardcoded to a single platform (iOS-only or Android-only) leave users on other platforms without required parental oversight, violating the multi-platform intent of TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7457
+ "patterns": [
7458
+ {
7459
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:FamilySharing|familySharing|family_sharing)(?!.*(?:FamilyLink|familyLink|family_link|android|Android|crossPlatform|cross_platform))",
7460
+ "flags": "gi"
7461
+ },
7462
+ {
7463
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:FamilyLink|familyLink|family_link)(?!.*(?:FamilySharing|familySharing|family_sharing|ios|iOS|apple|Apple|crossPlatform|cross_platform))",
7464
+ "flags": "gi"
7465
+ },
7466
+ {
7467
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:parentLink|parent_link|familyBinding|family_binding)\\s*(?:=|:).*(?:platform\\s*(?:===?|==)\\s*[\"'](?:ios|android)[\"'])(?!.*(?:else|fallback|other))",
7468
+ "flags": "gi"
7469
+ }
7470
+ ],
7471
+ "fix_suggestion": "Implement cross-platform family linking that works on both iOS (Family Sharing) and Android (Family Link). Provide a platform-agnostic fallback (email/SMS verification) for web and other platforms. Store family relationships in your backend, not just platform-native APIs.",
7472
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7473
+ "languages": [
7474
+ "typescript",
7475
+ "javascript",
7476
+ "python",
7477
+ "go",
7478
+ "java",
7479
+ "kotlin",
7480
+ "swift"
7481
+ ],
7482
+ "packs": [
7483
+ "asaa"
7484
+ ],
7485
+ "fixability": "flag-only",
7486
+ "transform_type": null,
7487
+ "scaffold_id": null,
7488
+ "guidance_url": null
7489
+ },
7490
+ {
7491
+ "id": "asaa-dpl-003",
7492
+ "name": "Missing Parental Dashboard API",
7493
+ "severity": "high",
7494
+ "confidence": "medium",
7495
+ "category": "device-parent-linking",
7496
+ "description": "ASAA requires that parents have oversight of their minor's account activity. Apps managing minor accounts without API endpoints for parental monitoring (activity feed, usage stats, content review) fail the supervisory tool requirements of TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7497
+ "patterns": [
7498
+ {
7499
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:minorAccount|minor_account|childAccount|child_account|teenAccount|teen_account)(?!.*(?:parentDashboard|parent_dashboard|parentalView|parental_view|guardianPortal|guardian_portal|oversight|monitor))",
7500
+ "flags": "gi"
7501
+ },
7502
+ {
7503
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:router|app)\\.(?:get|post|route)\\s*\\(\\s*[\"']/(?:api/)?(?:minor|child|teen|family)(?!.*(?:parent|guardian|dashboard|oversight|monitor|activity))",
7504
+ "flags": "gi"
7505
+ },
7506
+ {
7507
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:getChildActivity|get_child_activity|minorUsage|minor_usage)(?!.*(?:parent|guardian|dashboard|endpoint|api|route))",
7508
+ "flags": "gi"
7509
+ }
7510
+ ],
7511
+ "fix_suggestion": "Create parental dashboard API endpoints that expose: minor's activity summary, usage statistics, content interaction history, and account settings. Authenticate parent access via the established parent-child account link. Include real-time and historical views.",
7512
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7513
+ "languages": [
7514
+ "typescript",
7515
+ "javascript",
7516
+ "python",
7517
+ "go",
7518
+ "java",
7519
+ "kotlin",
7520
+ "swift"
7521
+ ],
7522
+ "packs": [
7523
+ "asaa"
7524
+ ],
7525
+ "fixability": "flag-only",
7526
+ "transform_type": null,
7527
+ "scaffold_id": null,
7528
+ "guidance_url": null
7529
+ },
7530
+ {
7531
+ "id": "asaa-dpl-004",
7532
+ "name": "No Remote Pause/Audit Capability",
7533
+ "severity": "high",
7534
+ "confidence": "medium",
7535
+ "category": "device-parent-linking",
7536
+ "description": "ASAA requires parents to have remote pause and review capabilities for their minor's accounts. Minor account management without parental pause, lock, or activity review functionality violates the supervisory requirements of TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7537
+ "patterns": [
7538
+ {
7539
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:minorAccount|minor_account|childAccount|child_account|teenProfile|teen_profile)\\s*(?:=|:)\\s*\\{(?!.*(?:pause|suspend|lock|remotePause|remote_pause|parentControl|parent_control))",
7540
+ "flags": "gi"
7541
+ },
7542
+ {
7543
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:AccountSettings|accountSettings|account_settings).*(?:minor|child|teen)(?!.*(?:pause|suspend|lock|freeze|review|audit))",
7544
+ "flags": "gi"
7545
+ }
7546
+ ],
7547
+ "fix_suggestion": "Implement remote parental controls: account pause/unpause, session termination, activity log review, and content audit. These controls must be accessible from the parent's device without requiring access to the minor's device. Provide push notifications to parents for flagged activity.",
7548
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7549
+ "languages": [
7550
+ "typescript",
7551
+ "javascript",
7552
+ "python",
7553
+ "go",
7554
+ "java",
7555
+ "kotlin",
7556
+ "swift"
7557
+ ],
7558
+ "packs": [
7559
+ "asaa"
7560
+ ],
7561
+ "fixability": "flag-only",
7562
+ "transform_type": null,
7563
+ "scaffold_id": null,
7564
+ "guidance_url": null
7565
+ },
7566
+ {
7567
+ "id": "asaa-dpl-005",
7568
+ "name": "Missing Guardian Verification in Linking",
7569
+ "severity": "high",
7570
+ "confidence": "medium",
7571
+ "category": "device-parent-linking",
7572
+ "description": "ASAA requires that parent-child account linking includes verification of the guardian's identity. Linking flows that connect accounts without verifying the parent's identity allow unauthorized adults to link to minor accounts, violating TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7573
+ "patterns": [
7574
+ {
7575
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:linkParent|link_parent|addGuardian|add_guardian|setParent|set_parent|bindParent|bind_parent)\\s*\\((?!.*(?:verify|identity|idCheck|id_check|authenticate|credential))",
7576
+ "flags": "gi"
7577
+ },
7578
+ {
7579
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:parentLink|parent_link|guardianLink|guardian_link)\\s*(?:=|:)\\s*(?:req\\.|request\\.|params\\.|body\\.)(?!.*(?:verify|identity|idCheck|id_check|authenticate))",
7580
+ "flags": "gi"
7581
+ },
7582
+ {
7583
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:familyInvite|family_invite|parentInvite|parent_invite)\\s*\\((?!.*(?:verify|identity|idCheck|id_check|authenticate|credential))",
7584
+ "flags": "gi"
7585
+ }
7586
+ ],
7587
+ "fix_suggestion": "Verify guardian identity before completing parent-child account linking. Use multi-factor verification: email confirmation to a verified adult account, plus identity verification (government ID, credit card charge, or knowledge-based authentication). Log the verification method used.",
7588
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7589
+ "languages": [
7590
+ "typescript",
7591
+ "javascript",
7592
+ "python",
7593
+ "go",
7594
+ "java",
7595
+ "kotlin",
7596
+ "swift"
7597
+ ],
7598
+ "packs": [
7599
+ "asaa"
7600
+ ],
7601
+ "fixability": "guided",
7602
+ "transform_type": null,
7603
+ "scaffold_id": null,
7604
+ "guidance_url": null
7605
+ },
7606
+ {
7607
+ "id": "asaa-ar-001",
7608
+ "name": "Missing Consent Timestamp Logging",
7609
+ "severity": "high",
7610
+ "confidence": "high",
7611
+ "category": "audit-retention",
7612
+ "description": "ASAA requires audit trails for all consent actions. Consent flows that do not log a timestamp and method of consent cannot demonstrate compliance during state attorney general inquiries. Required by TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7613
+ "patterns": [
7614
+ {
7615
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:grantConsent|grant_consent|recordConsent|record_consent|saveConsent|save_consent)\\s*\\((?!.*(?:timestamp|createdAt|created_at|Date\\.now|datetime|time\\.time|Instant\\.now))",
7616
+ "flags": "gi"
7617
+ },
7618
+ {
7619
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:consent)\\s*(?:=|:)\\s*\\{(?!.*(?:timestamp|createdAt|created_at|date|time|recordedAt|recorded_at))",
7620
+ "flags": "gi"
7621
+ },
7622
+ {
7623
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})INSERT\\s+INTO\\s+(?:consent|consents|consent_log|consent_records)\\s*\\((?![^)]*(?:timestamp|created_at|recorded_at|consent_date))",
7624
+ "flags": "gi"
7625
+ }
7626
+ ],
7627
+ "fix_suggestion": "Add timestamp and method logging to all consent recording flows. Each consent record must include: ISO 8601 timestamp, consent method (e.g., 'credit-card-verification', 'id-check'), parent identifier, minor identifier, and consent scope. Use server-side timestamps, not client-provided values.",
7628
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7629
+ "languages": [
7630
+ "typescript",
7631
+ "javascript",
7632
+ "python",
7633
+ "go",
7634
+ "java",
7635
+ "kotlin",
7636
+ "swift"
7637
+ ],
7638
+ "packs": [
7639
+ "asaa"
7640
+ ],
7641
+ "fixability": "guided",
7642
+ "transform_type": null,
7643
+ "scaffold_id": null,
7644
+ "guidance_url": null
7645
+ },
7646
+ {
7647
+ "id": "asaa-ar-002",
7648
+ "name": "Inadequate Retention Period",
7649
+ "severity": "high",
7650
+ "confidence": "medium",
7651
+ "category": "audit-retention",
7652
+ "description": "ASAA audit trail requirements mandate that consent and verification records are retained for the lifetime of the account plus 3 years. Data retention policies with shorter periods (e.g., 90 days, 1 year) fail to meet the retention requirements of TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7653
+ "patterns": [
7654
+ {
7655
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:retentionPeriod|retention_period|dataRetention|data_retention|ttl|TTL|expiresIn|expires_in)\\s*(?:=|:)\\s*(?:\\d+\\s*\\*\\s*)?(?:86400|2592000|7776000|31536000|365|90|180|30)(?!.*(?:consent|verification|audit|compliance).*(?:lifetime|forever|permanent|indefinite))",
7656
+ "flags": "gi"
7657
+ },
7658
+ {
7659
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:DELETE|PURGE|EXPUNGE|cleanup|clean_up)\\s+.*(?:consent|verification|audit|compliance).*(?:older_than|olderThan|before|prior)",
7660
+ "flags": "gi"
7661
+ },
7662
+ {
7663
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:consentExpiry|consent_expiry|verificationExpiry|verification_expiry)\\s*(?:=|:)\\s*(?!.*(?:lifetime|accountLifetime|account_lifetime|permanent|indefinite|never))",
7664
+ "flags": "gi"
7665
+ }
7666
+ ],
7667
+ "fix_suggestion": "Set retention period for consent and age verification records to account lifetime + 3 years minimum. Do not apply automatic TTL or cleanup policies to compliance records. Implement a separate retention policy for ASAA audit data that overrides general data retention schedules.",
7668
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7669
+ "languages": [
7670
+ "typescript",
7671
+ "javascript",
7672
+ "python",
7673
+ "go",
7674
+ "java",
7675
+ "kotlin",
7676
+ "swift"
7677
+ ],
7678
+ "packs": [
7679
+ "asaa"
7680
+ ],
7681
+ "fixability": "guided",
7682
+ "transform_type": null,
7683
+ "scaffold_id": null,
7684
+ "guidance_url": null
7685
+ },
7686
+ {
7687
+ "id": "asaa-ar-003",
7688
+ "name": "No Audit Trail Endpoint",
7689
+ "severity": "medium",
7690
+ "confidence": "low",
7691
+ "category": "audit-retention",
7692
+ "description": "ASAA requires apps to provide compliance data to state attorneys general upon request. Apps storing consent and verification data without an API endpoint to export this data for regulatory inquiries cannot efficiently respond to AG requests, risking non-compliance with TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7693
+ "patterns": [
7694
+ {
7695
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:consentLog|consent_log|verificationLog|verification_log|auditLog|audit_log)(?!.*(?:endpoint|api|route|controller|handler|export|query))",
7696
+ "flags": "gi"
7697
+ },
7698
+ {
7699
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:router|app)\\.(?:get|post|route)\\s*\\(\\s*[\"']/(?:api/)?(?:compliance|audit)(?!.*(?:consent|verification|export|report|attorney|ag-request))",
7700
+ "flags": "gi"
7701
+ }
7702
+ ],
7703
+ "fix_suggestion": "Create an authenticated API endpoint (e.g., /api/compliance/audit-trail) that exports consent records, age verification logs, and parental linking history in a structured format (JSON/CSV). Restrict access to authorized compliance officers. Include filtering by date range, user ID, and record type.",
7704
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7705
+ "languages": [
7706
+ "typescript",
7707
+ "javascript",
7708
+ "python",
7709
+ "go",
7710
+ "java",
7711
+ "kotlin",
7712
+ "swift"
7713
+ ],
7714
+ "packs": [
7715
+ "asaa"
7716
+ ],
7717
+ "fixability": "flag-only",
7718
+ "transform_type": null,
7719
+ "scaffold_id": null,
7720
+ "guidance_url": null
7721
+ },
7722
+ {
7723
+ "id": "asaa-ar-004",
7724
+ "name": "Missing Age Verification Method Logging",
7725
+ "severity": "high",
7726
+ "confidence": "medium",
7727
+ "category": "audit-retention",
7728
+ "description": "ASAA audit requirements mandate recording which age verification method was used for each user. Age verification flows that do not log the specific method (platform API, ID verification, third-party provider) cannot demonstrate compliance methodology to state attorneys general.",
7729
+ "patterns": [
7730
+ {
7731
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:verifyAge|verify_age|checkAge|check_age|ageVerification|age_verification)\\s*\\([^)]*\\)(?!.*(?:method|provider|source|verifiedBy|verified_by|verificationType|verification_type))",
7732
+ "flags": "gi"
7733
+ },
7734
+ {
7735
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:ageVerified|age_verified|isVerified|is_verified)\\s*(?:=|:)\\s*true(?!.*(?:method|provider|source|verifiedBy|verified_by|verificationType|verification_type))",
7736
+ "flags": "gi"
7737
+ },
7738
+ {
7739
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})INSERT\\s+INTO\\s+(?:age_verification|verification_log|age_check)\\s*\\((?![^)]*(?:method|provider|source|verification_type))",
7740
+ "flags": "gi"
7741
+ }
7742
+ ],
7743
+ "fix_suggestion": "Log the age verification method alongside the verification result. Record: method type (platform-api, id-verification, third-party-provider), provider name (Apple, Google, Ondato, Veriff), confidence score, and timestamp. Store in the same audit trail as consent records.",
7744
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7745
+ "languages": [
7746
+ "typescript",
7747
+ "javascript",
7748
+ "python",
7749
+ "go",
7750
+ "java",
7751
+ "kotlin",
7752
+ "swift"
7753
+ ],
7754
+ "packs": [
7755
+ "asaa"
7756
+ ],
7757
+ "fixability": "guided",
7758
+ "transform_type": null,
7759
+ "scaffold_id": null,
7760
+ "guidance_url": null
7761
+ },
7762
+ {
7763
+ "id": "asaa-ar-005",
7764
+ "name": "Mutable Consent Records",
7765
+ "severity": "high",
7766
+ "confidence": "medium",
7767
+ "category": "audit-retention",
7768
+ "description": "ASAA audit trail integrity requires consent records to be append-only and immutable. Consent logs that allow UPDATE or DELETE operations compromise the evidentiary value of the audit trail and violate the record integrity requirements implied by TX HB 18, AL HB 161, LA Act 440, and UT SB 142.",
7769
+ "patterns": [
7770
+ {
7771
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:UPDATE|DELETE)\\s+(?:FROM\\s+)?(?:consent|consents|consent_log|consent_records|verification_log|audit_trail)",
7772
+ "flags": "gi"
7773
+ },
7774
+ {
7775
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:consentLog|consent_log|auditTrail|audit_trail|verificationLog|verification_log)\\.(?:update|delete|remove|destroy|edit|modify)",
7776
+ "flags": "gi"
7777
+ },
7778
+ {
7779
+ "pattern": "(?<!(?:mock|Mock|fake|stub|fixture|test|Test|expect|assert|//|\\*)\\s{0,20})(?:ConsentRecord|ConsentLog|AuditEntry|VerificationRecord)\\.(?:update|delete|destroy|findOneAndUpdate|findAndModify|updateOne|deleteOne|remove)",
7780
+ "flags": "gi"
7781
+ }
7782
+ ],
7783
+ "fix_suggestion": "Make consent and verification records append-only. Remove UPDATE and DELETE operations from consent log models. Use soft-delete with a revocation record instead of hard deletes. Consider an immutable ledger pattern (event sourcing) for maximum audit integrity. Add database-level constraints to prevent mutation.",
7784
+ "penalty": "Up to $2,500 per violation per state; Alabama HB 161 includes retroactive compliance requirement by Oct 1, 2027",
7785
+ "languages": [
7786
+ "typescript",
7787
+ "javascript",
7788
+ "python",
7789
+ "go",
7790
+ "java",
7791
+ "kotlin",
7792
+ "swift"
7793
+ ],
7794
+ "packs": [
7795
+ "asaa"
7796
+ ],
7797
+ "fixability": "guided",
7798
+ "transform_type": null,
7799
+ "scaffold_id": null,
7800
+ "guidance_url": null
6999
7801
  }
7000
7802
  ]
7001
7803
  }