@aegis-scan/skills 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. package/ATTRIBUTION.md +204 -0
  2. package/CHANGELOG.md +48 -3
  3. package/package.json +1 -1
  4. package/sbom.cdx.json +1 -1
  5. package/skills/compliance/aegis-native/brutaler-anwalt/.claude-plugin/plugin.json +108 -0
  6. package/skills/compliance/aegis-native/brutaler-anwalt/CHANGELOG.md +1080 -0
  7. package/skills/compliance/aegis-native/brutaler-anwalt/HANDOVER-LO-LIVE-VERIFICATION-2026-05-15.md +187 -0
  8. package/skills/compliance/aegis-native/brutaler-anwalt/LICENSE +43 -0
  9. package/skills/compliance/aegis-native/brutaler-anwalt/README.md +242 -0
  10. package/skills/compliance/aegis-native/brutaler-anwalt/SKILL.md +427 -14
  11. package/skills/compliance/aegis-native/brutaler-anwalt/commands/audit.md +193 -0
  12. package/skills/compliance/aegis-native/brutaler-anwalt/commands/avv-redline.md +246 -0
  13. package/skills/compliance/aegis-native/brutaler-anwalt/commands/az-verify.md +155 -0
  14. package/skills/compliance/aegis-native/brutaler-anwalt/commands/cold-start.md +157 -0
  15. package/skills/compliance/aegis-native/brutaler-anwalt/commands/dsar-respond.md +180 -0
  16. package/skills/compliance/aegis-native/brutaler-anwalt/commands/health.md +50 -0
  17. package/skills/compliance/aegis-native/brutaler-anwalt/commands/simulate.md +158 -0
  18. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/post_write.py +315 -0
  19. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/prompt_submit.py +144 -0
  20. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/session_start.py +57 -0
  21. package/skills/compliance/aegis-native/brutaler-anwalt/hooks/triggers.json +191 -0
  22. package/skills/compliance/aegis-native/brutaler-anwalt/references/INDEX.md +102 -0
  23. package/skills/compliance/aegis-native/brutaler-anwalt/references/abmahn-templates.md +1 -1
  24. package/skills/compliance/aegis-native/brutaler-anwalt/references/aegis-integration.md +63 -9
  25. package/skills/compliance/aegis-native/brutaler-anwalt/references/audit-patterns.md +1581 -10
  26. package/skills/compliance/aegis-native/brutaler-anwalt/references/az-auffuellung-batch1.md +468 -0
  27. package/skills/compliance/aegis-native/brutaler-anwalt/references/bgh-urteile.md +323 -31
  28. package/skills/compliance/aegis-native/brutaler-anwalt/references/branchenrecht.md +610 -1
  29. package/skills/compliance/aegis-native/brutaler-anwalt/references/checklisten.md +107 -1
  30. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-aufsichtsbehoerden-taetigkeitsberichte-2024.md +310 -0
  31. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-bussgeld-argumentations-layer.md +598 -0
  32. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-dsk-beschluesse.md +346 -0
  33. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AGG/audit-relevance.md +76 -0
  34. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AGG/paragraphs.md +115 -0
  35. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AMG/audit-relevance.md +58 -0
  36. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/AMG/paragraphs.md +95 -0
  37. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ArbZG/audit-relevance.md +60 -0
  38. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ArbZG/paragraphs.md +90 -0
  39. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/BetrVG/audit-relevance.md +73 -0
  40. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/BetrVG/paragraphs.md +114 -0
  41. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DDG/audit-relevance.md +72 -0
  42. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DDG/paragraphs.md +103 -0
  43. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DiGAV/audit-relevance.md +65 -0
  44. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/DiGAV/paragraphs.md +102 -0
  45. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ElektroG/audit-relevance.md +66 -0
  46. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ElektroG/paragraphs.md +108 -0
  47. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/FernUSG/audit-relevance.md +80 -0
  48. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/FernUSG/paragraphs.md +102 -0
  49. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GeschGehG/audit-relevance.md +89 -0
  50. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GeschGehG/paragraphs.md +107 -0
  51. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GwG/audit-relevance.md +62 -0
  52. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/GwG/paragraphs.md +119 -0
  53. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HWG/audit-relevance.md +70 -0
  54. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HWG/paragraphs.md +125 -0
  55. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HinSchG/audit-relevance.md +70 -0
  56. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/HinSchG/paragraphs.md +116 -0
  57. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/INDEX.md +152 -0
  58. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/KWG/audit-relevance.md +64 -0
  59. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/KWG/paragraphs.md +110 -0
  60. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/LFGB/audit-relevance.md +63 -0
  61. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/LFGB/paragraphs.md +90 -0
  62. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/MPDG/audit-relevance.md +61 -0
  63. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/MPDG/paragraphs.md +96 -0
  64. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/NachwG/audit-relevance.md +54 -0
  65. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/NachwG/paragraphs.md +82 -0
  66. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/PAngV/audit-relevance.md +76 -0
  67. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/PAngV/paragraphs.md +86 -0
  68. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/RDG/audit-relevance.md +84 -0
  69. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/RDG/paragraphs.md +114 -0
  70. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/TDDDG/audit-relevance.md +92 -0
  71. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/TDDDG/paragraphs.md +91 -0
  72. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/UrhG-UrhDaG/audit-relevance.md +85 -0
  73. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/UrhG-UrhDaG/paragraphs.md +166 -0
  74. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VDuG/audit-relevance.md +71 -0
  75. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VDuG/paragraphs.md +102 -0
  76. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VERIFICATION-NOTES.md +111 -0
  77. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VVG/audit-relevance.md +65 -0
  78. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VVG/paragraphs.md +101 -0
  79. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VerpackG/audit-relevance.md +62 -0
  80. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/VerpackG/paragraphs.md +120 -0
  81. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/WpHG/audit-relevance.md +64 -0
  82. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/WpHG/paragraphs.md +120 -0
  83. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ZAG/audit-relevance.md +68 -0
  84. package/skills/compliance/aegis-native/brutaler-anwalt/references/de-statute-tier1/ZAG/paragraphs.md +110 -0
  85. package/skills/compliance/aegis-native/brutaler-anwalt/references/dsgvo.md +81 -8
  86. package/skills/compliance/aegis-native/brutaler-anwalt/references/eu-edpb-guidelines.md +505 -0
  87. package/skills/compliance/aegis-native/brutaler-anwalt/references/eu-eugh-dsgvo-schadensersatz.md +223 -0
  88. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BDSG/audit-relevance.md +31 -0
  89. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BDSG/paragraphs.md +62 -0
  90. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BFSG/audit-relevance.md +39 -0
  91. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BFSG/paragraphs.md +85 -0
  92. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BGB/audit-relevance.md +42 -0
  93. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/BGB/paragraphs.md +112 -0
  94. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DDG/audit-relevance.md +28 -0
  95. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DDG/paragraphs.md +71 -0
  96. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DSGVO/articles.md +182 -0
  97. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/DSGVO/audit-relevance.md +35 -0
  98. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/articles.md +111 -0
  99. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/audit-relevance.md +139 -0
  100. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/gpai-pflichten.md +102 -0
  101. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/hochrisiko-annex-iii.md +134 -0
  102. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/sanktionen-art-99.md +97 -0
  103. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/transparenz-art-50.md +120 -0
  104. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/AI-Act-2024-1689/uebergangsfristen.md +109 -0
  105. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CER-2022-2557/articles.md +42 -0
  106. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CRA-2024-2847/articles.md +87 -0
  107. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CSDDD-2024-1760/articles.md +43 -0
  108. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/CSRD-2022-2464/articles.md +42 -0
  109. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DGA-2022-868/articles.md +53 -0
  110. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DMA-2022-1925/articles.md +55 -0
  111. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DORA-2022-2554/articles.md +164 -0
  112. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DORA-2022-2554/audit-relevance.md +86 -0
  113. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/articles.md +134 -0
  114. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/audit-relevance.md +110 -0
  115. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/notice-and-action.md +138 -0
  116. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/small-platform-pflichten.md +109 -0
  117. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/trusted-flaggers.md +77 -0
  118. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/DSA-2022-2065/vlop-vlose.md +130 -0
  119. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/Data-Act-2023-2854/articles.md +102 -0
  120. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/Data-Act-2023-2854/audit-relevance.md +77 -0
  121. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/MiCA-2023-1114/articles.md +124 -0
  122. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/MiCA-2023-1114/audit-relevance.md +85 -0
  123. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/NIS2-2022-2555/articles.md +101 -0
  124. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/ProdHaftRL-2024-2853/articles.md +68 -0
  125. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/EU-Verordnungen/eIDAS-2024-1183/articles.md +43 -0
  126. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/KWG.md +52 -0
  127. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/PSD2.md +67 -0
  128. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/Finance/ZAG.md +50 -0
  129. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/GlueStV/articles.md +86 -0
  130. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HGB-AO/audit-relevance.md +27 -0
  131. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HGB-AO/paragraphs.md +61 -0
  132. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/HinSchG/articles.md +96 -0
  133. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/INDEX.md +93 -0
  134. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/JuSchG-JMStV/articles.md +86 -0
  135. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/KritisDachG/articles.md +39 -0
  136. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/LkSG/articles.md +90 -0
  137. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/DiGAV.md +60 -0
  138. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/IVDR-2017-746.md +51 -0
  139. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/MedTech/MDR-2017-745.md +85 -0
  140. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/NIS2UmsuCG-BSIG/articles.md +53 -0
  141. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/StGB/relevante-paragraphen.md +157 -0
  142. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TDDDG/audit-relevance.md +33 -0
  143. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TDDDG/paragraphs.md +68 -0
  144. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/TKG/articles.md +73 -0
  145. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/UWG/audit-relevance.md +39 -0
  146. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/UWG/paragraphs.md +185 -0
  147. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VERIFICATION-STATUS.md +266 -0
  148. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VSBG/audit-relevance.md +37 -0
  149. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/VSBG/paragraphs.md +57 -0
  150. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/ePrivacy-RL-2002-58/articles.md +92 -0
  151. package/skills/compliance/aegis-native/brutaler-anwalt/references/gesetze/ePrivacy-RL-2002-58/audit-relevance.md +62 -0
  152. package/skills/compliance/aegis-native/brutaler-anwalt/references/it-recht.md +137 -9
  153. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/INDEX.md +122 -0
  154. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/ai/anthropic-dpa.md +87 -0
  155. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/ai/mistral-eu.md +123 -0
  156. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/ai/openai-dpa.md +120 -0
  157. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/cookie-banner-pattern.md +202 -0
  158. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/dse-section-pattern.md +198 -0
  159. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/astro/tracking-server-endpoint.md +193 -0
  160. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/auth0-tom.md +92 -0
  161. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/clerk-tom.md +84 -0
  162. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/nextauth-tom.md +120 -0
  163. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/auth/supabase-auth-tom.md +104 -0
  164. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/auth-cookies-pattern.md +295 -0
  165. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/cookie-banner-pattern.md +318 -0
  166. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/django/gdpr-cleanup-celery.md +339 -0
  167. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/cookie-banner-pattern.md +237 -0
  168. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/gdpr-routes-pattern.md +256 -0
  169. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/express/helmet-csp-pattern.md +207 -0
  170. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/agb-versioning-pattern.md +305 -0
  171. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/cookie-banner-pattern.md +287 -0
  172. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/gdpr-models-pattern.md +290 -0
  173. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/laravel/tracking-config-pattern.md +263 -0
  174. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/auth-pattern.md +265 -0
  175. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/cookie-banner-pattern.md +255 -0
  176. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/gdpr-cleanup-cron.md +244 -0
  177. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nest/tracking-interceptor.md +239 -0
  178. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/api-route-bearer-auth.md +103 -0
  179. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/dynamic-rendering-headers.md +83 -0
  180. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/env-driven-tracking.md +135 -0
  181. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/nextjs/proxy-csp-pattern.md +93 -0
  182. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/payment/stripe-pci-tom.md +121 -0
  183. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/cookie-banner-pattern.md +294 -0
  184. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/devise-dsgvo-pattern.md +262 -0
  185. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/rails/gdpr-anonymization-pattern.md +283 -0
  186. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/react/consent-gate-pattern.md +99 -0
  187. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/react/cookie-banner-pattern.md +204 -0
  188. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/strapi/cms-pii-pattern.md +301 -0
  189. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/strapi/notice-and-action-plugin.md +371 -0
  190. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/cookie-banner-pattern.md +234 -0
  191. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/dse-section-pattern.md +231 -0
  192. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/svelte/sveltekit-server-hooks-pattern.md +217 -0
  193. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/google-analytics-consent.md +129 -0
  194. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/plausible-pattern.md +107 -0
  195. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/tracking/posthog-consent.md +79 -0
  196. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/cookie-banner-pattern.md +208 -0
  197. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/dse-i18n-pattern.md +204 -0
  198. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/nuxt-vs-vue-only-pattern.md +197 -0
  199. package/skills/compliance/aegis-native/brutaler-anwalt/references/stack-patterns/vue/tracking-pinia-pattern.md +211 -0
  200. package/skills/compliance/aegis-native/brutaler-anwalt/references/strafrecht-steuer.md +1 -1
  201. package/skills/compliance/aegis-native/brutaler-anwalt/references/streitwerte.json +176 -0
  202. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/AffiliateDisclaimer.tsx.example +54 -0
  203. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/COMPLIANCE-AUDIT-TRAIL-template.md +95 -0
  204. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/DSE-Section-UGC.md.example +77 -0
  205. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/DSFA-template.md +156 -0
  206. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/LostFoundReportForm-consent.tsx.example +126 -0
  207. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/README.md +33 -0
  208. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/UmamiScript.tsx.example +64 -0
  209. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/VVT-template-file-upload.md +98 -0
  210. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/VVT-template.md +60 -0
  211. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/data-retention-cron.ts.example +52 -0
  212. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/data-retention-workflow.yml.example +47 -0
  213. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/proxy-strict-dynamic.ts.example +80 -0
  214. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates/security.txt.example +26 -0
  215. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-EN-international.md +267 -0
  216. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-Audit-Klausel-Varianten.md +148 -0
  217. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-CH-revDSG.md +127 -0
  218. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-SCC-module2-controller-processor.md +180 -0
  219. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-SCC-module3-processor-subprocessor.md +144 -0
  220. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-Sub-Processor-List.md +114 -0
  221. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-TOMs.md +197 -0
  222. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-anhang-UK-IDTA.md +131 -0
  223. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/AVV-standard-DE.md +288 -0
  224. package/skills/compliance/aegis-native/brutaler-anwalt/references/templates-avv-layer/Joint-Controller-Vertrag-Art-26.md +265 -0
  225. package/skills/compliance/aegis-native/brutaler-anwalt/scripts/health-check.sh +262 -0
  226. package/skills/compliance/aegis-native/brutaler-anwalt/scripts/test-triggers.sh +145 -0
  227. package/skills/compliance/aegis-native/brutaler-anwalt/settings.json +90 -0
  228. package/skills/defensive/aegis-native/rls-defense/SKILL.md +85 -0
  229. package/skills/defensive/permoon-fork/README.md +40 -0
  230. package/skills/defensive/permoon-fork/multi-model-consolidation/SKILL.md +47 -0
  231. package/skills/defensive/permoon-fork/multi-model-severity/SKILL.md +34 -0
  232. package/skills/defensive/permoon-fork/multi-model-system-prompt/SKILL.md +40 -0
  233. package/skills/foundation/aegis-native/aegis-handover-writer/SKILL.md +1 -1
  234. package/skills/foundation/aegis-native/aegis-module-builder/SKILL.md +5 -1
  235. package/skills/foundation/aegis-native/aegis-orchestrator/SKILL.md +87 -4
  236. package/skills/foundation/aegis-native/aegis-quality-gates/SKILL.md +69 -9
  237. package/skills/offensive/airecon-fork/ctf-crypto/SKILL.md +260 -0
  238. package/skills/offensive/airecon-fork/ctf-crypto-modern-ciphers/SKILL.md +688 -0
  239. package/skills/offensive/airecon-fork/ctf-forensics/SKILL.md +253 -0
  240. package/skills/offensive/airecon-fork/ctf-forensics-network/SKILL.md +480 -0
  241. package/skills/offensive/airecon-fork/ctf-heap-advanced/SKILL.md +336 -0
  242. package/skills/offensive/airecon-fork/ctf-pwn/SKILL.md +294 -0
  243. package/skills/offensive/airecon-fork/ctf-pwn-rop-and-shellcode/SKILL.md +392 -0
  244. package/skills/offensive/airecon-fork/ctf-reversing/SKILL.md +284 -0
  245. package/skills/offensive/airecon-fork/frameworks-django/SKILL.md +268 -0
  246. package/skills/offensive/airecon-fork/frameworks-dotnet/SKILL.md +280 -0
  247. package/skills/offensive/airecon-fork/frameworks-express/SKILL.md +266 -0
  248. package/skills/offensive/airecon-fork/frameworks-fastapi/SKILL.md +193 -0
  249. package/skills/offensive/airecon-fork/frameworks-flask/SKILL.md +297 -0
  250. package/skills/offensive/airecon-fork/frameworks-laravel/SKILL.md +260 -0
  251. package/skills/offensive/airecon-fork/frameworks-nextjs/SKILL.md +230 -0
  252. package/skills/offensive/airecon-fork/frameworks-php/SKILL.md +271 -0
  253. package/skills/offensive/airecon-fork/frameworks-rails/SKILL.md +269 -0
  254. package/skills/offensive/airecon-fork/frameworks-spring/SKILL.md +245 -0
  255. package/skills/offensive/airecon-fork/frameworks-wordpress/SKILL.md +348 -0
  256. package/skills/offensive/airecon-fork/payloads-command-injection/SKILL.md +459 -0
  257. package/skills/offensive/airecon-fork/payloads-http-parameter-pollution/SKILL.md +129 -0
  258. package/skills/offensive/airecon-fork/payloads-ldap-injection/SKILL.md +100 -0
  259. package/skills/offensive/airecon-fork/payloads-lfi/SKILL.md +485 -0
  260. package/skills/offensive/airecon-fork/payloads-sqli/SKILL.md +419 -0
  261. package/skills/offensive/airecon-fork/payloads-ssrf/SKILL.md +125 -0
  262. package/skills/offensive/airecon-fork/payloads-ssti/SKILL.md +443 -0
  263. package/skills/offensive/airecon-fork/payloads-xss/SKILL.md +447 -0
  264. package/skills/offensive/airecon-fork/payloads-xxe/SKILL.md +172 -0
  265. package/skills/offensive/airecon-fork/postexploit-ad-credential-attacks/SKILL.md +306 -0
  266. package/skills/offensive/airecon-fork/postexploit-container-escape/SKILL.md +299 -0
  267. package/skills/offensive/airecon-fork/postexploit-credential-dumping/SKILL.md +249 -0
  268. package/skills/offensive/airecon-fork/postexploit-lateral-movement/SKILL.md +194 -0
  269. package/skills/offensive/airecon-fork/postexploit-linux-privesc/SKILL.md +252 -0
  270. package/skills/offensive/airecon-fork/postexploit-netexec-workflow/SKILL.md +302 -0
  271. package/skills/offensive/airecon-fork/postexploit-pivoting/SKILL.md +205 -0
  272. package/skills/offensive/airecon-fork/postexploit-windows-privesc/SKILL.md +210 -0
  273. package/skills/offensive/airecon-fork/protocols-active-directory/SKILL.md +314 -0
  274. package/skills/offensive/airecon-fork/protocols-dns/SKILL.md +203 -0
  275. package/skills/offensive/airecon-fork/protocols-ftp/SKILL.md +159 -0
  276. package/skills/offensive/airecon-fork/protocols-graphql/SKILL.md +648 -0
  277. package/skills/offensive/airecon-fork/protocols-kerberos/SKILL.md +168 -0
  278. package/skills/offensive/airecon-fork/protocols-ldap/SKILL.md +245 -0
  279. package/skills/offensive/airecon-fork/protocols-rdp/SKILL.md +186 -0
  280. package/skills/offensive/airecon-fork/protocols-smb/SKILL.md +191 -0
  281. package/skills/offensive/airecon-fork/protocols-smtp-imap/SKILL.md +263 -0
  282. package/skills/offensive/airecon-fork/protocols-snmp/SKILL.md +147 -0
  283. package/skills/offensive/airecon-fork/protocols-ssh/SKILL.md +287 -0
  284. package/skills/offensive/airecon-fork/reconnaissance-asn-whois-osint/SKILL.md +236 -0
  285. package/skills/offensive/airecon-fork/reconnaissance-ctf-methodology/SKILL.md +435 -0
  286. package/skills/offensive/airecon-fork/reconnaissance-dorking/SKILL.md +182 -0
  287. package/skills/offensive/airecon-fork/reconnaissance-exposed-devtools-detection/SKILL.md +513 -0
  288. package/skills/offensive/airecon-fork/reconnaissance-full-recon/SKILL.md +305 -0
  289. package/skills/offensive/airecon-fork/reconnaissance-internal-pentest/SKILL.md +202 -0
  290. package/skills/offensive/airecon-fork/reconnaissance-javascript-analysis/SKILL.md +167 -0
  291. package/skills/offensive/airecon-fork/reconnaissance-js-internal-hostname-intelligence/SKILL.md +391 -0
  292. package/skills/offensive/airecon-fork/reconnaissance-monitoring-secrets-exposure/SKILL.md +394 -0
  293. package/skills/offensive/airecon-fork/reconnaissance-shodan-censys/SKILL.md +279 -0
  294. package/skills/offensive/airecon-fork/reconnaissance-subdomain-enum/SKILL.md +952 -0
  295. package/skills/offensive/airecon-fork/technologies-cicd-attacks/SKILL.md +283 -0
  296. package/skills/offensive/airecon-fork/technologies-cloud-security/SKILL.md +299 -0
  297. package/skills/offensive/airecon-fork/technologies-docker-container/SKILL.md +266 -0
  298. package/skills/offensive/airecon-fork/technologies-elasticsearch/SKILL.md +226 -0
  299. package/skills/offensive/airecon-fork/technologies-firebase-firestore/SKILL.md +213 -0
  300. package/skills/offensive/airecon-fork/technologies-frida-hooking/SKILL.md +387 -0
  301. package/skills/offensive/airecon-fork/technologies-gitlab-github/SKILL.md +259 -0
  302. package/skills/offensive/airecon-fork/technologies-jenkins/SKILL.md +256 -0
  303. package/skills/offensive/airecon-fork/technologies-kubernetes-pentest/SKILL.md +281 -0
  304. package/skills/offensive/airecon-fork/technologies-memcached/SKILL.md +230 -0
  305. package/skills/offensive/airecon-fork/technologies-mobile-app-pentesting/SKILL.md +105 -0
  306. package/skills/offensive/airecon-fork/technologies-mongodb/SKILL.md +257 -0
  307. package/skills/offensive/airecon-fork/technologies-nginx-apache/SKILL.md +280 -0
  308. package/skills/offensive/airecon-fork/technologies-observability-stack-attacks/SKILL.md +501 -0
  309. package/skills/offensive/airecon-fork/technologies-redis/SKILL.md +236 -0
  310. package/skills/offensive/airecon-fork/technologies-supabase/SKILL.md +270 -0
  311. package/skills/offensive/airecon-fork/technologies-tomcat/SKILL.md +232 -0
  312. package/skills/offensive/airecon-fork/tools-advanced-fuzzing/SKILL.md +351 -0
  313. package/skills/offensive/airecon-fork/tools-browser-automation/SKILL.md +300 -0
  314. package/skills/offensive/airecon-fork/tools-caido/SKILL.md +776 -0
  315. package/skills/offensive/airecon-fork/tools-code-review/SKILL.md +71 -0
  316. package/skills/offensive/airecon-fork/tools-dalfox/SKILL.md +189 -0
  317. package/skills/offensive/airecon-fork/tools-hashcat-john/SKILL.md +258 -0
  318. package/skills/offensive/airecon-fork/tools-impacket/SKILL.md +227 -0
  319. package/skills/offensive/airecon-fork/tools-install/SKILL.md +202 -0
  320. package/skills/offensive/airecon-fork/tools-metasploit/SKILL.md +270 -0
  321. package/skills/offensive/airecon-fork/tools-nmap/SKILL.md +211 -0
  322. package/skills/offensive/airecon-fork/tools-nuclei/SKILL.md +175 -0
  323. package/skills/offensive/airecon-fork/tools-reporting/SKILL.md +47 -0
  324. package/skills/offensive/airecon-fork/tools-scripting/SKILL.md +1939 -0
  325. package/skills/offensive/airecon-fork/tools-semgrep/SKILL.md +202 -0
  326. package/skills/offensive/airecon-fork/tools-source-audit/SKILL.md +308 -0
  327. package/skills/offensive/airecon-fork/tools-sqlmap/SKILL.md +137 -0
  328. package/skills/offensive/airecon-fork/tools-tool-catalog/SKILL.md +320 -0
  329. package/skills/offensive/airecon-fork/tools-wapiti/SKILL.md +293 -0
  330. package/skills/offensive/airecon-fork/vulnerabilities-2fa-bypass/SKILL.md +219 -0
  331. package/skills/offensive/airecon-fork/vulnerabilities-account-takeover/SKILL.md +223 -0
  332. package/skills/offensive/airecon-fork/vulnerabilities-api-schema-exposure/SKILL.md +849 -0
  333. package/skills/offensive/airecon-fork/vulnerabilities-api-testing/SKILL.md +278 -0
  334. package/skills/offensive/airecon-fork/vulnerabilities-auth-workflow/SKILL.md +252 -0
  335. package/skills/offensive/airecon-fork/vulnerabilities-authentication-jwt/SKILL.md +158 -0
  336. package/skills/offensive/airecon-fork/vulnerabilities-bfla/SKILL.md +156 -0
  337. package/skills/offensive/airecon-fork/vulnerabilities-blind-xss/SKILL.md +111 -0
  338. package/skills/offensive/airecon-fork/vulnerabilities-business-logic/SKILL.md +313 -0
  339. package/skills/offensive/airecon-fork/vulnerabilities-cors/SKILL.md +242 -0
  340. package/skills/offensive/airecon-fork/vulnerabilities-crlf-injection/SKILL.md +146 -0
  341. package/skills/offensive/airecon-fork/vulnerabilities-csrf/SKILL.md +200 -0
  342. package/skills/offensive/airecon-fork/vulnerabilities-csrf-advanced-bypass/SKILL.md +536 -0
  343. package/skills/offensive/airecon-fork/vulnerabilities-deserialization/SKILL.md +363 -0
  344. package/skills/offensive/airecon-fork/vulnerabilities-dom-based-vulnerabilities/SKILL.md +105 -0
  345. package/skills/offensive/airecon-fork/vulnerabilities-exploitation/SKILL.md +286 -0
  346. package/skills/offensive/airecon-fork/vulnerabilities-grpc/SKILL.md +123 -0
  347. package/skills/offensive/airecon-fork/vulnerabilities-host-header-injection/SKILL.md +169 -0
  348. package/skills/offensive/airecon-fork/vulnerabilities-http-smuggling/SKILL.md +411 -0
  349. package/skills/offensive/airecon-fork/vulnerabilities-idor/SKILL.md +705 -0
  350. package/skills/offensive/airecon-fork/vulnerabilities-information-disclosure/SKILL.md +867 -0
  351. package/skills/offensive/airecon-fork/vulnerabilities-insecure-file-uploads/SKILL.md +190 -0
  352. package/skills/offensive/airecon-fork/vulnerabilities-jwt-attacks/SKILL.md +270 -0
  353. package/skills/offensive/airecon-fork/vulnerabilities-kubernetes/SKILL.md +252 -0
  354. package/skills/offensive/airecon-fork/vulnerabilities-mass-assignment/SKILL.md +788 -0
  355. package/skills/offensive/airecon-fork/vulnerabilities-nosql-injection/SKILL.md +204 -0
  356. package/skills/offensive/airecon-fork/vulnerabilities-oauth-misconfig/SKILL.md +220 -0
  357. package/skills/offensive/airecon-fork/vulnerabilities-oauth-saml/SKILL.md +163 -0
  358. package/skills/offensive/airecon-fork/vulnerabilities-open-redirect/SKILL.md +167 -0
  359. package/skills/offensive/airecon-fork/vulnerabilities-password-reset-poisoning/SKILL.md +66 -0
  360. package/skills/offensive/airecon-fork/vulnerabilities-path-traversal/SKILL.md +192 -0
  361. package/skills/offensive/airecon-fork/vulnerabilities-privilege-escalation/SKILL.md +320 -0
  362. package/skills/offensive/airecon-fork/vulnerabilities-prototype-pollution/SKILL.md +242 -0
  363. package/skills/offensive/airecon-fork/vulnerabilities-race-conditions/SKILL.md +192 -0
  364. package/skills/offensive/airecon-fork/vulnerabilities-rce/SKILL.md +240 -0
  365. package/skills/offensive/airecon-fork/vulnerabilities-sensitive-file-pii-exposure/SKILL.md +589 -0
  366. package/skills/offensive/airecon-fork/vulnerabilities-spring4shell/SKILL.md +86 -0
  367. package/skills/offensive/airecon-fork/vulnerabilities-sql-injection/SKILL.md +313 -0
  368. package/skills/offensive/airecon-fork/vulnerabilities-ssrf/SKILL.md +183 -0
  369. package/skills/offensive/airecon-fork/vulnerabilities-ssti/SKILL.md +344 -0
  370. package/skills/offensive/airecon-fork/vulnerabilities-subdomain-takeover/SKILL.md +160 -0
  371. package/skills/offensive/airecon-fork/vulnerabilities-supply-chain/SKILL.md +125 -0
  372. package/skills/offensive/airecon-fork/vulnerabilities-unhandled-exception-differential/SKILL.md +742 -0
  373. package/skills/offensive/airecon-fork/vulnerabilities-waf-detection/SKILL.md +90 -0
  374. package/skills/offensive/airecon-fork/vulnerabilities-web-cache-poisoning/SKILL.md +233 -0
  375. package/skills/offensive/airecon-fork/vulnerabilities-websocket/SKILL.md +180 -0
  376. package/skills/offensive/airecon-fork/vulnerabilities-xss/SKILL.md +316 -0
  377. package/skills/offensive/airecon-fork/vulnerabilities-xxe/SKILL.md +222 -0
  378. package/skills/offensive/matty-fork/cicd-redteam/SKILL.md +531 -0
  379. package/skills/offensive/matty-fork/cloud-security/SKILL.md +106 -0
  380. package/skills/offensive/matty-fork/container-escape/SKILL.md +174 -0
  381. package/skills/offensive/matty-fork/mobile-pentester/SKILL.md +357 -0
  382. package/skills/offensive/matty-fork/subdomain-takeover/SKILL.md +154 -0
  383. package/skills/osint/elementalsouls-fork/offensive-osint/README.md +92 -0
  384. package/skills/osint/elementalsouls-fork/offensive-osint/SKILL.md +4177 -0
  385. package/skills/osint/elementalsouls-fork/osint-methodology/README.md +66 -0
  386. package/skills/osint/elementalsouls-fork/osint-methodology/SKILL.md +1695 -0
@@ -0,0 +1,265 @@
1
+ # Vereinbarung über gemeinsame Verantwortlichkeit nach Art. 26 DSGVO (Joint Controller Agreement)
2
+
3
+ **Version**: v1.0 (2026-05-05)
4
+ **Vorlagen-Typ**: Gemeinsame Verantwortlichkeit (Art. 26 DSGVO) — **NICHT Auftragsverarbeitung** (Art. 28 DSGVO; siehe `AVV-standard-DE.md`)
5
+ **Disclaimer**: Diese Vorlage stellt keine Rechtsberatung im Sinne § 2 RDG dar. Vor produktiver Verwendung individuelle anwaltliche Prüfung erforderlich. Die Abgrenzung Auftragsverarbeitung ↔ gemeinsame Verantwortlichkeit ist hochsensibel; eine Fehl-Klassifizierung kann erhebliche aufsichtsrechtliche Folgen haben (siehe EuGH "Fashion ID" C-40/17, "Wirtschaftsakademie Schleswig-Holstein" C-210/16, "Jehovan todistajat" C-25/17).
6
+
7
+ ---
8
+
9
+ ## Vorabgrenzung — Wann gilt Art. 26 DSGVO?
10
+
11
+ **Gemeinsame Verantwortlichkeit** liegt vor, wenn **zwei oder mehr Verantwortliche gemeinsam die Zwecke und Mittel der Verarbeitung festlegen** (Art. 26 Abs. 1 DSGVO).
12
+
13
+ | Konstellation | Klassifikation | Vertrags-Vorlage |
14
+ |---------------|----------------|------------------|
15
+ | Eine Partei legt Zwecke + Mittel fest, andere Partei verarbeitet weisungsgebunden | **Auftragsverarbeitung** Art. 28 | `AVV-standard-DE.md` |
16
+ | Beide Parteien legen Zwecke ODER Mittel **gemeinsam** fest | **gemeinsame Verantwortung** Art. 26 | dieses Dokument |
17
+ | Beide Parteien verarbeiten dieselben Daten, aber **getrennt** und für **eigene Zwecke** | **getrennte Verantwortlichkeiten** (kein Art. 26-Vertrag) | i. d. R. nur Datenschutzhinweise |
18
+ | Konzern-interne Datenflüsse | Einzelfall: oft Art. 26 oder gemeinsame Verarbeitungsverbund | Joint-Controller-Vertrag oder BCR |
19
+
20
+ **Typische Anwendungsfälle Art. 26 DSGVO**:
21
+ - Social-Plugin-Einbindung auf Website (Fashion ID)
22
+ - Co-Marketing-Aktion zweier Unternehmen mit gemeinsamem Lead-Pool
23
+ - Plattform-Anbieter + Plattform-Nutzer mit geteilter Daten-Hoheit (Wirtschaftsakademie / Facebook-Fanpage)
24
+ - Konzern-interne Geschäftspartner-Datenbank
25
+ - Forschungs-Konsortium mit gemeinsamer Datenbank
26
+ - Affiliate-Partnerprogramm mit Tracking
27
+ - Federated-Identity-Anbindungen
28
+
29
+ ---
30
+
31
+ ## Vertragsparteien
32
+
33
+ **Gemeinsam Verantwortlicher A** (im Folgenden: „Verantwortlicher A"):
34
+
35
+ > <Firma / Name>
36
+ > <Anschrift>
37
+ > <Vertretungsberechtigt>
38
+ > <USt-IdNr / HRB>
39
+ > Datenschutzbeauftragter: <Name + Kontakt>
40
+
41
+ **Gemeinsam Verantwortlicher B** (im Folgenden: „Verantwortlicher B"):
42
+
43
+ > <Firma / Name>
44
+ > <Anschrift>
45
+ > <Vertretungsberechtigt>
46
+ > <USt-IdNr / HRB>
47
+ > Datenschutzbeauftragter: <Name + Kontakt>
48
+
49
+ > *Bei mehr als zwei Parteien: weitere Verantwortliche analog (Verantwortlicher C, D, …).*
50
+
51
+ — im Folgenden gemeinsam: „die Parteien" oder „gemeinsam Verantwortliche" —
52
+
53
+ ---
54
+
55
+ ## Präambel
56
+
57
+ Die Parteien beabsichtigen die **gemeinsame Verarbeitung** personenbezogener Daten im Rahmen der in **§ 1** beschriebenen Verarbeitungs-Tätigkeit. Da die Parteien gemeinsam Zwecke und Mittel der Verarbeitung festlegen, sind sie **gemeinsam Verantwortliche** im Sinne des Art. 26 DSGVO. Diese Vereinbarung regelt in transparenter Form die Verteilung der DSGVO-Pflichten und ist Vertragsbestandteil. Wesentliche Inhalte werden den betroffenen Personen gemäß Art. 26 Abs. 2 Satz 2 DSGVO in geeigneter Form zur Verfügung gestellt.
58
+
59
+ ---
60
+
61
+ ## § 1 Gegenstand der gemeinsamen Verarbeitung
62
+
63
+ **§ 1.1 Beschreibung**: Gegenstand der gemeinsamen Verarbeitung ist:
64
+
65
+ > <z. B. „Co-Marketing-Kampagne zur Akquise gemeinsamer Leads über eine geteilte Landing-Page mit Lead-Formular, dessen Eingaben in einem gemeinsamen CRM-System beider Parteien gespeichert und beworben werden."
66
+ >
67
+ > oder „Betrieb einer Affiliate-Plattform, auf der Verantwortlicher A die Tracking-Infrastruktur stellt und Verantwortlicher B Affiliate-Partner verwaltet; beide Parteien werten Conversion-Daten gemeinsam aus.">
68
+
69
+ **§ 1.2 Festlegung gemeinsamer Zwecke und Mittel**: Die gemeinsam festgelegten Zwecke und Mittel umfassen:
70
+
71
+ a) Zwecke:
72
+ > <z. B. „Lead-Akquise, Marketing-Erfolgsmessung, gemeinsame Direktansprache der Betroffenen.">
73
+
74
+ b) Mittel:
75
+ > <z. B. „Gemeinsame Datenbank XYZ; gemeinsam definierte Datenfelder; gemeinsame Tracking-Pixel; gemeinsam vereinbarte Speicherdauer.">
76
+
77
+ **§ 1.3 Rechtsgrundlage**: Die Verarbeitung stützt sich auf folgende Rechtsgrundlage(n) nach Art. 6 DSGVO (jeweils zu spezifizieren):
78
+
79
+ - ☐ Einwilligung (Art. 6 Abs. 1 lit. a) — Wer holt sie ein? <…>
80
+ - ☐ Vertragserfüllung (Art. 6 Abs. 1 lit. b) — Welcher Vertrag? <…>
81
+ - ☐ Rechtliche Verpflichtung (Art. 6 Abs. 1 lit. c) — Welche? <…>
82
+ - ☐ Berechtigtes Interesse (Art. 6 Abs. 1 lit. f) — Interesse + Abwägung <…>
83
+
84
+ ---
85
+
86
+ ## § 2 Aufgabenverteilung — Wer übernimmt welche DSGVO-Pflicht? (Art. 26 Abs. 1 Satz 2 DSGVO)
87
+
88
+ **§ 2.1 Information der Betroffenen (Art. 13/14 DSGVO)**:
89
+
90
+ | Pflicht | Verantwortlicher A | Verantwortlicher B |
91
+ |---------|---------------------|---------------------|
92
+ | Bereitstellung Datenschutzinformation auf Website / im UI | ☐ | ☐ |
93
+ | Bereitstellung "wesentlicher Inhalt" dieses Joint-Controller-Vertrags an Betroffene (Art. 26 Abs. 2 S. 2) | ☐ | ☐ |
94
+ | Pflege der Datenschutzhinweise | ☐ | ☐ |
95
+
96
+ **§ 2.2 Betroffenenrechte (Art. 15–22 DSGVO)**:
97
+
98
+ > Wichtig: Die betroffene Person kann nach Art. 26 Abs. 3 DSGVO ihre Rechte gegenüber **jedem** der Verantwortlichen geltend machen. Die interne Aufgabenverteilung berührt diesen Außenrechtsschutz nicht.
99
+
100
+ | Pflicht | Verantwortlicher A | Verantwortlicher B | Frist |
101
+ |---------|---------------------|---------------------|-------|
102
+ | Erstkontakt / Empfang von Anfragen | ☐ Single-Point-of-Contact (SPOC) | ☐ Empfangsweiterleitung an SPOC | 1 Werktag |
103
+ | Auskunft (Art. 15) | ☐ | ☐ | 30 Tage |
104
+ | Berichtigung (Art. 16) | ☐ | ☐ | 30 Tage |
105
+ | Löschung (Art. 17) | ☐ | ☐ | 30 Tage |
106
+ | Einschränkung (Art. 18) | ☐ | ☐ | 30 Tage |
107
+ | Datenübertragbarkeit (Art. 20) | ☐ | ☐ | 30 Tage |
108
+ | Widerspruch (Art. 21) | ☐ | ☐ | 30 Tage |
109
+ | Recht auf nicht-automatisierte Entscheidung (Art. 22) | ☐ | ☐ | unverzüglich |
110
+
111
+ **§ 2.3 Datenpannen (Art. 33/34 DSGVO)**:
112
+
113
+ | Pflicht | Verantwortlicher A | Verantwortlicher B | Frist |
114
+ |---------|---------------------|---------------------|-------|
115
+ | Erstmeldung an die jeweils andere Partei | ☐ | ☐ | unverzüglich, max. 24h |
116
+ | Meldung an Aufsichtsbehörde (Art. 33) | ☐ federführend | ☐ unterstützend | 72h |
117
+ | Benachrichtigung Betroffener (Art. 34) | ☐ federführend | ☐ unterstützend | unverzüglich |
118
+
119
+ **§ 2.4 Sicherheit der Verarbeitung (Art. 32 DSGVO)**:
120
+
121
+ | Pflicht | Verantwortlicher A | Verantwortlicher B |
122
+ |---------|---------------------|---------------------|
123
+ | TOMs für eigene Systeme | ☐ | ☐ |
124
+ | TOMs für gemeinsame Systeme — federführend | ☐ | ☐ |
125
+ | Periodische TOM-Reviews | ☐ jährlich | ☐ jährlich |
126
+
127
+ **§ 2.5 Verfahrensverzeichnis (Art. 30 DSGVO)**: Beide Parteien führen jeweils ihr eigenes Verzeichnis und vermerken die gemeinsame Verarbeitung darin mit Verweis auf diese Vereinbarung.
128
+
129
+ **§ 2.6 Datenschutz-Folgenabschätzung (Art. 35 DSGVO)**: Bei hohem Risiko führt **<Verantwortlicher A / B / gemeinsam>** die DSFA federführend durch; die jeweils andere Partei wirkt mit.
130
+
131
+ **§ 2.7 Drittlands-Übermittlung**: Übermittlungen in Drittländer erfolgen nur mit beidseitiger Zustimmung + geeigneten Garantien (siehe SCC-Anhänge der AVV-Layer).
132
+
133
+ ---
134
+
135
+ ## § 3 Sicherheits-Maßnahmen
136
+
137
+ **§ 3.1**: Die gemeinsam Verantwortlichen treffen TOMs nach Art. 32 DSGVO mindestens auf dem in **`AVV-anhang-TOMs.md`** beschriebenen Niveau.
138
+
139
+ **§ 3.2**: Schnittstellen zwischen den Systemen der Parteien sind verschlüsselt (TLS ≥ 1.2); Authentifizierung erfolgt mittels gegenseitig vereinbarter Mechanismen (API-Schlüssel, OAuth2 mit kurzlebigen Tokens, mTLS).
140
+
141
+ **§ 3.3 Audit-Recht der Parteien gegeneinander**: Jede Partei hat das Recht, die TOM-Einhaltung der anderen Partei für die gemeinsame Verarbeitung zu auditieren — analog **`AVV-anhang-Audit-Klausel-Varianten.md`** (Variante A/B/C).
142
+
143
+ ---
144
+
145
+ ## § 4 Pflichten gegenüber Betroffenen (Art. 26 Abs. 2 Satz 2 DSGVO)
146
+
147
+ **§ 4.1 Wesentlicher Inhalt der Vereinbarung**: Den Betroffenen werden folgende wesentliche Inhalte dieser Vereinbarung in geeigneter Form (i. d. R. Datenschutzerklärung der primären Kontaktstelle) zur Verfügung gestellt:
148
+
149
+ - ☐ Identität der gemeinsam Verantwortlichen
150
+ - ☐ Zweck(e) der gemeinsamen Verarbeitung
151
+ - ☐ Gegenstand der Verarbeitung
152
+ - ☐ Aufgabenverteilung — wer übernimmt welche DSGVO-Pflicht (zumindest: wer ist primärer Ansprechpartner für Betroffenenrechte)
153
+ - ☐ Hinweis: Betroffener kann Rechte gegenüber **jedem** der Verantwortlichen geltend machen
154
+ - ☐ Kontakt-Informationen Datenschutzbeauftragte beider Parteien
155
+
156
+ **§ 4.2 Single Point of Contact (SPOC)**: Trotz beidseitiger Verpflichtung benennen die Parteien einen primären Ansprechpartner für Betroffenenrechte:
157
+
158
+ > Primärer Ansprechpartner: **<Verantwortlicher A / B>**
159
+ > Kontakt: <Email + Postanschrift>
160
+
161
+ ---
162
+
163
+ ## § 5 Aufzeichnungspflichten
164
+
165
+ **§ 5.1 Beide Parteien führen**:
166
+
167
+ - ☐ Verfahrensverzeichnis für die gemeinsame Verarbeitung (Art. 30 DSGVO)
168
+ - ☐ Audit-Log über Datenschutz-relevante Vorgänge
169
+ - ☐ Dokumentation aller Betroffenenrechts-Anfragen + Antworten
170
+ - ☐ Dokumentation aller Datenpannen-Meldungen (intern + an Aufsichtsbehörde)
171
+ - ☐ Nachweis der Einhaltung der TOMs (jährlicher TOM-Review)
172
+
173
+ ---
174
+
175
+ ## § 6 Sub-Auftragsverarbeiter
176
+
177
+ **§ 6.1**: Setzen die Parteien Auftragsverarbeiter zur Unterstützung der gemeinsamen Verarbeitung ein, schließen sie jeweils separate Auftragsverarbeitungsverträge nach Art. 28 DSGVO ab — entsprechend `AVV-standard-DE.md`.
178
+
179
+ **§ 6.2**: Über den Einsatz neuer Auftragsverarbeiter im Bereich der gemeinsamen Verarbeitung informieren sich die Parteien gegenseitig mit angemessenem Vorlauf (mindestens 30 Kalendertage).
180
+
181
+ ---
182
+
183
+ ## § 7 Haftung und Schadensersatz (Art. 82 DSGVO)
184
+
185
+ **§ 7.1**: Im Außenverhältnis haften die Parteien gegenüber Betroffenen nach Art. 82 DSGVO als Gesamtschuldner.
186
+
187
+ **§ 7.2 Innenausgleich**: Im Innenverhältnis trägt jede Partei den Anteil am Schaden, der ihrem Verantwortungsbeitrag entspricht. Liegt eine ausschließliche Pflichtverletzung einer Partei vor, trägt diese den Schaden allein.
188
+
189
+ **§ 7.3 Bußgelder (Art. 83 DSGVO)**: Bußgelder trägt diejenige Partei, der die Pflichtverletzung zuzurechnen ist. Bei beiderseitigem Verschulden anteilig nach Verschuldensgrad.
190
+
191
+ **§ 7.4 Freistellung**: Wird eine Partei von einem Betroffenen oder einer Aufsichtsbehörde für eine Pflicht in Anspruch genommen, die nach § 2 dieser Vereinbarung der anderen Partei zugewiesen ist, stellt die jeweils zuständige Partei die andere Partei von Ansprüchen frei.
192
+
193
+ ---
194
+
195
+ ## § 8 Laufzeit, Kündigung und Beendigung
196
+
197
+ **§ 8.1 Laufzeit**: Diese Vereinbarung tritt am <Startdatum> in Kraft und gilt für die Dauer der gemeinsamen Verarbeitung, mindestens für die Laufzeit der zugrundeliegenden Geschäftsbeziehung.
198
+
199
+ **§ 8.2 Ordentliche Kündigung**: Mit Frist von <3 / 6> Monaten zum Quartalsende.
200
+
201
+ **§ 8.3 Außerordentliche Kündigung**: jede Partei bei wesentlicher Pflichtverletzung der anderen Partei, insbesondere wiederholten DSGVO-Verstößen oder Verweigerung der Mitwirkungspflichten.
202
+
203
+ **§ 8.4 Beendigungsfolgen**:
204
+ - Gemeinsame Verarbeitung wird eingestellt.
205
+ - Daten werden zwischen den Parteien aufgeteilt nach gemeinsamer Vereinbarung — jede Partei nimmt die ihr zustehenden Daten in eigene Verantwortung; Daten ohne klare Zuordnung werden gemeinsam gelöscht.
206
+ - Aufzeichnungen + Audit-Logs werden 3 Jahre über das Vertragsende hinaus aufbewahrt (Beweissicherung für Aufsichtsanfragen).
207
+
208
+ ---
209
+
210
+ ## § 9 Schlussbestimmungen
211
+
212
+ **§ 9.1 Schriftform**: Änderungen bedürfen der Textform.
213
+
214
+ **§ 9.2 Salvatorische Klausel**: Unwirksamkeit einer Bestimmung berührt nicht die übrigen.
215
+
216
+ **§ 9.3 Anwendbares Recht**: Recht der Bundesrepublik Deutschland; zwingende DSGVO-Vorschriften haben Vorrang.
217
+
218
+ **§ 9.4 Gerichtsstand**: <Sitz Verantwortlicher A / B / nach Vereinbarung>.
219
+
220
+ **§ 9.5 Vertragsanlagen**:
221
+
222
+ | Anlage | Inhalt |
223
+ |--------|--------|
224
+ | 1 | Aufgabenverteilungs-Matrix (§ 2 — separat als Tabelle ausgefüllt) |
225
+ | 2 | Datenschutzinformation für Betroffene (zu veröffentlichen — Art. 26 Abs. 2 S. 2) |
226
+ | 3 | TOM-Katalog (siehe `AVV-anhang-TOMs.md`) |
227
+ | 4 | Liste eingesetzter Auftragsverarbeiter beider Parteien (siehe `AVV-anhang-Sub-Processor-List.md` analog) |
228
+
229
+ ---
230
+
231
+ **Ort, Datum, Unterschriften**:
232
+
233
+ > _______________________________
234
+ > Verantwortlicher A: <Name, Funktion>
235
+ > Ort, Datum
236
+
237
+ > _______________________________
238
+ > Verantwortlicher B: <Name, Funktion>
239
+ > Ort, Datum
240
+
241
+ ---
242
+
243
+ ## Anlage 2 — Datenschutzinformation für Betroffene (Mustertext)
244
+
245
+ > **Information nach Art. 13 + Art. 26 Abs. 2 S. 2 DSGVO — Gemeinsame Verantwortlichkeit**
246
+ >
247
+ > Wir, **<Verantwortlicher A>** (Firma, Anschrift, Kontakt-Email) und **<Verantwortlicher B>** (Firma, Anschrift, Kontakt-Email), verarbeiten Ihre personenbezogenen Daten **gemeinsam verantwortlich** im Sinne des Art. 26 DSGVO im Rahmen folgender Verarbeitung: **<Beschreibung>**.
248
+ >
249
+ > **Zwecke**: <Zwecke>
250
+ > **Rechtsgrundlage**: <Art. 6 Abs. 1 lit. a / b / f DSGVO>
251
+ > **Datenkategorien**: <…>
252
+ > **Speicherdauer**: <…>
253
+ >
254
+ > **Aufgabenverteilung zwischen uns**:
255
+ > - Erstkontakt für Ihre Datenschutzrechte: **<Verantwortlicher A>** unter <Email>
256
+ > - Datenpannen-Meldung an die Aufsichtsbehörde: federführend **<Verantwortlicher A / B>**
257
+ > - Sicherheit der gemeinsamen Systeme: gemeinsam
258
+ >
259
+ > **Wichtig**: Sie können Ihre Rechte aus Art. 15–22 DSGVO **gegenüber jedem von uns** geltend machen — wir leiten Ihre Anfrage intern weiter und antworten gemeinsam.
260
+ >
261
+ > **Datenschutzbeauftragte**:
262
+ > - <Verantwortlicher A>: <Name + Email>
263
+ > - <Verantwortlicher B>: <Name + Email>
264
+ >
265
+ > **Beschwerderecht**: Sie haben das Recht, Beschwerde bei einer Datenschutzaufsichtsbehörde einzulegen — i. d. R. derjenigen Ihres gewöhnlichen Aufenthalts.
@@ -0,0 +1,262 @@
1
+ #!/usr/bin/env bash
2
+ # brutaler-anwalt — Health-Check for skill consistency.
3
+ # Usage: bash scripts/health-check.sh
4
+ # Exit: 0 healthy · 1 issues found
5
+
6
+ set -euo pipefail
7
+
8
+ SKILL_DIR="$(cd "$(dirname "$0")/.." && pwd)"
9
+ issues=0
10
+
11
+ echo "▎ brutaler-anwalt Health-Check"
12
+ echo "▎ Skill-Dir: $SKILL_DIR"
13
+ echo
14
+
15
+ # 1. Brand-Leak-Check — operator-internal QA gate.
16
+ # Reads the brand-pattern from the BRUTALER_ANWALT_BRAND_PATTERN env-var
17
+ # (operator's local shell or a local .envrc). Default is empty: public
18
+ # users who install the skill see this check as a silent no-op. The
19
+ # pattern is never embedded in tracked code -- it must not appear in
20
+ # the source-of-truth of the published @aegis-scan/skills tarball.
21
+ # Operator-local fallback: read from scripts/scrub-terms.local.txt
22
+ # (relative to the repo root that contains this script's package).
23
+ # Note: grep -l returns exit 1 on no-match — we tolerate that via
24
+ # subshell+|| true so set -euo pipefail does not abort the script.
25
+ echo "1/10 Brand-Leak-Check…"
26
+ BRAND_PATTERN="${BRUTALER_ANWALT_BRAND_PATTERN:-}"
27
+ if [[ -z "$BRAND_PATTERN" ]]; then
28
+ # Fallback: try to read from the operator-local gitignored file at the
29
+ # project root (only resolvable when this script is run from inside the
30
+ # AEGIS monorepo, NOT when the skill is installed standalone).
31
+ candidate="$SKILL_DIR/../../../../../../scripts/scrub-terms.local.txt"
32
+ if [[ -f "$candidate" ]]; then
33
+ BRAND_PATTERN=$(grep -v '^[[:space:]]*#' "$candidate" | grep -v '^[[:space:]]*$' | tr '\n' '|' | sed 's/|$//')
34
+ fi
35
+ fi
36
+ if [[ -z "$BRAND_PATTERN" ]]; then
37
+ echo " ✓ no brand-pattern configured (operator-internal QA skipped)"
38
+ else
39
+ brand_hits=$( (grep -rEnli "$BRAND_PATTERN" \
40
+ "$SKILL_DIR/SKILL.md" "$SKILL_DIR/README.md" "$SKILL_DIR/LICENSE" "$SKILL_DIR/CHANGELOG.md" "$SKILL_DIR/references/" 2>/dev/null || true) \
41
+ | wc -l | tr -d ' ')
42
+ if [[ "$brand_hits" == "0" ]]; then
43
+ echo " ✓ keine Brand-Leaks"
44
+ else
45
+ echo " ✗ $brand_hits Brand-Leak-Treffer:"
46
+ grep -rEni "$BRAND_PATTERN" \
47
+ "$SKILL_DIR/SKILL.md" "$SKILL_DIR/README.md" "$SKILL_DIR/LICENSE" "$SKILL_DIR/CHANGELOG.md" "$SKILL_DIR/references/" 2>/dev/null | head -10 || true
48
+ issues=$((issues + 1))
49
+ fi
50
+ fi
51
+
52
+ # 2. Az.-Provenance — every entry should have a Source-URL
53
+ echo "2/10 Az.-Provenance-Check…"
54
+ # Az.-Eintraege = ### Headers, ABER nicht Pattern-Sections (### Wenn ...)
55
+ # und nicht die Audit-Trigger-Sections die thematisch sind, keine Az.
56
+ az_count=$( (grep -cE "^### " "$SKILL_DIR/references/bgh-urteile.md" 2>/dev/null || echo 0) | head -1)
57
+ pattern_count=$( (grep -cE "^### Wenn " "$SKILL_DIR/references/bgh-urteile.md" 2>/dev/null || echo 0) | head -1)
58
+ real_az=$((az_count - pattern_count))
59
+ # Source-Verlinkung in beliebigem Markdown-Format: **Source**, "Source:", oder eingebetteter http(s)-Link.
60
+ src_count=$( (grep -cE "\*\*Source\*\*|Source:|https?://(juris|curia|dejure|openjur|rewis|edpb|gesetze-im-internet|eur-lex|bverwg|bag-urteil|nrwe|wettbewerbszentrale|noerr|twobirds|bird-bird|alro-recht|bfdi|datenschutz-berlin|lfd\.niedersachsen|taylorwessing|lto|llp-law|lennmed|medien-internet-und-recht|dataprotection\.ie|edpb\.europa|heise|bafin)" "$SKILL_DIR/references/bgh-urteile.md" 2>/dev/null || echo 0) | head -1)
61
+ # Tolerated unsourced: VERDACHT-HALLUZINATION + DPF-Klage-anhaengig (intentionally unsourced)
62
+ tolerated_count=$( (grep -cE "VERDACHT-HALLUZINATION|unverifiziert, da Verfahren" "$SKILL_DIR/references/bgh-urteile.md" 2>/dev/null || echo 0) | head -1)
63
+ expected_src=$((real_az - tolerated_count))
64
+ echo " Az.-Eintraege (echte): $real_az · Source-Verlinkungen: $src_count · Toleriert (Halluzin/anhaengig): $tolerated_count"
65
+ if [[ "$src_count" -lt "$expected_src" ]]; then
66
+ diff=$((expected_src - src_count))
67
+ echo " ⚠ $diff Eintraege ohne Source-Verlinkung — Provenance-Disziplin §5 pruefen"
68
+ issues=$((issues + 1))
69
+ else
70
+ echo " ✓ alle Az.-Eintraege haben Source-Verlinkung (modulo $tolerated_count tolerierte)"
71
+ fi
72
+
73
+ # 3. Verzeichnis-Vollstaendigkeit
74
+ echo "3/10 Verzeichnis-Vollstaendigkeit…"
75
+ required=("SKILL.md" "README.md" "LICENSE" "CHANGELOG.md" "settings.json" \
76
+ ".claude-plugin/plugin.json" \
77
+ "hooks/post_write.py" "hooks/session_start.py" "hooks/prompt_submit.py" "hooks/triggers.json" \
78
+ "commands/cold-start.md" "commands/health.md" \
79
+ "references/INDEX.md" \
80
+ "references/audit-patterns.md" "references/dsgvo.md" "references/it-recht.md" \
81
+ "references/vertragsrecht.md" "references/checklisten.md" "references/branchenrecht.md" \
82
+ "references/bgh-urteile.md" "references/abmahn-templates.md" "references/aegis-integration.md" \
83
+ "references/international.md" "references/strafrecht-steuer.md" \
84
+ "references/templates/README.md" \
85
+ "references/gesetze/INDEX.md" \
86
+ "references/stack-patterns/INDEX.md")
87
+
88
+ missing=0
89
+ for f in "${required[@]}"; do
90
+ if [[ ! -f "$SKILL_DIR/$f" ]]; then
91
+ echo " ✗ fehlt: $f"
92
+ missing=$((missing + 1))
93
+ fi
94
+ done
95
+ if [[ "$missing" == "0" ]]; then
96
+ echo " ✓ alle ${#required[@]} Pflicht-Files vorhanden"
97
+ else
98
+ echo " ✗ $missing Pflicht-Files fehlen"
99
+ issues=$((issues + 1))
100
+ fi
101
+
102
+ # 4. SKILL.md Reference-Loading-Map → File-Vorhandensein
103
+ echo "4/10 Reference-Loading-Map konsistent…"
104
+ map_files=$(grep -oE 'references/[a-z_-]+\.md' "$SKILL_DIR/SKILL.md" 2>/dev/null | sort -u)
105
+ for f in $map_files; do
106
+ if [[ ! -f "$SKILL_DIR/$f" ]]; then
107
+ echo " ✗ SKILL.md verlinkt $f, aber Datei fehlt"
108
+ issues=$((issues + 1))
109
+ fi
110
+ done
111
+ echo " ✓ alle in SKILL.md referenzierten Files vorhanden"
112
+
113
+ # 5. Templates ohne Brand-Leak — reuses BRAND_PATTERN from check 1 above.
114
+ # Public users with no pattern configured see this as a silent no-op.
115
+ echo "5/10 Templates anonymisiert…"
116
+ if [[ -z "$BRAND_PATTERN" ]]; then
117
+ echo " ✓ no brand-pattern configured (operator-internal QA skipped)"
118
+ else
119
+ template_brand_hits=$( (grep -rEnli "$BRAND_PATTERN" \
120
+ "$SKILL_DIR/references/templates/" 2>/dev/null || true) | wc -l | tr -d ' ')
121
+ if [[ "$template_brand_hits" == "0" ]]; then
122
+ echo " ✓ alle Templates anonymisiert"
123
+ else
124
+ echo " ✗ Templates enthalten Brand-Refs (sollten anonym sein):"
125
+ grep -rEni "$BRAND_PATTERN" \
126
+ "$SKILL_DIR/references/templates/" 2>/dev/null | head -10 || true
127
+ issues=$((issues + 1))
128
+ fi
129
+ fi
130
+
131
+ # 6. Az-Cross-File-Konsistenz (V4.0-Lesson, post-E.1-Cleanup-Lesson 2026-05-02)
132
+ # Detekt: bekannte verworfene Az. die als AKTIVE Citation auftauchen (nicht als Doku-Note)
133
+ # Toleriert: Provenance-Notes / VERDACHT-HALLUZINATION-Tags / „verworfen" / Lesson-Kontext.
134
+ echo "6/10 Az-Cross-File-Konsistenz (aktive Drifts)…"
135
+ DRIFT_FOUND=0
136
+ # 6a. OLG Hamm 4 U 75/23 — aktive Citation = ohne Doku-Marker im selben File
137
+ hamm_active=$( (grep -rEn "OLG Hamm.*4 U 75/23|Hamm 4 U 75/23" \
138
+ "$SKILL_DIR/references/" "$SKILL_DIR/SKILL.md" 2>/dev/null || true) \
139
+ | (grep -vE "verworfen|Vorgaenger-Eintrag|Provenance-Note|Lesson|halluzin|Halluzin|war \*\*OLG Hamm|tatsaechlich 11 U 88|→ 11 U 88|→ tatsaechlich" || true) \
140
+ | wc -l | tr -d ' ')
141
+ if [[ "$hamm_active" -gt "0" ]]; then
142
+ echo " ✗ OLG Hamm 4 U 75/23 in $hamm_active aktiven Citation(s) — sollte 11 U 88/22 sein:"
143
+ grep -rEn "OLG Hamm.*4 U 75/23|Hamm 4 U 75/23" "$SKILL_DIR/references/" "$SKILL_DIR/SKILL.md" 2>/dev/null \
144
+ | grep -vE "verworfen|Vorgaenger-Eintrag|Provenance-Note|Lesson|halluzin|Halluzin|war \*\*OLG Hamm" | head -3 || true
145
+ DRIFT_FOUND=$((DRIFT_FOUND + 1))
146
+ fi
147
+ # 6b. LG Berlin 16 O 9/22 — analog
148
+ # grep -v exits with 1 when ALL lines are filtered out (legitimate match → no active drift).
149
+ # Use `|| true` defensively after the grep -v + wrap in subshell.
150
+ lgb_active=$( (grep -rEn "16 O 9/22" "$SKILL_DIR/references/" "$SKILL_DIR/SKILL.md" 2>/dev/null || true) \
151
+ | (grep -vE "VERDACHT-HALLUZINATION|halluzin|Halluzin|verworfen|nicht zitieren|Lesson|existiert nicht|ersetzt durch|→ BGH I ZR 218/07" || true) \
152
+ | wc -l | tr -d ' ')
153
+ if [[ "$lgb_active" -gt "0" ]]; then
154
+ echo " ✗ LG Berlin 16 O 9/22 in $lgb_active aktiven Citation(s) — Halluzination, BGH I ZR 218/07 verwenden"
155
+ DRIFT_FOUND=$((DRIFT_FOUND + 1))
156
+ fi
157
+ if [[ "$DRIFT_FOUND" == "0" ]]; then
158
+ echo " ✓ keine aktiven Cross-File-Az-Drifts"
159
+ else
160
+ issues=$((issues + 1))
161
+ fi
162
+
163
+ # 7. Hooks executable + lint-clean (v4.3.0+)
164
+ echo "7/10 Hooks Python-syntax-clean…"
165
+ hook_errors=0
166
+ for hook in "$SKILL_DIR"/hooks/*.py; do
167
+ [[ -f "$hook" ]] || continue
168
+ if ! python3 -c "import py_compile; py_compile.compile('$hook', doraise=True)" 2>/dev/null; then
169
+ echo " ✗ Syntax-Fehler in $(basename "$hook")"
170
+ hook_errors=$((hook_errors + 1))
171
+ fi
172
+ if [[ ! -x "$hook" ]]; then
173
+ echo " ⚠ $(basename "$hook") nicht executable (chmod +x noetig)"
174
+ fi
175
+ done
176
+ if [[ "$hook_errors" == "0" ]]; then
177
+ echo " ✓ alle hooks/*.py sind syntax-clean"
178
+ else
179
+ issues=$((issues + 1))
180
+ fi
181
+
182
+ # 8. triggers.json regex-valid (v4.3.0+)
183
+ echo "8/10 triggers.json regex-valid…"
184
+ triggers_file="$SKILL_DIR/hooks/triggers.json"
185
+ if [[ ! -f "$triggers_file" ]]; then
186
+ echo " ✗ hooks/triggers.json fehlt"
187
+ issues=$((issues + 1))
188
+ else
189
+ if ! python3 -c "
190
+ import json, re, sys
191
+ with open('$triggers_file') as f:
192
+ data = json.load(f)
193
+ errors = []
194
+ for t in data.get('triggers', []):
195
+ try:
196
+ re.compile(t['pattern'])
197
+ except re.error as e:
198
+ errors.append((t.get('name', '?'), str(e)))
199
+ if errors:
200
+ for name, err in errors:
201
+ print(f'invalid regex {name}: {err}', file=sys.stderr)
202
+ sys.exit(1)
203
+ print(f'OK {len(data[\"triggers\"])} triggers')
204
+ " 2>&1; then
205
+ echo " ✗ triggers.json hat invalid Regex-Patterns"
206
+ issues=$((issues + 1))
207
+ else
208
+ triggers_count=$(python3 -c "import json; print(len(json.load(open('$triggers_file'))['triggers']))")
209
+ echo " ✓ alle $triggers_count Trigger-Patterns regex-valid"
210
+ fi
211
+ fi
212
+
213
+ # 9. .claude-plugin/plugin.json schema-valid + version match
214
+ echo "9/10 plugin.json schema-valid + version-match…"
215
+ plugin_file="$SKILL_DIR/.claude-plugin/plugin.json"
216
+ if [[ ! -f "$plugin_file" ]]; then
217
+ echo " ✗ .claude-plugin/plugin.json fehlt"
218
+ issues=$((issues + 1))
219
+ else
220
+ plugin_version=$(python3 -c "import json; print(json.load(open('$plugin_file')).get('version', 'unset'))")
221
+ skill_version=$(grep -oE 'Version:\*\* v?[0-9]+\.[0-9]+\.[0-9]+' "$SKILL_DIR/README.md" 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
222
+ if [[ -z "$skill_version" ]]; then
223
+ skill_version=$(grep -oE '^## \[[0-9]+\.[0-9]+\.[0-9]+\]' "$SKILL_DIR/CHANGELOG.md" 2>/dev/null | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
224
+ fi
225
+ if [[ "$plugin_version" == "$skill_version" ]]; then
226
+ echo " ✓ plugin.json v$plugin_version == README v$skill_version"
227
+ else
228
+ echo " ✗ Version-Mismatch: plugin.json=v$plugin_version, README/CHANGELOG=v$skill_version"
229
+ issues=$((issues + 1))
230
+ fi
231
+ fi
232
+
233
+ # 10. settings.json WebFetch-Allowlist >= 30 Tier-1 Domains
234
+ echo "10/10 settings.json WebFetch-Allowlist…"
235
+ settings_file="$SKILL_DIR/settings.json"
236
+ if [[ ! -f "$settings_file" ]]; then
237
+ echo " ✗ settings.json fehlt"
238
+ issues=$((issues + 1))
239
+ else
240
+ domains_count=$(python3 -c "
241
+ import json
242
+ with open('$settings_file') as f:
243
+ data = json.load(f)
244
+ allowlist = data.get('permissions', {}).get('allow', [])
245
+ print(sum(1 for p in allowlist if p.startswith('WebFetch(domain:')))
246
+ ")
247
+ if [[ "$domains_count" -ge "30" ]]; then
248
+ echo " ✓ $domains_count Tier-1/2-Domains in Allowlist"
249
+ else
250
+ echo " ✗ Nur $domains_count Domains — Mindest-Erwartung 30 Tier-1/2-Quellen"
251
+ issues=$((issues + 1))
252
+ fi
253
+ fi
254
+
255
+ echo
256
+ if [[ "$issues" == "0" ]]; then
257
+ echo "✓ Health-Check passed — Skill ist konsistent."
258
+ exit 0
259
+ else
260
+ echo "✗ Health-Check failed — $issues Issues gefunden."
261
+ exit 1
262
+ fi
@@ -0,0 +1,145 @@
1
+ #!/usr/bin/env bash
2
+ # brutaler-anwalt — Trigger-Regression-Test.
3
+ # Usage: bash scripts/test-triggers.sh
4
+ # Exit: 0 alle Tests pass · 1 mindestens ein Test fail
5
+
6
+ set -euo pipefail
7
+
8
+ SKILL_DIR="$(cd "$(dirname "$0")/.." && pwd)"
9
+ HOOK="$SKILL_DIR/hooks/prompt_submit.py"
10
+
11
+ echo "▎ brutaler-anwalt Trigger-Regression-Test"
12
+ echo "▎ Hook: $HOOK"
13
+ echo
14
+
15
+ if [[ ! -x "$HOOK" ]]; then
16
+ echo "✗ Hook nicht executable: $HOOK"
17
+ exit 1
18
+ fi
19
+
20
+ failed=0
21
+ passed=0
22
+
23
+ # Test-Sample-Format: "prompt|expected_triggers (comma-separated)"
24
+ declare -a TESTS=(
25
+ "Bitte prüfe die DSGVO-Datenschutzerklärung|dsgvo-core"
26
+ "Cookie-Banner-Audit für unsere App|cookie-tdddg"
27
+ "Pruefe Impressum gegen DDG|impressum-ddg"
28
+ "AGB B2C Pruefung|agb-vertragsrecht"
29
+ "wie sieht es mit UWG-Abmahnung aus?|uwg-abmahnung"
30
+ "AI-Act Compliance fuer unser ML-Modell|ai-act-ki"
31
+ "DSA Plattformhaftung pruefen|dsa-platform"
32
+ "NIS2 Kritische Infrastruktur Compliance|nis2-bsig"
33
+ "Datenpannenschadensersatz nach 202a StGB|strafrecht-it"
34
+ "GoBD Aufbewahrungsfrist 10 Jahre|gobd-steuerrecht"
35
+ "Arzt-Praxis Patientendaten Art 9|branchen-heilberuf,dsgvo-core"
36
+ "Spa Behandlungs-Einwilligung|branchen-spa-wellness"
37
+ "MiCA Crypto BaFin Pruefung|branchen-finance"
38
+ "FernUSG Online-Kurs|branchen-edtech"
39
+ "Online-Casino GlueStV Compliance|branchen-gluecksspiel"
40
+ "DiGA MDR Konformitaet|branchen-medtech-diga"
41
+ "Marketplace UGC Public-Profile|ugc-marketplace"
42
+ "CCPA Drittlandtransfer|international-transfer"
43
+ "BGH I ZR 113/20 Smartlaw verifizieren|az-lookup"
44
+ "File-Upload SVG-XSS Compliance|file-upload-compliance"
45
+ "AEGIS Scanner Findings auswerten|aegis-integration"
46
+ "Abmahn-Simulation Streitwert|abmahn-simulate"
47
+ "Newsletter Double-Opt-In pruefen|newsletter-doi-werbung"
48
+ "bcrypt MFA Audit-Log Sicherheit|auth-flow-security"
49
+ "CSP-Header Permissions-Policy|csp-headers"
50
+ "VVT Verarbeitungsverzeichnis erstellen|verarbeitungsverzeichnis"
51
+ "DSFA DPIA Hochrisiko|dsfa-pia"
52
+ "BFSG Barrierefreiheit WCAG|bfsg-barrierefreiheit"
53
+ "EUDR Kaffee-Lieferkette Geolocation|eudr-deforestation"
54
+ "LkSG BAFA Lieferkette|lksg-lieferkette"
55
+ "Data Act IoT Cloud-Switching|data-act-iot"
56
+ "CRA Cyber Resilience SBOM|cra-cyber-resilience"
57
+ "EHDS Patientenakte MyHealth|ehds-health-data"
58
+ "AI Act Art 5 Social Scoring|ai-act-verboten"
59
+ "Hochrisiko-KI Annex III Bewerberauswahl|ai-act-hochrisiko"
60
+ "GPAI Foundation Model OpenAI|ai-act-gpai"
61
+ "Chatbot-Kennzeichnung AI Content Label|ai-act-transparenz"
62
+ )
63
+
64
+ # Non-Audit-Prompt sollte NICHT triggern
65
+ declare -a NEGATIVE_TESTS=(
66
+ "Hello world, just chatting"
67
+ "Wie spaet ist es?"
68
+ "Bitte uebersetze das Wort Apple ins Italienische"
69
+ )
70
+
71
+ echo "=== POSITIVE TESTS (Trigger sollen feuern) ==="
72
+ for entry in "${TESTS[@]}"; do
73
+ prompt="${entry%|*}"
74
+ expected="${entry#*|}"
75
+
76
+ output=$(printf '%s' "$prompt" | python3 -c "
77
+ import json, sys
78
+ prompt = sys.stdin.read()
79
+ print(json.dumps({'prompt': prompt}))
80
+ " | python3 "$HOOK" 2>/dev/null || echo "")
81
+
82
+ if [[ -z "$output" ]]; then
83
+ echo " ✗ FAIL [$prompt] — kein Trigger feuerte, erwartet '$expected'"
84
+ failed=$((failed + 1))
85
+ continue
86
+ fi
87
+
88
+ fired=$(echo "$output" | python3 -c "
89
+ import json, sys
90
+ try:
91
+ d = json.load(sys.stdin)
92
+ ctx = d['hookSpecificOutput']['additionalContext']
93
+ for line in ctx.splitlines():
94
+ if line.startswith('Trigger gefeuert:'):
95
+ print(line.replace('Trigger gefeuert:', '').strip())
96
+ break
97
+ except Exception:
98
+ pass
99
+ " 2>/dev/null)
100
+
101
+ missing=()
102
+ for exp_trig in $(echo "$expected" | tr ',' ' '); do
103
+ if ! echo "$fired" | grep -qE "\\b$exp_trig\\b"; then
104
+ missing+=("$exp_trig")
105
+ fi
106
+ done
107
+
108
+ if [[ ${#missing[@]} -eq 0 ]]; then
109
+ passed=$((passed + 1))
110
+ else
111
+ echo " ✗ FAIL [$prompt]"
112
+ echo " fired: $fired"
113
+ echo " missing: ${missing[*]}"
114
+ failed=$((failed + 1))
115
+ fi
116
+ done
117
+
118
+ echo
119
+ echo "=== NEGATIVE TESTS (NICHT triggern) ==="
120
+ for prompt in "${NEGATIVE_TESTS[@]}"; do
121
+ output=$(printf '%s' "$prompt" | python3 -c "
122
+ import json, sys
123
+ print(json.dumps({'prompt': sys.stdin.read()}))
124
+ " | python3 "$HOOK" 2>/dev/null || echo "")
125
+
126
+ if [[ -z "$output" ]]; then
127
+ passed=$((passed + 1))
128
+ else
129
+ echo " ✗ FAIL [$prompt] — Trigger feuerte (sollte stumm sein):"
130
+ echo " $output" | head -3
131
+ failed=$((failed + 1))
132
+ fi
133
+ done
134
+
135
+ echo
136
+ echo "=== ZUSAMMENFASSUNG ==="
137
+ total=$((passed + failed))
138
+ echo "Total: $total · Passed: $passed · Failed: $failed"
139
+ if [[ "$failed" == "0" ]]; then
140
+ echo "✓ Alle Trigger-Tests bestanden"
141
+ exit 0
142
+ else
143
+ echo "✗ $failed Trigger-Tests fehlgeschlagen"
144
+ exit 1
145
+ fi