claudient 0.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.
Files changed (283) hide show
  1. package/.claude-plugin/plugin.json +42 -0
  2. package/CONTEXT.md +58 -0
  3. package/README.md +165 -0
  4. package/agents/build-resolvers/de/python-resolver.md +64 -0
  5. package/agents/build-resolvers/de/typescript-resolver.md +65 -0
  6. package/agents/build-resolvers/es/python-resolver.md +64 -0
  7. package/agents/build-resolvers/es/typescript-resolver.md +65 -0
  8. package/agents/build-resolvers/fr/python-resolver.md +64 -0
  9. package/agents/build-resolvers/fr/typescript-resolver.md +65 -0
  10. package/agents/build-resolvers/nl/python-resolver.md +64 -0
  11. package/agents/build-resolvers/nl/typescript-resolver.md +65 -0
  12. package/agents/build-resolvers/python-resolver.md +62 -0
  13. package/agents/build-resolvers/typescript-resolver.md +63 -0
  14. package/agents/core/architect.md +64 -0
  15. package/agents/core/code-reviewer.md +78 -0
  16. package/agents/core/de/architect.md +66 -0
  17. package/agents/core/de/code-reviewer.md +80 -0
  18. package/agents/core/de/planner.md +63 -0
  19. package/agents/core/de/security-reviewer.md +93 -0
  20. package/agents/core/es/architect.md +66 -0
  21. package/agents/core/es/code-reviewer.md +80 -0
  22. package/agents/core/es/planner.md +63 -0
  23. package/agents/core/es/security-reviewer.md +93 -0
  24. package/agents/core/fr/architect.md +66 -0
  25. package/agents/core/fr/code-reviewer.md +80 -0
  26. package/agents/core/fr/planner.md +63 -0
  27. package/agents/core/fr/security-reviewer.md +93 -0
  28. package/agents/core/nl/architect.md +66 -0
  29. package/agents/core/nl/code-reviewer.md +80 -0
  30. package/agents/core/nl/planner.md +63 -0
  31. package/agents/core/nl/security-reviewer.md +93 -0
  32. package/agents/core/planner.md +61 -0
  33. package/agents/core/security-reviewer.md +91 -0
  34. package/guides/agent-orchestration.md +231 -0
  35. package/guides/de/agent-orchestration.md +174 -0
  36. package/guides/de/getting-started.md +164 -0
  37. package/guides/de/hooks-cookbook.md +160 -0
  38. package/guides/de/memory-management.md +153 -0
  39. package/guides/de/security.md +180 -0
  40. package/guides/de/skill-authoring.md +214 -0
  41. package/guides/de/token-optimization.md +156 -0
  42. package/guides/es/agent-orchestration.md +174 -0
  43. package/guides/es/getting-started.md +164 -0
  44. package/guides/es/hooks-cookbook.md +160 -0
  45. package/guides/es/memory-management.md +153 -0
  46. package/guides/es/security.md +180 -0
  47. package/guides/es/skill-authoring.md +214 -0
  48. package/guides/es/token-optimization.md +156 -0
  49. package/guides/fr/agent-orchestration.md +174 -0
  50. package/guides/fr/getting-started.md +164 -0
  51. package/guides/fr/hooks-cookbook.md +227 -0
  52. package/guides/fr/memory-management.md +169 -0
  53. package/guides/fr/security.md +180 -0
  54. package/guides/fr/skill-authoring.md +214 -0
  55. package/guides/fr/token-optimization.md +158 -0
  56. package/guides/getting-started.md +164 -0
  57. package/guides/hooks-cookbook.md +423 -0
  58. package/guides/memory-management.md +192 -0
  59. package/guides/nl/agent-orchestration.md +174 -0
  60. package/guides/nl/getting-started.md +164 -0
  61. package/guides/nl/hooks-cookbook.md +160 -0
  62. package/guides/nl/memory-management.md +153 -0
  63. package/guides/nl/security.md +180 -0
  64. package/guides/nl/skill-authoring.md +214 -0
  65. package/guides/nl/token-optimization.md +156 -0
  66. package/guides/security.md +229 -0
  67. package/guides/skill-authoring.md +226 -0
  68. package/guides/token-optimization.md +169 -0
  69. package/hooks/lifecycle/cost-tracker.md +49 -0
  70. package/hooks/lifecycle/cost-tracker.sh +59 -0
  71. package/hooks/lifecycle/pre-compact-save.md +56 -0
  72. package/hooks/lifecycle/pre-compact-save.sh +37 -0
  73. package/hooks/lifecycle/session-start.md +50 -0
  74. package/hooks/lifecycle/session-start.sh +47 -0
  75. package/hooks/post-tool-use/audit-log.md +53 -0
  76. package/hooks/post-tool-use/audit-log.sh +53 -0
  77. package/hooks/post-tool-use/prettier.md +53 -0
  78. package/hooks/post-tool-use/prettier.sh +49 -0
  79. package/hooks/pre-tool-use/block-dangerous.md +48 -0
  80. package/hooks/pre-tool-use/block-dangerous.sh +76 -0
  81. package/hooks/pre-tool-use/git-push-confirm.md +46 -0
  82. package/hooks/pre-tool-use/git-push-confirm.sh +36 -0
  83. package/mcp/configs/github.json +11 -0
  84. package/mcp/configs/postgres.json +11 -0
  85. package/mcp/de/recommended-servers.md +170 -0
  86. package/mcp/es/recommended-servers.md +170 -0
  87. package/mcp/fr/recommended-servers.md +170 -0
  88. package/mcp/nl/recommended-servers.md +170 -0
  89. package/mcp/recommended-servers.md +168 -0
  90. package/package.json +45 -0
  91. package/prompts/project-starters/de/fastapi-project.md +62 -0
  92. package/prompts/project-starters/de/nextjs-project.md +82 -0
  93. package/prompts/project-starters/es/fastapi-project.md +62 -0
  94. package/prompts/project-starters/es/nextjs-project.md +82 -0
  95. package/prompts/project-starters/fastapi-project.md +60 -0
  96. package/prompts/project-starters/fr/fastapi-project.md +62 -0
  97. package/prompts/project-starters/fr/nextjs-project.md +82 -0
  98. package/prompts/project-starters/nextjs-project.md +80 -0
  99. package/prompts/project-starters/nl/fastapi-project.md +62 -0
  100. package/prompts/project-starters/nl/nextjs-project.md +82 -0
  101. package/prompts/system-prompts/ai-product.md +80 -0
  102. package/prompts/system-prompts/data-pipeline.md +76 -0
  103. package/prompts/system-prompts/de/ai-product.md +82 -0
  104. package/prompts/system-prompts/de/data-pipeline.md +78 -0
  105. package/prompts/system-prompts/de/saas-backend.md +71 -0
  106. package/prompts/system-prompts/es/ai-product.md +82 -0
  107. package/prompts/system-prompts/es/data-pipeline.md +78 -0
  108. package/prompts/system-prompts/es/saas-backend.md +71 -0
  109. package/prompts/system-prompts/fr/ai-product.md +82 -0
  110. package/prompts/system-prompts/fr/data-pipeline.md +78 -0
  111. package/prompts/system-prompts/fr/saas-backend.md +71 -0
  112. package/prompts/system-prompts/nl/ai-product.md +82 -0
  113. package/prompts/system-prompts/nl/data-pipeline.md +78 -0
  114. package/prompts/system-prompts/nl/saas-backend.md +71 -0
  115. package/prompts/system-prompts/saas-backend.md +69 -0
  116. package/prompts/task-specific/changelog.md +81 -0
  117. package/prompts/task-specific/de/changelog.md +83 -0
  118. package/prompts/task-specific/de/debugging.md +78 -0
  119. package/prompts/task-specific/de/pr-description.md +69 -0
  120. package/prompts/task-specific/debugging.md +76 -0
  121. package/prompts/task-specific/es/changelog.md +83 -0
  122. package/prompts/task-specific/es/debugging.md +78 -0
  123. package/prompts/task-specific/es/pr-description.md +69 -0
  124. package/prompts/task-specific/fr/changelog.md +83 -0
  125. package/prompts/task-specific/fr/debugging.md +78 -0
  126. package/prompts/task-specific/fr/pr-description.md +69 -0
  127. package/prompts/task-specific/nl/changelog.md +83 -0
  128. package/prompts/task-specific/nl/debugging.md +78 -0
  129. package/prompts/task-specific/nl/pr-description.md +69 -0
  130. package/prompts/task-specific/pr-description.md +67 -0
  131. package/rules/common/coding-style.md +45 -0
  132. package/rules/common/de/coding-style.md +47 -0
  133. package/rules/common/de/git.md +48 -0
  134. package/rules/common/de/performance.md +40 -0
  135. package/rules/common/de/security.md +45 -0
  136. package/rules/common/de/testing.md +45 -0
  137. package/rules/common/es/coding-style.md +47 -0
  138. package/rules/common/es/git.md +48 -0
  139. package/rules/common/es/performance.md +40 -0
  140. package/rules/common/es/security.md +45 -0
  141. package/rules/common/es/testing.md +45 -0
  142. package/rules/common/fr/coding-style.md +47 -0
  143. package/rules/common/fr/git.md +48 -0
  144. package/rules/common/fr/performance.md +40 -0
  145. package/rules/common/fr/security.md +45 -0
  146. package/rules/common/fr/testing.md +45 -0
  147. package/rules/common/git.md +46 -0
  148. package/rules/common/nl/coding-style.md +47 -0
  149. package/rules/common/nl/git.md +48 -0
  150. package/rules/common/nl/performance.md +40 -0
  151. package/rules/common/nl/security.md +45 -0
  152. package/rules/common/nl/testing.md +45 -0
  153. package/rules/common/performance.md +38 -0
  154. package/rules/common/security.md +43 -0
  155. package/rules/common/testing.md +43 -0
  156. package/rules/language-specific/de/go.md +48 -0
  157. package/rules/language-specific/de/python.md +38 -0
  158. package/rules/language-specific/de/typescript.md +51 -0
  159. package/rules/language-specific/es/go.md +48 -0
  160. package/rules/language-specific/es/python.md +38 -0
  161. package/rules/language-specific/es/typescript.md +51 -0
  162. package/rules/language-specific/fr/go.md +48 -0
  163. package/rules/language-specific/fr/python.md +38 -0
  164. package/rules/language-specific/fr/typescript.md +51 -0
  165. package/rules/language-specific/go.md +46 -0
  166. package/rules/language-specific/nl/go.md +48 -0
  167. package/rules/language-specific/nl/python.md +38 -0
  168. package/rules/language-specific/nl/typescript.md +51 -0
  169. package/rules/language-specific/python.md +36 -0
  170. package/rules/language-specific/typescript.md +49 -0
  171. package/scripts/cli.js +161 -0
  172. package/scripts/link-skills.sh +35 -0
  173. package/scripts/list-skills.sh +34 -0
  174. package/skills/ai-engineering/agent-construction.md +285 -0
  175. package/skills/ai-engineering/claude-api.md +248 -0
  176. package/skills/ai-engineering/de/agent-construction.md +287 -0
  177. package/skills/ai-engineering/de/claude-api.md +250 -0
  178. package/skills/ai-engineering/es/agent-construction.md +287 -0
  179. package/skills/ai-engineering/es/claude-api.md +250 -0
  180. package/skills/ai-engineering/fr/agent-construction.md +287 -0
  181. package/skills/ai-engineering/fr/claude-api.md +250 -0
  182. package/skills/ai-engineering/nl/agent-construction.md +287 -0
  183. package/skills/ai-engineering/nl/claude-api.md +250 -0
  184. package/skills/backend/dotnet/csharp.md +304 -0
  185. package/skills/backend/dotnet/de/csharp.md +306 -0
  186. package/skills/backend/dotnet/es/csharp.md +306 -0
  187. package/skills/backend/dotnet/fr/csharp.md +306 -0
  188. package/skills/backend/dotnet/nl/csharp.md +306 -0
  189. package/skills/backend/go/de/go.md +307 -0
  190. package/skills/backend/go/es/go.md +307 -0
  191. package/skills/backend/go/fr/go.md +307 -0
  192. package/skills/backend/go/go.md +305 -0
  193. package/skills/backend/go/nl/go.md +307 -0
  194. package/skills/backend/nodejs/de/nestjs.md +274 -0
  195. package/skills/backend/nodejs/de/nextjs.md +222 -0
  196. package/skills/backend/nodejs/es/nestjs.md +274 -0
  197. package/skills/backend/nodejs/es/nextjs.md +222 -0
  198. package/skills/backend/nodejs/fr/nestjs.md +274 -0
  199. package/skills/backend/nodejs/fr/nextjs.md +222 -0
  200. package/skills/backend/nodejs/nestjs.md +272 -0
  201. package/skills/backend/nodejs/nextjs.md +220 -0
  202. package/skills/backend/nodejs/nl/nestjs.md +274 -0
  203. package/skills/backend/nodejs/nl/nextjs.md +222 -0
  204. package/skills/backend/python/de/django.md +285 -0
  205. package/skills/backend/python/de/fastapi.md +244 -0
  206. package/skills/backend/python/django.md +283 -0
  207. package/skills/backend/python/es/django.md +285 -0
  208. package/skills/backend/python/es/fastapi.md +244 -0
  209. package/skills/backend/python/fastapi.md +242 -0
  210. package/skills/backend/python/fr/django.md +285 -0
  211. package/skills/backend/python/fr/fastapi.md +244 -0
  212. package/skills/backend/python/nl/django.md +285 -0
  213. package/skills/backend/python/nl/fastapi.md +244 -0
  214. package/skills/data-ml/dbt-data-pipelines.md +155 -0
  215. package/skills/data-ml/de/dbt-data-pipelines.md +157 -0
  216. package/skills/data-ml/de/pandas-polars.md +147 -0
  217. package/skills/data-ml/de/pytorch-tensorflow.md +171 -0
  218. package/skills/data-ml/es/dbt-data-pipelines.md +157 -0
  219. package/skills/data-ml/es/pandas-polars.md +147 -0
  220. package/skills/data-ml/es/pytorch-tensorflow.md +171 -0
  221. package/skills/data-ml/fr/dbt-data-pipelines.md +157 -0
  222. package/skills/data-ml/fr/pandas-polars.md +147 -0
  223. package/skills/data-ml/fr/pytorch-tensorflow.md +171 -0
  224. package/skills/data-ml/nl/dbt-data-pipelines.md +157 -0
  225. package/skills/data-ml/nl/pandas-polars.md +147 -0
  226. package/skills/data-ml/nl/pytorch-tensorflow.md +171 -0
  227. package/skills/data-ml/pandas-polars.md +145 -0
  228. package/skills/data-ml/pytorch-tensorflow.md +169 -0
  229. package/skills/database/de/graphql.md +181 -0
  230. package/skills/database/es/graphql.md +181 -0
  231. package/skills/database/fr/graphql.md +181 -0
  232. package/skills/database/graphql.md +179 -0
  233. package/skills/database/nl/graphql.md +181 -0
  234. package/skills/devops-infra/de/docker.md +133 -0
  235. package/skills/devops-infra/de/github-actions.md +179 -0
  236. package/skills/devops-infra/de/kubernetes.md +129 -0
  237. package/skills/devops-infra/de/terraform.md +130 -0
  238. package/skills/devops-infra/docker.md +131 -0
  239. package/skills/devops-infra/es/docker.md +133 -0
  240. package/skills/devops-infra/es/github-actions.md +179 -0
  241. package/skills/devops-infra/es/kubernetes.md +129 -0
  242. package/skills/devops-infra/es/terraform.md +130 -0
  243. package/skills/devops-infra/fr/docker.md +133 -0
  244. package/skills/devops-infra/fr/github-actions.md +179 -0
  245. package/skills/devops-infra/fr/kubernetes.md +129 -0
  246. package/skills/devops-infra/fr/terraform.md +130 -0
  247. package/skills/devops-infra/github-actions.md +177 -0
  248. package/skills/devops-infra/kubernetes.md +127 -0
  249. package/skills/devops-infra/nl/docker.md +133 -0
  250. package/skills/devops-infra/nl/github-actions.md +179 -0
  251. package/skills/devops-infra/nl/kubernetes.md +129 -0
  252. package/skills/devops-infra/nl/terraform.md +130 -0
  253. package/skills/devops-infra/terraform.md +128 -0
  254. package/skills/finance-payments/de/stripe.md +187 -0
  255. package/skills/finance-payments/es/stripe.md +187 -0
  256. package/skills/finance-payments/fr/stripe.md +187 -0
  257. package/skills/finance-payments/nl/stripe.md +187 -0
  258. package/skills/finance-payments/stripe.md +185 -0
  259. package/workflows/code-review.md +151 -0
  260. package/workflows/de/code-review.md +153 -0
  261. package/workflows/de/debugging-session.md +146 -0
  262. package/workflows/de/feature-development.md +155 -0
  263. package/workflows/de/new-project-bootstrap.md +175 -0
  264. package/workflows/de/refactor-safely.md +150 -0
  265. package/workflows/debugging-session.md +144 -0
  266. package/workflows/es/code-review.md +153 -0
  267. package/workflows/es/debugging-session.md +146 -0
  268. package/workflows/es/feature-development.md +155 -0
  269. package/workflows/es/new-project-bootstrap.md +175 -0
  270. package/workflows/es/refactor-safely.md +150 -0
  271. package/workflows/feature-development.md +153 -0
  272. package/workflows/fr/code-review.md +153 -0
  273. package/workflows/fr/debugging-session.md +146 -0
  274. package/workflows/fr/feature-development.md +155 -0
  275. package/workflows/fr/new-project-bootstrap.md +175 -0
  276. package/workflows/fr/refactor-safely.md +150 -0
  277. package/workflows/new-project-bootstrap.md +173 -0
  278. package/workflows/nl/code-review.md +153 -0
  279. package/workflows/nl/debugging-session.md +146 -0
  280. package/workflows/nl/feature-development.md +155 -0
  281. package/workflows/nl/new-project-bootstrap.md +175 -0
  282. package/workflows/nl/refactor-safely.md +150 -0
  283. package/workflows/refactor-safely.md +148 -0
@@ -0,0 +1,45 @@
1
+ > 🇫🇷 This is the French translation. [English version](../security.md).
2
+
3
+ # Règles de Sécurité
4
+
5
+ Copiez les sections pertinentes dans le `CLAUDE.md` de votre projet.
6
+
7
+ ---
8
+
9
+ ## Secrets
10
+
11
+ - Ne jamais mettre des secrets dans le code source — ni dans les commentaires, ni dans les fichiers de test, ni dans les configurations d'exemple
12
+ - Ne jamais logger des secrets — vérifier que les appels de logger n'incluent pas des champs `password`, `token`, `key`, `secret`, ou `credential`
13
+ - Utiliser des variables d'environnement pour tous les secrets ; les lire au démarrage, valider leur existence
14
+ - Faire tourner les secrets qui ont été accidentellement committés — traiter tout secret commité comme compromis
15
+
16
+ ## Validation des entrées
17
+
18
+ - Valider toutes les entrées aux frontières du système : paramètres API, chaînes de requête, corps de requête, uploads de fichiers, variables d'environnement
19
+ - Valider le type, le format, la longueur et la plage — pas seulement la présence
20
+ - Utiliser une liste d'autorisation (valeurs valides) plutôt qu'une liste de refus (valeurs bloquées) quand c'est possible
21
+ - Ne jamais utiliser les entrées utilisateur directement dans des requêtes SQL, des commandes shell, des chemins de fichiers, ou du HTML sans assainissement
22
+
23
+ ## Authentification et autorisation
24
+
25
+ - Vérifier l'authentification sur chaque requête qui le requiert — ne jamais se fier au routage frontend
26
+ - Vérifier l'autorisation (l'utilisateur peut faire CETTE action) séparément de l'authentification (l'utilisateur est connecté)
27
+ - Les vérifications d'autorisation doivent référencer l'utilisateur authentifié depuis le contexte de requête — jamais depuis un paramètre de requête
28
+ - L'expiration des tokens doit être appliquée côté serveur — ne jamais faire confiance aux timestamps de tokens fournis par le client
29
+
30
+ ## Bases de données
31
+
32
+ - Utiliser des requêtes paramétrées ou un ORM — ne jamais concaténer du SQL sous forme de chaîne
33
+ - Les utilisateurs de base de données doivent avoir les permissions minimales requises — l'utilisateur de l'app ne doit pas avoir accès au DDL
34
+ - Ne jamais exposer les erreurs internes de la base de données aux clients — logger côté serveur, retourner une erreur générique au client
35
+
36
+ ## Dépendances
37
+
38
+ - Épingler les versions des dépendances — ne jamais utiliser `*` ou `latest` en production
39
+ - Exécuter `npm audit` / `pip-audit` / `govulncheck` avant chaque release
40
+ - Supprimer les dépendances inutilisées — chaque dépendance est une surface d'attaque potentielle
41
+ - Vérifier la source des nouvelles dépendances avant de les ajouter
42
+
43
+ ---
44
+
45
+ > **Travaillez avec nous :** Claudient est soutenu par [Uitbreiden](https://uitbreiden.com/) — nous construisons des produits IA et des solutions B2B avec des communautés de développeurs. [uitbreiden.com](https://uitbreiden.com/)
@@ -0,0 +1,45 @@
1
+ > 🇫🇷 This is the French translation. [English version](../testing.md).
2
+
3
+ # Règles de Tests
4
+
5
+ Copiez les sections pertinentes dans le `CLAUDE.md` de votre projet.
6
+
7
+ ---
8
+
9
+ ## Ce qu'il faut tester
10
+
11
+ - Tester le comportement via les APIs publiques — pas les détails d'implémentation internes
12
+ - Les tests doivent survivre au refactoring : si renommer une fonction privée casse les tests, les tests sont incorrects
13
+ - Tester les cas limites : entrées null/vides, valeurs aux bornes, chemins d'erreur
14
+ - Ne pas tester le code du framework ou les builtins du langage
15
+
16
+ ## Structure des tests
17
+
18
+ - Une assertion logique par test — si un test vérifie plusieurs choses non liées, le diviser
19
+ - Les noms de tests décrivent CE QUE fait le système, pas COMMENT : `"returns 404 when user not found"` pas `"test findUser"`
20
+ - Arrange → Act → Assert — un bloc chacun, sans interleaving
21
+ - Pas de logique conditionnelle dans les tests — si vous avez besoin d'un `if`, écrire deux tests
22
+
23
+ ## Mocking
24
+
25
+ - Ne pas mocker les modules internes — mocker uniquement aux frontières du système (APIs externes, bases de données, système de fichiers)
26
+ - Ne jamais mocker la classe/module en cours de test
27
+ - Les tests d'intégration doivent toucher la vraie base de données — utiliser une base de données de test, pas des mocks
28
+ - Si un test unitaire nécessite 5+ mocks, le code n'est probablement pas bien structuré
29
+
30
+ ## Couverture
31
+
32
+ - La couverture est un plancher, pas une cible — 80% de couverture avec de mauvais tests est pire que 60% avec de bons tests
33
+ - Chaque nouvelle fonctionnalité nécessite au moins un test de chemin heureux et un test de chemin d'erreur
34
+ - Chaque correction de bug nécessite un test de régression qui aurait détecté le bug
35
+
36
+ ## Données de test
37
+
38
+ - Utiliser des factories ou des fixtures — ne jamais coder en dur des IDs d'utilisateurs, des emails ou des UUIDs dans les tests
39
+ - Les tests doivent être isolés — pas d'état mutable partagé entre les tests
40
+ - Les tests doivent être déterministes — pas de données aléatoires, pas d'assertions dépendantes du temps sans mocker l'horloge
41
+ - Nettoyer après chaque test — tronquer les tables, réinitialiser les mocks, supprimer les fichiers créés
42
+
43
+ ---
44
+
45
+ > **Travaillez avec nous :** Claudient est soutenu par [Uitbreiden](https://uitbreiden.com/) — nous construisons des produits IA et des solutions B2B avec des communautés de développeurs. [uitbreiden.com](https://uitbreiden.com/)
@@ -0,0 +1,46 @@
1
+ # Git Rules
2
+
3
+ Copy the relevant sections into your project's `CLAUDE.md`.
4
+
5
+ ---
6
+
7
+ ## Commit messages
8
+
9
+ - Format: `type: short description` (imperative mood, ≤ 72 chars)
10
+ - Types: `feat`, `fix`, `docs`, `refactor`, `test`, `chore`, `perf`
11
+ - Examples: `feat: add webhook signature verification`, `fix: handle null user in auth middleware`
12
+ - No generic messages: "update", "changes", "fix bug", "wip" are not acceptable
13
+ - Body (optional): explain WHY, not what. The diff shows what.
14
+
15
+ ## Branches
16
+
17
+ - Feature branches: `feat/short-description`
18
+ - Bug fixes: `fix/short-description`
19
+ - Never commit directly to `main` or `master`
20
+ - Delete branches after merge
21
+
22
+ ## What never to commit
23
+
24
+ - `.env` files or any file containing secrets
25
+ - `node_modules/`, `__pycache__/`, build artifacts
26
+ - Personal editor settings (`.idea/`, `.vscode/settings.json`)
27
+ - Files > 10MB (use git-lfs or external storage)
28
+ - Generated files that can be reproduced from source
29
+
30
+ ## Before pushing
31
+
32
+ - Run tests locally — never push red
33
+ - Review your own diff before every push: `git diff origin/main...HEAD`
34
+ - Squash WIP commits before pushing to a shared branch
35
+ - Never force-push to `main` or any shared branch
36
+
37
+ ## Dangerous commands — always confirm before running
38
+
39
+ - `git reset --hard` — destroys uncommitted changes permanently
40
+ - `git clean -f` — deletes untracked files permanently
41
+ - `git push --force` — rewrites remote history
42
+ - `git stash drop` — permanently discards stashed changes
43
+
44
+ ---
45
+
46
+ > **Work with us:** Claudient is backed by [Uitbreiden](https://uitbreiden.com/) — we build AI products and B2B solutions with developer communities. [uitbreiden.com](https://uitbreiden.com/)
@@ -0,0 +1,47 @@
1
+ > 🇳🇱 Dit is de Nederlandse vertaling. [Engelse versie](../coding-style.md).
2
+
3
+ # Codeerstijlregels
4
+
5
+ Kopieer de relevante secties naar de `CLAUDE.md` van je project.
6
+
7
+ ---
8
+
9
+ ## Naamgeving
10
+
11
+ - Variabelen en functies: `camelCase` (JS/TS), `snake_case` (Python, Go, Rust)
12
+ - Klassen en typen: `PascalCase` in alle talen
13
+ - Constanten: `SCREAMING_SNAKE_CASE` alleen voor echte constanten die nooit veranderen
14
+ - Booleaanse variabelen: voorvoegsel met `is`, `has`, `can`, `should` — `isActive`, `hasPermission`
15
+ - Verkort namen niet tenzij de afkorting universeel bekend is (`id`, `url`, `db`, `ctx`)
16
+
17
+ ## Functies
18
+
19
+ - Één verantwoordelijkheid per functie — als je "en" nodig hebt in de beschrijving, splits dan
20
+ - Maximaal 40 regels per functie; als langer, extraheer subfuncties
21
+ - Geen booleaanse parameters — gebruik een opties-object of twee afzonderlijke functies
22
+ - Keer vroeg terug voor bewakende clausules — nest het gelukkige pad niet in conditionals
23
+
24
+ ## Opmerkingen
25
+
26
+ - Schrijf geen opmerkingen tenzij het WAAROM niet vanzelfsprekend is
27
+ - Schrijf nooit opmerkingen die beschrijven wat de code doet (de code doet dat al)
28
+ - Schrijf een opmerking wanneer: er een verborgen beperking is, een workaround voor een specifieke bug, of gedrag dat een lezer zou verrassen
29
+ - Schrijf nooit TODO-opmerkingen — maak in plaats daarvan een bijgehouden issue aan
30
+
31
+ ## Foutafhandeling
32
+
33
+ - Slik fouten nooit stilletjes in (`catch (e) {}` is altijd fout)
34
+ - Behandel fouten altijd op de grens waar je actie kunt ondernemen
35
+ - Geef fouten naar boven door met context — wikkel in met de relevante ID of operatienaam
36
+ - Gebruik geen `console.error` in productiecode — gebruik de logger van het project
37
+
38
+ ## Bestandsorganisatie
39
+
40
+ - Één primaire export per bestand
41
+ - Bestandsnamen komen overeen met hun primaire export: `UserService.ts` exporteert `UserService`
42
+ - Geen barrel-bestanden (`index.ts` re-exports) — importeer direct vanuit het bronbestand
43
+ - Groepeer imports: externe packages eerst, dan interne modules, dan relatieve imports
44
+
45
+ ---
46
+
47
+ > **Werk met ons:** Claudient wordt ondersteund door [Uitbreiden](https://uitbreiden.com/) — we bouwen AI-producten en B2B-oplossingen met ontwikkelaarsgemeenschappen. [uitbreiden.com](https://uitbreiden.com/)
@@ -0,0 +1,48 @@
1
+ > 🇳🇱 Dit is de Nederlandse vertaling. [Engelse versie](../git.md).
2
+
3
+ # Git-regels
4
+
5
+ Kopieer de relevante secties naar de `CLAUDE.md` van je project.
6
+
7
+ ---
8
+
9
+ ## Commit-berichten
10
+
11
+ - Formaat: `type: korte beschrijving` (gebiedende wijs, ≤ 72 tekens)
12
+ - Typen: `feat`, `fix`, `docs`, `refactor`, `test`, `chore`, `perf`
13
+ - Voorbeelden: `feat: add webhook signature verification`, `fix: handle null user in auth middleware`
14
+ - Geen generieke berichten: "update", "changes", "fix bug", "wip" zijn niet acceptabel
15
+ - Berichttekst (optioneel): leg uit WAAROM, niet wat. De diff toont wat.
16
+
17
+ ## Branches
18
+
19
+ - Feature-branches: `feat/korte-beschrijving`
20
+ - Bugfixes: `fix/korte-beschrijving`
21
+ - Commit nooit direct naar `main` of `master`
22
+ - Verwijder branches na merge
23
+
24
+ ## Wat nooit te committen
25
+
26
+ - `.env`-bestanden of bestanden met secrets
27
+ - `node_modules/`, `__pycache__/`, build-artefacten
28
+ - Persoonlijke editorinstellingen (`.idea/`, `.vscode/settings.json`)
29
+ - Bestanden > 10MB (gebruik git-lfs of externe opslag)
30
+ - Gegenereerde bestanden die kunnen worden gereproduceerd vanuit bron
31
+
32
+ ## Voor pushen
33
+
34
+ - Voer tests lokaal uit — push nooit rood
35
+ - Bekijk je eigen diff voor elke push: `git diff origin/main...HEAD`
36
+ - Squash WIP-commits voor push naar een gedeelde branch
37
+ - Force-push nooit naar `main` of een gedeelde branch
38
+
39
+ ## Gevaarlijke commando's — bevestig altijd voor uitvoering
40
+
41
+ - `git reset --hard` — vernietigt niet-gecommitte wijzigingen permanent
42
+ - `git clean -f` — verwijdert niet-gevolgde bestanden permanent
43
+ - `git push --force` — herschrijft de externe geschiedenis
44
+ - `git stash drop` — gooit stashed wijzigingen permanent weg
45
+
46
+ ---
47
+
48
+ > **Werk met ons:** Claudient wordt ondersteund door [Uitbreiden](https://uitbreiden.com/) — we bouwen AI-producten en B2B-oplossingen met ontwikkelaarsgemeenschappen. [uitbreiden.com](https://uitbreiden.com/)
@@ -0,0 +1,40 @@
1
+ > 🇳🇱 Dit is de Nederlandse vertaling. [Engelse versie](../performance.md).
2
+
3
+ # Prestatieregels
4
+
5
+ Kopieer de relevante secties naar de `CLAUDE.md` van je project.
6
+
7
+ ---
8
+
9
+ ## Database
10
+
11
+ - Voer nooit queries uit binnen lussen — batch met `IN (...)` of gebruik een join
12
+ - Pagineer altijd queries die onbegrensde resultaten kunnen retourneren — geen `SELECT *` zonder een `LIMIT`
13
+ - Voeg indexen toe voordat de query traag is in productie, niet daarna — analyseer queryplannen tijdens ontwikkeling
14
+ - Selecteer alleen de kolommen die je nodig hebt — `SELECT *` haalt ongebruikte data op en voorkomt index-only scans
15
+ - Gebruik aggregatie op databaseniveau (`COUNT`, `SUM`, `GROUP BY`) — laad geen rijen in geheugen om ze te tellen
16
+
17
+ ## API en netwerk
18
+
19
+ - Cache antwoorden die duur zijn om te berekenen en zelden veranderen — stel expliciete TTL's in
20
+ - Pagineer lijst-endpoints — retourneer maximaal N items per verzoek met een cursor of offset
21
+ - Maak geen N+1-queries — batch gerelateerde data met DataLoader, `include` of een join
22
+ - Vermijd synchrone aanroepen naar externe services in verzoekhandlers — gebruik wachtrijen voor niet-kritiek werk
23
+ - Stel time-outs in op alle externe HTTP-aanroepen — laat nooit een trage afhankelijkheid je server ophangen
24
+
25
+ ## Geheugen
26
+
27
+ - Laad geen grote datasets in geheugen om ze te verwerken — stream of pagineer
28
+ - Geef referenties vrij wanneer klaar — vermijd onbedoelde closures die garbage collection voorkomen
29
+ - Gebruik generators/iterators voor grote reeksen in plaats van volledige lijsten in geheugen te bouwen
30
+
31
+ ## Meting
32
+
33
+ - Profileer voor optimalisatie — raad nooit waar de bottleneck zit
34
+ - Meet onder productie-achtige omstandigheden — lokale benchmarks zijn misleidend
35
+ - Stel een baseline vast voor het maken van wijzigingen — zonder baseline kun je verbetering niet bevestigen
36
+ - Prestatietests horen in CI thuis — regressie die codereview passeert maar het prestatiebudget misloopt moet automatisch worden gevangen
37
+
38
+ ---
39
+
40
+ > **Werk met ons:** Claudient wordt ondersteund door [Uitbreiden](https://uitbreiden.com/) — we bouwen AI-producten en B2B-oplossingen met ontwikkelaarsgemeenschappen. [uitbreiden.com](https://uitbreiden.com/)
@@ -0,0 +1,45 @@
1
+ > 🇳🇱 Dit is de Nederlandse vertaling. [Engelse versie](../security.md).
2
+
3
+ # Beveiligingsregels
4
+
5
+ Kopieer de relevante secties naar de `CLAUDE.md` van je project.
6
+
7
+ ---
8
+
9
+ ## Secrets
10
+
11
+ - Zet nooit secrets in broncode — niet in opmerkingen, niet in testbestanden, niet in voorbeeldconfiguraties
12
+ - Log nooit secrets — controleer dat loggingaanroepen geen `password`-, `token`-, `key`-, `secret`- of `credential`-velden bevatten
13
+ - Gebruik omgevingsvariabelen voor alle secrets; lees ze bij opstarten, valideer dat ze bestaan
14
+ - Roteer secrets die per ongeluk zijn gecommit — behandel elk gecommit secret als gecompromitteerd
15
+
16
+ ## Invoervalidatie
17
+
18
+ - Valideer alle invoer bij systeemgrenzen: API-parameters, querystrings, aanvraagbodies, bestandsuploads, omgevingsvariabelen
19
+ - Valideer type, formaat, lengte en bereik — niet alleen aanwezigheid
20
+ - Gebruik een allowlist (geldige waarden) in plaats van een denylist (geblokkeerde waarden) waar mogelijk
21
+ - Gebruik nooit gebruikersinvoer direct in SQL-queries, shell-commando's, bestandspaden of HTML zonder sanering
22
+
23
+ ## Authenticatie en autorisatie
24
+
25
+ - Controleer authenticatie op elk verzoek dat dit vereist — vertrouw nooit op frontend-routing
26
+ - Controleer autorisatie (gebruiker kan DEZE actie uitvoeren) apart van authenticatie (gebruiker is ingelogd)
27
+ - Autorisatiecontroles moeten verwijzen naar de geauthenticeerde gebruiker uit de aanvraagcontext — nooit uit een queryparameter
28
+ - Token-vervaldatum moet server-side worden afgedwongen — vertrouw nooit client-verstrekte token-tijdstempels
29
+
30
+ ## Databases
31
+
32
+ - Gebruik geparametriseerde queries of ORM — concateneer nooit SQL
33
+ - Databasegebruikers moeten minimaal vereiste rechten hebben — app-gebruiker mag geen DDL-toegang hebben
34
+ - Stel nooit interne databasefouten bloot aan clients — log server-side, retourneer generieke fout aan client
35
+
36
+ ## Afhankelijkheden
37
+
38
+ - Pin afhankelijkheidsversies — gebruik nooit `*` of `latest` in productie
39
+ - Voer `npm audit` / `pip-audit` / `govulncheck` uit voor elke release
40
+ - Verwijder ongebruikte afhankelijkheden — elke afhankelijkheid is een potentieel aanvalsoppervlak
41
+ - Bekijk de bron van nieuwe afhankelijkheden voor ze toe te voegen
42
+
43
+ ---
44
+
45
+ > **Werk met ons:** Claudient wordt ondersteund door [Uitbreiden](https://uitbreiden.com/) — we bouwen AI-producten en B2B-oplossingen met ontwikkelaarsgemeenschappen. [uitbreiden.com](https://uitbreiden.com/)
@@ -0,0 +1,45 @@
1
+ > 🇳🇱 Dit is de Nederlandse vertaling. [Engelse versie](../testing.md).
2
+
3
+ # Testregels
4
+
5
+ Kopieer de relevante secties naar de `CLAUDE.md` van je project.
6
+
7
+ ---
8
+
9
+ ## Wat te testen
10
+
11
+ - Test gedrag via publieke API's — geen interne implementatiedetails
12
+ - Tests moeten refactoring overleven: als het hernoemen van een private functie tests breekt, zijn de tests fout
13
+ - Test randgevallen: null/lege invoer, grenswaarden, foutpaden
14
+ - Test geen framework-code of taalbuiltins
15
+
16
+ ## Teststructuur
17
+
18
+ - Één logische bewering per test — als een test meerdere niet-gerelateerde zaken controleert, splits dan
19
+ - Testnamen beschrijven WAT het systeem doet, niet HOE: `"returns 404 when user not found"` niet `"test findUser"`
20
+ - Arrange → Act → Assert — één blok per fase, geen vermenging
21
+ - Geen conditionele logica in tests — als je een `if` nodig hebt, schrijf twee tests
22
+
23
+ ## Mocken
24
+
25
+ - Mock geen interne modules — mock alleen op systeemgrenzen (externe API's, databases, bestandssysteem)
26
+ - Mock nooit de klasse/module die wordt getest
27
+ - Integratietests moeten de echte database raken — gebruik een testdatabase, geen mocks
28
+ - Als een unit-test 5+ mocks vereist, is de code waarschijnlijk niet goed gestructureerd
29
+
30
+ ## Dekking
31
+
32
+ - Dekking is een bodem, geen doel — 80% dekking met slechte tests is erger dan 60% met goede tests
33
+ - Elke nieuwe functie heeft minimaal één happy-path test en één foutpad test nodig
34
+ - Elke bugfix heeft een regressietest nodig die de bug had moeten vangen
35
+
36
+ ## Testdata
37
+
38
+ - Gebruik factories of fixtures — codeer nooit gebruikers-ID's, e-mailadressen of UUID's hard in tests
39
+ - Tests moeten geïsoleerd zijn — geen gedeelde veranderlijke state tussen tests
40
+ - Tests moeten deterministisch zijn — geen willekeurige data, geen tijdsafhankelijke beweringen zonder de klok te mocken
41
+ - Ruim na elke test op — verkort tabellen, reset mocks, verwijder gemaakte bestanden
42
+
43
+ ---
44
+
45
+ > **Werk met ons:** Claudient wordt ondersteund door [Uitbreiden](https://uitbreiden.com/) — we bouwen AI-producten en B2B-oplossingen met ontwikkelaarsgemeenschappen. [uitbreiden.com](https://uitbreiden.com/)
@@ -0,0 +1,38 @@
1
+ # Performance Rules
2
+
3
+ Copy the relevant sections into your project's `CLAUDE.md`.
4
+
5
+ ---
6
+
7
+ ## Database
8
+
9
+ - Never run queries inside loops — batch with `IN (...)` or use a join
10
+ - Always paginate queries that can return unbounded results — no `SELECT *` without a `LIMIT`
11
+ - Add indexes before the query is slow in production, not after — analyze query plans during development
12
+ - Select only the columns you need — `SELECT *` fetches unused data and prevents index-only scans
13
+ - Use database-level aggregation (`COUNT`, `SUM`, `GROUP BY`) — do not load rows into memory to count them
14
+
15
+ ## API and network
16
+
17
+ - Cache responses that are expensive to compute and change infrequently — set explicit TTLs
18
+ - Paginate list endpoints — return a maximum of N items per request with a cursor or offset
19
+ - Do not make N+1 queries — batch related data with DataLoader, `include`, or a join
20
+ - Avoid synchronous calls to external services in request handlers — use queues for non-critical work
21
+ - Set timeouts on all external HTTP calls — never let a slow dependency hang your server
22
+
23
+ ## Memory
24
+
25
+ - Do not load large datasets into memory to process them — stream or paginate
26
+ - Release references when done — avoid accidental closures that prevent garbage collection
27
+ - Use generators/iterators for large sequences instead of building full lists in memory
28
+
29
+ ## Measurement
30
+
31
+ - Profile before optimizing — never guess where the bottleneck is
32
+ - Measure in production-like conditions — local benchmarks are misleading
33
+ - Establish a baseline before making changes — without a baseline, you cannot confirm improvement
34
+ - Performance tests belong in CI — regression that passes code review but fails perf budget must be caught automatically
35
+
36
+ ---
37
+
38
+ > **Work with us:** Claudient is backed by [Uitbreiden](https://uitbreiden.com/) — we build AI products and B2B solutions with developer communities. [uitbreiden.com](https://uitbreiden.com/)
@@ -0,0 +1,43 @@
1
+ # Security Rules
2
+
3
+ Copy the relevant sections into your project's `CLAUDE.md`.
4
+
5
+ ---
6
+
7
+ ## Secrets
8
+
9
+ - Never put secrets in source code — not in comments, not in test files, not in example configs
10
+ - Never log secrets — check that logger calls don't include `password`, `token`, `key`, `secret`, or `credential` fields
11
+ - Use environment variables for all secrets; read them at startup, validate they exist
12
+ - Rotate secrets that have been accidentally committed — treat any committed secret as compromised
13
+
14
+ ## Input validation
15
+
16
+ - Validate all input at system boundaries: API params, query strings, request bodies, file uploads, environment variables
17
+ - Validate type, format, length, and range — not just presence
18
+ - Use an allowlist (valid values) not a denylist (blocked values) where possible
19
+ - Never use user input directly in SQL queries, shell commands, file paths, or HTML without sanitization
20
+
21
+ ## Authentication and authorization
22
+
23
+ - Check authentication on every request that requires it — never rely on frontend routing
24
+ - Check authorization (user can do THIS action) separately from authentication (user is logged in)
25
+ - Authorization checks must reference the authenticated user from the request context — never from a query parameter
26
+ - Token expiry must be enforced server-side — never trust client-provided token timestamps
27
+
28
+ ## Databases
29
+
30
+ - Use parameterized queries or ORM — never string-concatenate SQL
31
+ - Database users must have minimum required permissions — app user should not have DDL access
32
+ - Never expose internal database errors to clients — log server-side, return generic error to client
33
+
34
+ ## Dependencies
35
+
36
+ - Pin dependency versions — never use `*` or `latest` in production
37
+ - Run `npm audit` / `pip-audit` / `govulncheck` before every release
38
+ - Remove unused dependencies — every dependency is a potential attack surface
39
+ - Review the source of new dependencies before adding them
40
+
41
+ ---
42
+
43
+ > **Work with us:** Claudient is backed by [Uitbreiden](https://uitbreiden.com/) — we build AI products and B2B solutions with developer communities. [uitbreiden.com](https://uitbreiden.com/)
@@ -0,0 +1,43 @@
1
+ # Testing Rules
2
+
3
+ Copy the relevant sections into your project's `CLAUDE.md`.
4
+
5
+ ---
6
+
7
+ ## What to test
8
+
9
+ - Test behavior through public APIs — not internal implementation details
10
+ - Tests must survive refactoring: if renaming a private function breaks tests, the tests are wrong
11
+ - Test edge cases: null/empty inputs, boundary values, error paths
12
+ - Do not test framework code or language builtins
13
+
14
+ ## Test structure
15
+
16
+ - One logical assertion per test — if a test checks multiple unrelated things, split it
17
+ - Test names describe WHAT the system does, not HOW: `"returns 404 when user not found"` not `"test findUser"`
18
+ - Arrange → Act → Assert — one block each, no interleaving
19
+ - No conditional logic in tests — if you need an `if`, write two tests
20
+
21
+ ## Mocking
22
+
23
+ - Do not mock internal modules — mock only at system boundaries (external APIs, databases, file system)
24
+ - Never mock the class/module under test
25
+ - Integration tests must hit the real database — use a test database, not mocks
26
+ - If a unit test requires 5+ mocks, the code is probably not well-structured
27
+
28
+ ## Coverage
29
+
30
+ - Coverage is a floor, not a target — 80% coverage with bad tests is worse than 60% with good tests
31
+ - Every new feature needs at least one happy-path test and one error-path test
32
+ - Every bug fix needs a regression test that would have caught the bug
33
+
34
+ ## Test data
35
+
36
+ - Use factories or fixtures — never hardcode user IDs, emails, or UUIDs in tests
37
+ - Tests must be isolated — no shared mutable state between tests
38
+ - Tests must be deterministic — no random data, no time-dependent assertions without mocking the clock
39
+ - Clean up after each test — truncate tables, reset mocks, delete created files
40
+
41
+ ---
42
+
43
+ > **Work with us:** Claudient is backed by [Uitbreiden](https://uitbreiden.com/) — we build AI products and B2B solutions with developer communities. [uitbreiden.com](https://uitbreiden.com/)
@@ -0,0 +1,48 @@
1
+ > 🇩🇪 Dies ist die deutsche Übersetzung. [Englische Version](../go.md).
2
+
3
+ # Go Regeln
4
+
5
+ ## Anwenden auf
6
+ Alle Go-Dateien (`*.go`) in jedem Projekt.
7
+
8
+ ## Regeln
9
+
10
+ 1. **Fehler sind Werte — mit `%w` umschließen** — `fmt.Errorf("operation failed: %w", err)` erhält den ursprünglichen Fehler für `errors.Is`- und `errors.As`-Prüfungen. Fehler niemals mit `_` verwerfen.
11
+
12
+ 2. **Tabellengetriebene Tests** — `[]struct{ name, input, want, wantErr }`-Muster verwenden. Jeder Fall hat einen `t.Run(tt.name, ...)`-Untertest. Macht Testfälle leicht erweiterbar und Fehlermeldungen beschreibend.
13
+
14
+ 3. **Context als erstes Argument** — jede Funktion, die I/O durchführt oder blockiert, nimmt `ctx context.Context` als erstes Parameter. Kontext niemals in einer Struct speichern.
15
+
16
+ 4. **Interfaces dort definieren, wo sie konsumiert werden, nicht wo implementiert** — das Interface in das Paket legen, das es verwendet, nicht in das Paket, das die Implementierung bereitstellt. Hält Pakete entkoppelt.
17
+
18
+ 5. **Interfaces maximal 1-3 Methoden** — größere Interfaces sind schwieriger zu erfüllen und zu mocken. Wenn ein Interface 8 Methoden hat, überlegem, es aufzuteilen.
19
+
20
+ 6. **`panic` nur für wirklich nicht behebbare Programmierfehler** — fehlende erforderliche Konfiguration beim Start, verletzte Invarianten, die nie auftreten sollten. Nicht für Laufzeitfehler wie "record not found".
21
+
22
+ 7. **Keine nackten Returns** — `return x, nil` nicht nur `return`. Benannte Rückgabewerte sind für die Dokumentation in Ordnung, aber nackte Returns verschleiern, was zurückgegeben wird.
23
+
24
+ 8. **`init()` nur für Paket-Level-Nebeneffekte ohne Alternative** — Registrierungsmuster, Treiber-Init. Niemals zum Laden von Konfigurationen oder zum Aufbauen von Verbindungen — das gehört in `main` oder einen Konstruktor.
25
+
26
+ 9. **`log/slog` für strukturiertes Logging** — `slog.Info("request", "method", r.Method, "path", r.URL.Path)`. `fmt.Println` nur für CLI-Ausgabe.
27
+
28
+ 10. **`sync.Once` für lazy Singleton-Initialisierung** — threadsicher, null Overhead nach dem ersten Aufruf:
29
+ ```go
30
+ var (
31
+ instance *DB
32
+ once sync.Once
33
+ )
34
+ func GetDB() *DB {
35
+ once.Do(func() { instance = newDB() })
36
+ return instance
37
+ }
38
+ ```
39
+
40
+ 11. **Einbetten statt Erben** — Go hat keine Vererbung. Typen durch Einbettung zusammensetzen: `type AdminUser struct { User; AdminLevel int }`. Interfaces für Polymorphismus verwenden.
41
+
42
+ 12. **Schleifenvariablen explizit erfassen** — in Goroutines innerhalb von Schleifen: `i, v := i, v` vor dem `go func()`. In Go 1.22+ sind Schleifenvariablen pro Iteration; in früheren Versionen werden sie geteilt.
43
+
44
+ 13. **`errgroup` für parallele Operationen mit Fehler-Propagierung** — `golang.org/x/sync/errgroup` statt manuellem `WaitGroup`, wenn Fehler von Goroutines zurückgegeben werden müssen.
45
+
46
+ 14. **Sentinel-Fehler für erwartete Bedingungen, typisierte Fehler für strukturierte Fehler** — `var ErrNotFound = errors.New("not found")` für einfache Bedingungen. Benutzerdefinierte Fehlertypen (die das `error`-Interface implementieren), wenn Aufrufer Felder inspizieren müssen.
47
+
48
+ 15. **HTTP-Handler erhalten nur `(w http.ResponseWriter, r *http.Request)`** — Handler nicht in Structs einbetten oder Closures für einfache Handler verwenden. Dependency Injection über eine Handler-Struct mit einer `ServeHTTP`-Methode verwenden, wenn Abhängigkeiten benötigt werden.
@@ -0,0 +1,38 @@
1
+ > 🇩🇪 Dies ist die deutsche Übersetzung. [Englische Version](../python.md).
2
+
3
+ # Python Regeln
4
+
5
+ ## Anwenden auf
6
+ Alle Python-Dateien (`*.py`) in jedem Projekt.
7
+
8
+ ## Regeln
9
+
10
+ 1. **Type Hints auf allen Funktionssignaturen** — Parameter und Rückgabetypen. `from __future__ import annotations` für Forward-Referenzen verwenden. Keine ungetypten Funktionen ohne Type Hints in Produktionscode.
11
+
12
+ 2. **`pathlib.Path` statt `os.path`** — `Path("dir") / "file.txt"` ist sauberer und funktioniert plattformübergreifend. `os.path` ist Legacy.
13
+
14
+ 3. **f-Strings statt `.format()` und `%`** — `f"Hello {name}"` überall. `.format()` nur wenn das Template als String-Variable gespeichert ist.
15
+
16
+ 4. **Niemals veränderliche Standardargumente verwenden** — `def fn(items: list = [])` erstellt eine Liste, die über alle Aufrufe geteilt wird. `def fn(items: list | None = None)` verwenden und innen zuweisen.
17
+
18
+ 5. **`dataclasses` für Daten-Container, `Pydantic` für validierte externe Daten** — wenn es eine Systemgrenze überquert (HTTP, Datei, Env), Pydantic verwenden. Wenn es rein interner State ist, ist `@dataclass` leichtgewichtiger.
19
+
20
+ 6. **`with`-Anweisungen für alle Ressourcenverwaltung bevorzugen** — Dateien, DB-Verbindungen, Locks, HTTP-Sessions. Niemals `.close()` manuell aufrufen.
21
+
22
+ 7. **Generator-Ausdrücke statt List-Comprehensions, wenn nur einmal iteriert wird** — `sum(x*x for x in range(1000))` alloziert keine Liste.
23
+
24
+ 8. **`__all__` in jedem öffentlichen Modul definieren** — explizite öffentliche API. Verhindert `import *`-Verschmutzung und dokumentiert die Absicht.
25
+
26
+ 9. **Spezifische Ausnahmen werfen, spezifische Ausnahmen abfangen** — `raise ValueError("message")` nicht `raise Exception`. `except ValueError` nicht `except Exception`, außer an einer Top-Level-Fehlergrenze.
27
+
28
+ 10. **`logging`-Modul für Produktionscode, niemals `print()`** — `import logging; logger = logging.getLogger(__name__)`. `print()` nur in CLI-Ausgabecode.
29
+
30
+ 11. **`Enum` für feste Wertmengen verwenden** — keine String-Konstanten. `class Status(str, Enum): ACTIVE = "active"` gibt Typensicherheit und IDE-Vervollständigung.
31
+
32
+ 12. **`subprocess.run()` statt `os.system()`** — erfasst Ausgabe, wirft bei Fehler mit `check=True`, vermeidet Shell-Injection mit Listen-Args: `subprocess.run(["git", "status"], check=True)`.
33
+
34
+ 13. **`dict.get(key, default)` statt `key in dict` + `dict[key]`** — eine Abfrage statt zwei.
35
+
36
+ 14. **Abstrakte Basisklassen via `abc.ABC`** — wenn erzwungene Interface-Verträge benötigt werden. `Protocol` für strukturelles Subtyping (Duck Typing mit Typ-Prüfung).
37
+
38
+ 15. **Virtuelle Umgebungen immer, Abhängigkeiten in `pyproject.toml`** — `uv` oder `poetry` für Verwaltung. Kein `requirements.txt` für neue Projekte.
@@ -0,0 +1,51 @@
1
+ > 🇩🇪 Dies ist die deutsche Übersetzung. [Englische Version](../typescript.md).
2
+
3
+ # TypeScript Regeln
4
+
5
+ ## Anwenden auf
6
+ Alle TypeScript-Dateien (`*.ts`, `*.tsx`) in jedem Projekt.
7
+
8
+ ## Regeln
9
+
10
+ 1. **`strict: true` in `tsconfig.json`** — immer. Dies aktiviert `strictNullChecks`, `noImplicitAny` und `strictFunctionTypes`. Den Strict-Modus niemals deaktivieren, um Fehler zu unterdrücken; die Typen korrigieren.
11
+
12
+ 2. **`unknown` statt `any` für ungetypte externe Daten** — `any` deaktiviert die Typprüfung vollständig. `unknown` erzwingt die Einschränkung des Typs vor der Verwendung. Externe Daten mit Zod oder ähnlichem parsen.
13
+
14
+ 3. **`satisfies`-Operator für typgeprüfte Objekt-Literale** — `const config = { port: 3000 } satisfies Config` fängt Typfehler ab, während der Literal-Typ erhalten bleibt (keine Erweiterung auf `Config`).
15
+
16
+ 4. **Diskriminierte Unions statt nullbarer Felder** — bevorzugen:
17
+ ```ts
18
+ type Result = { status: "ok"; data: User } | { status: "error"; message: string }
19
+ ```
20
+ statt `{ data?: User; error?: string }`. Diskriminierte Unions ermöglichen erschöpfende `switch`-Prüfung.
21
+
22
+ 5. **Keine `as`-Typ-Assertions in Produktionscode** — `as SomeType` bringt den Compiler zum Schweigen ohne zu prüfen. Typ-Prädikate oder `satisfies` stattdessen verwenden. Ausnahme: DOM-Abfragen, wo TypeScript nicht besser inferieren kann.
23
+
24
+ 6. **Typ-Prädikate für Einschränkung** — `function isUser(v: unknown): v is User { return typeof v === "object" && v !== null && "email" in v }`.
25
+
26
+ 7. **`interface` für Objektformen, `type` für Unions und Aliase** — `interface` unterstützt `extends` und Deklarations-Merging. `type` wird für Unions und gemappte Typen benötigt.
27
+
28
+ 8. **`const`-Assertions für Literal-Typen** — `const ROLES = ["admin", "user"] as const` gibt Typ `readonly ["admin", "user"]` statt `string[]`.
29
+
30
+ 9. **Niemals den `Function`-Typ verwenden** — spezifische Signaturen verwenden: `(event: MouseEvent) => void`. `Function` akzeptiert alles und gibt alles zurück.
31
+
32
+ 10. **Zod für Laufzeitvalidierung externer Daten** — HTTP-Request-Bodies, API-Antworten, Env-Vars, Konfigurationsdateien. TypeScript-Typen gelten nur zur Kompilierzeit; Zod validiert zur Laufzeit:
33
+ ```ts
34
+ const UserSchema = z.object({ email: z.string().email(), age: z.number().int().positive() })
35
+ const user = UserSchema.parse(req.body) // wirft ZodError wenn ungültig
36
+ ```
37
+
38
+ 11. **`readonly` auf Arrays und Objekten, die nicht verändert werden sollen** — `readonly string[]` verhindert push/splice. `Readonly<Config>` auf Konfigurationsobjekten, die durch Schichten weitergegeben werden.
39
+
40
+ 12. **Explizite Rückgabetypen auf öffentlichen/exportierten Funktionen** — verbessert Lesbarkeit und erkennt versehentliche Rückgabetyp-Änderungen.
41
+
42
+ 13. **`import type` für nur-Typ-Imports** — `import type { User } from './types'` wird zur Laufzeit gelöscht und vermeidet zirkuläre Abhängigkeitsprobleme.
43
+
44
+ 14. **`never` zur erschöpfenden Behandlung** — im Default-Fall eines Switch über eine diskriminierte Union:
45
+ ```ts
46
+ default:
47
+ const _exhaustive: never = status // Kompilierfehler wenn ein Fall fehlt
48
+ throw new Error(`Unhandled: ${_exhaustive}`)
49
+ ```
50
+
51
+ 15. **`noUncheckedIndexedAccess` aktivieren** — Array- und Objekt-Indexzugriff gibt `T | undefined` statt `T` zurück, was Null-Prüfungen erzwingt, wo sie benötigt werden.