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.
- package/.claude-plugin/plugin.json +42 -0
- package/CONTEXT.md +58 -0
- package/README.md +165 -0
- package/agents/build-resolvers/de/python-resolver.md +64 -0
- package/agents/build-resolvers/de/typescript-resolver.md +65 -0
- package/agents/build-resolvers/es/python-resolver.md +64 -0
- package/agents/build-resolvers/es/typescript-resolver.md +65 -0
- package/agents/build-resolvers/fr/python-resolver.md +64 -0
- package/agents/build-resolvers/fr/typescript-resolver.md +65 -0
- package/agents/build-resolvers/nl/python-resolver.md +64 -0
- package/agents/build-resolvers/nl/typescript-resolver.md +65 -0
- package/agents/build-resolvers/python-resolver.md +62 -0
- package/agents/build-resolvers/typescript-resolver.md +63 -0
- package/agents/core/architect.md +64 -0
- package/agents/core/code-reviewer.md +78 -0
- package/agents/core/de/architect.md +66 -0
- package/agents/core/de/code-reviewer.md +80 -0
- package/agents/core/de/planner.md +63 -0
- package/agents/core/de/security-reviewer.md +93 -0
- package/agents/core/es/architect.md +66 -0
- package/agents/core/es/code-reviewer.md +80 -0
- package/agents/core/es/planner.md +63 -0
- package/agents/core/es/security-reviewer.md +93 -0
- package/agents/core/fr/architect.md +66 -0
- package/agents/core/fr/code-reviewer.md +80 -0
- package/agents/core/fr/planner.md +63 -0
- package/agents/core/fr/security-reviewer.md +93 -0
- package/agents/core/nl/architect.md +66 -0
- package/agents/core/nl/code-reviewer.md +80 -0
- package/agents/core/nl/planner.md +63 -0
- package/agents/core/nl/security-reviewer.md +93 -0
- package/agents/core/planner.md +61 -0
- package/agents/core/security-reviewer.md +91 -0
- package/guides/agent-orchestration.md +231 -0
- package/guides/de/agent-orchestration.md +174 -0
- package/guides/de/getting-started.md +164 -0
- package/guides/de/hooks-cookbook.md +160 -0
- package/guides/de/memory-management.md +153 -0
- package/guides/de/security.md +180 -0
- package/guides/de/skill-authoring.md +214 -0
- package/guides/de/token-optimization.md +156 -0
- package/guides/es/agent-orchestration.md +174 -0
- package/guides/es/getting-started.md +164 -0
- package/guides/es/hooks-cookbook.md +160 -0
- package/guides/es/memory-management.md +153 -0
- package/guides/es/security.md +180 -0
- package/guides/es/skill-authoring.md +214 -0
- package/guides/es/token-optimization.md +156 -0
- package/guides/fr/agent-orchestration.md +174 -0
- package/guides/fr/getting-started.md +164 -0
- package/guides/fr/hooks-cookbook.md +227 -0
- package/guides/fr/memory-management.md +169 -0
- package/guides/fr/security.md +180 -0
- package/guides/fr/skill-authoring.md +214 -0
- package/guides/fr/token-optimization.md +158 -0
- package/guides/getting-started.md +164 -0
- package/guides/hooks-cookbook.md +423 -0
- package/guides/memory-management.md +192 -0
- package/guides/nl/agent-orchestration.md +174 -0
- package/guides/nl/getting-started.md +164 -0
- package/guides/nl/hooks-cookbook.md +160 -0
- package/guides/nl/memory-management.md +153 -0
- package/guides/nl/security.md +180 -0
- package/guides/nl/skill-authoring.md +214 -0
- package/guides/nl/token-optimization.md +156 -0
- package/guides/security.md +229 -0
- package/guides/skill-authoring.md +226 -0
- package/guides/token-optimization.md +169 -0
- package/hooks/lifecycle/cost-tracker.md +49 -0
- package/hooks/lifecycle/cost-tracker.sh +59 -0
- package/hooks/lifecycle/pre-compact-save.md +56 -0
- package/hooks/lifecycle/pre-compact-save.sh +37 -0
- package/hooks/lifecycle/session-start.md +50 -0
- package/hooks/lifecycle/session-start.sh +47 -0
- package/hooks/post-tool-use/audit-log.md +53 -0
- package/hooks/post-tool-use/audit-log.sh +53 -0
- package/hooks/post-tool-use/prettier.md +53 -0
- package/hooks/post-tool-use/prettier.sh +49 -0
- package/hooks/pre-tool-use/block-dangerous.md +48 -0
- package/hooks/pre-tool-use/block-dangerous.sh +76 -0
- package/hooks/pre-tool-use/git-push-confirm.md +46 -0
- package/hooks/pre-tool-use/git-push-confirm.sh +36 -0
- package/mcp/configs/github.json +11 -0
- package/mcp/configs/postgres.json +11 -0
- package/mcp/de/recommended-servers.md +170 -0
- package/mcp/es/recommended-servers.md +170 -0
- package/mcp/fr/recommended-servers.md +170 -0
- package/mcp/nl/recommended-servers.md +170 -0
- package/mcp/recommended-servers.md +168 -0
- package/package.json +45 -0
- package/prompts/project-starters/de/fastapi-project.md +62 -0
- package/prompts/project-starters/de/nextjs-project.md +82 -0
- package/prompts/project-starters/es/fastapi-project.md +62 -0
- package/prompts/project-starters/es/nextjs-project.md +82 -0
- package/prompts/project-starters/fastapi-project.md +60 -0
- package/prompts/project-starters/fr/fastapi-project.md +62 -0
- package/prompts/project-starters/fr/nextjs-project.md +82 -0
- package/prompts/project-starters/nextjs-project.md +80 -0
- package/prompts/project-starters/nl/fastapi-project.md +62 -0
- package/prompts/project-starters/nl/nextjs-project.md +82 -0
- package/prompts/system-prompts/ai-product.md +80 -0
- package/prompts/system-prompts/data-pipeline.md +76 -0
- package/prompts/system-prompts/de/ai-product.md +82 -0
- package/prompts/system-prompts/de/data-pipeline.md +78 -0
- package/prompts/system-prompts/de/saas-backend.md +71 -0
- package/prompts/system-prompts/es/ai-product.md +82 -0
- package/prompts/system-prompts/es/data-pipeline.md +78 -0
- package/prompts/system-prompts/es/saas-backend.md +71 -0
- package/prompts/system-prompts/fr/ai-product.md +82 -0
- package/prompts/system-prompts/fr/data-pipeline.md +78 -0
- package/prompts/system-prompts/fr/saas-backend.md +71 -0
- package/prompts/system-prompts/nl/ai-product.md +82 -0
- package/prompts/system-prompts/nl/data-pipeline.md +78 -0
- package/prompts/system-prompts/nl/saas-backend.md +71 -0
- package/prompts/system-prompts/saas-backend.md +69 -0
- package/prompts/task-specific/changelog.md +81 -0
- package/prompts/task-specific/de/changelog.md +83 -0
- package/prompts/task-specific/de/debugging.md +78 -0
- package/prompts/task-specific/de/pr-description.md +69 -0
- package/prompts/task-specific/debugging.md +76 -0
- package/prompts/task-specific/es/changelog.md +83 -0
- package/prompts/task-specific/es/debugging.md +78 -0
- package/prompts/task-specific/es/pr-description.md +69 -0
- package/prompts/task-specific/fr/changelog.md +83 -0
- package/prompts/task-specific/fr/debugging.md +78 -0
- package/prompts/task-specific/fr/pr-description.md +69 -0
- package/prompts/task-specific/nl/changelog.md +83 -0
- package/prompts/task-specific/nl/debugging.md +78 -0
- package/prompts/task-specific/nl/pr-description.md +69 -0
- package/prompts/task-specific/pr-description.md +67 -0
- package/rules/common/coding-style.md +45 -0
- package/rules/common/de/coding-style.md +47 -0
- package/rules/common/de/git.md +48 -0
- package/rules/common/de/performance.md +40 -0
- package/rules/common/de/security.md +45 -0
- package/rules/common/de/testing.md +45 -0
- package/rules/common/es/coding-style.md +47 -0
- package/rules/common/es/git.md +48 -0
- package/rules/common/es/performance.md +40 -0
- package/rules/common/es/security.md +45 -0
- package/rules/common/es/testing.md +45 -0
- package/rules/common/fr/coding-style.md +47 -0
- package/rules/common/fr/git.md +48 -0
- package/rules/common/fr/performance.md +40 -0
- package/rules/common/fr/security.md +45 -0
- package/rules/common/fr/testing.md +45 -0
- package/rules/common/git.md +46 -0
- package/rules/common/nl/coding-style.md +47 -0
- package/rules/common/nl/git.md +48 -0
- package/rules/common/nl/performance.md +40 -0
- package/rules/common/nl/security.md +45 -0
- package/rules/common/nl/testing.md +45 -0
- package/rules/common/performance.md +38 -0
- package/rules/common/security.md +43 -0
- package/rules/common/testing.md +43 -0
- package/rules/language-specific/de/go.md +48 -0
- package/rules/language-specific/de/python.md +38 -0
- package/rules/language-specific/de/typescript.md +51 -0
- package/rules/language-specific/es/go.md +48 -0
- package/rules/language-specific/es/python.md +38 -0
- package/rules/language-specific/es/typescript.md +51 -0
- package/rules/language-specific/fr/go.md +48 -0
- package/rules/language-specific/fr/python.md +38 -0
- package/rules/language-specific/fr/typescript.md +51 -0
- package/rules/language-specific/go.md +46 -0
- package/rules/language-specific/nl/go.md +48 -0
- package/rules/language-specific/nl/python.md +38 -0
- package/rules/language-specific/nl/typescript.md +51 -0
- package/rules/language-specific/python.md +36 -0
- package/rules/language-specific/typescript.md +49 -0
- package/scripts/cli.js +161 -0
- package/scripts/link-skills.sh +35 -0
- package/scripts/list-skills.sh +34 -0
- package/skills/ai-engineering/agent-construction.md +285 -0
- package/skills/ai-engineering/claude-api.md +248 -0
- package/skills/ai-engineering/de/agent-construction.md +287 -0
- package/skills/ai-engineering/de/claude-api.md +250 -0
- package/skills/ai-engineering/es/agent-construction.md +287 -0
- package/skills/ai-engineering/es/claude-api.md +250 -0
- package/skills/ai-engineering/fr/agent-construction.md +287 -0
- package/skills/ai-engineering/fr/claude-api.md +250 -0
- package/skills/ai-engineering/nl/agent-construction.md +287 -0
- package/skills/ai-engineering/nl/claude-api.md +250 -0
- package/skills/backend/dotnet/csharp.md +304 -0
- package/skills/backend/dotnet/de/csharp.md +306 -0
- package/skills/backend/dotnet/es/csharp.md +306 -0
- package/skills/backend/dotnet/fr/csharp.md +306 -0
- package/skills/backend/dotnet/nl/csharp.md +306 -0
- package/skills/backend/go/de/go.md +307 -0
- package/skills/backend/go/es/go.md +307 -0
- package/skills/backend/go/fr/go.md +307 -0
- package/skills/backend/go/go.md +305 -0
- package/skills/backend/go/nl/go.md +307 -0
- package/skills/backend/nodejs/de/nestjs.md +274 -0
- package/skills/backend/nodejs/de/nextjs.md +222 -0
- package/skills/backend/nodejs/es/nestjs.md +274 -0
- package/skills/backend/nodejs/es/nextjs.md +222 -0
- package/skills/backend/nodejs/fr/nestjs.md +274 -0
- package/skills/backend/nodejs/fr/nextjs.md +222 -0
- package/skills/backend/nodejs/nestjs.md +272 -0
- package/skills/backend/nodejs/nextjs.md +220 -0
- package/skills/backend/nodejs/nl/nestjs.md +274 -0
- package/skills/backend/nodejs/nl/nextjs.md +222 -0
- package/skills/backend/python/de/django.md +285 -0
- package/skills/backend/python/de/fastapi.md +244 -0
- package/skills/backend/python/django.md +283 -0
- package/skills/backend/python/es/django.md +285 -0
- package/skills/backend/python/es/fastapi.md +244 -0
- package/skills/backend/python/fastapi.md +242 -0
- package/skills/backend/python/fr/django.md +285 -0
- package/skills/backend/python/fr/fastapi.md +244 -0
- package/skills/backend/python/nl/django.md +285 -0
- package/skills/backend/python/nl/fastapi.md +244 -0
- package/skills/data-ml/dbt-data-pipelines.md +155 -0
- package/skills/data-ml/de/dbt-data-pipelines.md +157 -0
- package/skills/data-ml/de/pandas-polars.md +147 -0
- package/skills/data-ml/de/pytorch-tensorflow.md +171 -0
- package/skills/data-ml/es/dbt-data-pipelines.md +157 -0
- package/skills/data-ml/es/pandas-polars.md +147 -0
- package/skills/data-ml/es/pytorch-tensorflow.md +171 -0
- package/skills/data-ml/fr/dbt-data-pipelines.md +157 -0
- package/skills/data-ml/fr/pandas-polars.md +147 -0
- package/skills/data-ml/fr/pytorch-tensorflow.md +171 -0
- package/skills/data-ml/nl/dbt-data-pipelines.md +157 -0
- package/skills/data-ml/nl/pandas-polars.md +147 -0
- package/skills/data-ml/nl/pytorch-tensorflow.md +171 -0
- package/skills/data-ml/pandas-polars.md +145 -0
- package/skills/data-ml/pytorch-tensorflow.md +169 -0
- package/skills/database/de/graphql.md +181 -0
- package/skills/database/es/graphql.md +181 -0
- package/skills/database/fr/graphql.md +181 -0
- package/skills/database/graphql.md +179 -0
- package/skills/database/nl/graphql.md +181 -0
- package/skills/devops-infra/de/docker.md +133 -0
- package/skills/devops-infra/de/github-actions.md +179 -0
- package/skills/devops-infra/de/kubernetes.md +129 -0
- package/skills/devops-infra/de/terraform.md +130 -0
- package/skills/devops-infra/docker.md +131 -0
- package/skills/devops-infra/es/docker.md +133 -0
- package/skills/devops-infra/es/github-actions.md +179 -0
- package/skills/devops-infra/es/kubernetes.md +129 -0
- package/skills/devops-infra/es/terraform.md +130 -0
- package/skills/devops-infra/fr/docker.md +133 -0
- package/skills/devops-infra/fr/github-actions.md +179 -0
- package/skills/devops-infra/fr/kubernetes.md +129 -0
- package/skills/devops-infra/fr/terraform.md +130 -0
- package/skills/devops-infra/github-actions.md +177 -0
- package/skills/devops-infra/kubernetes.md +127 -0
- package/skills/devops-infra/nl/docker.md +133 -0
- package/skills/devops-infra/nl/github-actions.md +179 -0
- package/skills/devops-infra/nl/kubernetes.md +129 -0
- package/skills/devops-infra/nl/terraform.md +130 -0
- package/skills/devops-infra/terraform.md +128 -0
- package/skills/finance-payments/de/stripe.md +187 -0
- package/skills/finance-payments/es/stripe.md +187 -0
- package/skills/finance-payments/fr/stripe.md +187 -0
- package/skills/finance-payments/nl/stripe.md +187 -0
- package/skills/finance-payments/stripe.md +185 -0
- package/workflows/code-review.md +151 -0
- package/workflows/de/code-review.md +153 -0
- package/workflows/de/debugging-session.md +146 -0
- package/workflows/de/feature-development.md +155 -0
- package/workflows/de/new-project-bootstrap.md +175 -0
- package/workflows/de/refactor-safely.md +150 -0
- package/workflows/debugging-session.md +144 -0
- package/workflows/es/code-review.md +153 -0
- package/workflows/es/debugging-session.md +146 -0
- package/workflows/es/feature-development.md +155 -0
- package/workflows/es/new-project-bootstrap.md +175 -0
- package/workflows/es/refactor-safely.md +150 -0
- package/workflows/feature-development.md +153 -0
- package/workflows/fr/code-review.md +153 -0
- package/workflows/fr/debugging-session.md +146 -0
- package/workflows/fr/feature-development.md +155 -0
- package/workflows/fr/new-project-bootstrap.md +175 -0
- package/workflows/fr/refactor-safely.md +150 -0
- package/workflows/new-project-bootstrap.md +173 -0
- package/workflows/nl/code-review.md +153 -0
- package/workflows/nl/debugging-session.md +146 -0
- package/workflows/nl/feature-development.md +155 -0
- package/workflows/nl/new-project-bootstrap.md +175 -0
- package/workflows/nl/refactor-safely.md +150 -0
- package/workflows/refactor-safely.md +148 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Coding Style Rules
|
|
2
|
+
|
|
3
|
+
Copy the relevant sections into your project's `CLAUDE.md`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Naming
|
|
8
|
+
|
|
9
|
+
- Variables and functions: `camelCase` (JS/TS), `snake_case` (Python, Go, Rust)
|
|
10
|
+
- Classes and types: `PascalCase` in all languages
|
|
11
|
+
- Constants: `SCREAMING_SNAKE_CASE` only for true constants that never change
|
|
12
|
+
- Boolean variables: prefix with `is`, `has`, `can`, `should` — `isActive`, `hasPermission`
|
|
13
|
+
- Do not abbreviate names unless the abbreviation is universally known (`id`, `url`, `db`, `ctx`)
|
|
14
|
+
|
|
15
|
+
## Functions
|
|
16
|
+
|
|
17
|
+
- One responsibility per function — if you need "and" in the description, split it
|
|
18
|
+
- Maximum 40 lines per function; if longer, extract sub-functions
|
|
19
|
+
- No boolean parameters — use an options object or two separate functions
|
|
20
|
+
- Return early for guard clauses — don't nest the happy path inside conditionals
|
|
21
|
+
|
|
22
|
+
## Comments
|
|
23
|
+
|
|
24
|
+
- Write no comments unless the WHY is non-obvious
|
|
25
|
+
- Never write comments that describe what the code does (the code already does that)
|
|
26
|
+
- Write a comment when: there is a hidden constraint, a workaround for a specific bug, or behavior that would surprise a reader
|
|
27
|
+
- Never write TODO comments — create a tracked issue instead
|
|
28
|
+
|
|
29
|
+
## Error handling
|
|
30
|
+
|
|
31
|
+
- Never swallow errors silently (`catch (e) {}` is always wrong)
|
|
32
|
+
- Always handle errors at the boundary where you can take action
|
|
33
|
+
- Propagate errors upward with context — wrap with the relevant ID or operation name
|
|
34
|
+
- Do not use `console.error` in production code — use the project's logger
|
|
35
|
+
|
|
36
|
+
## File organization
|
|
37
|
+
|
|
38
|
+
- One primary export per file
|
|
39
|
+
- File names match their primary export: `UserService.ts` exports `UserService`
|
|
40
|
+
- No barrel files (`index.ts` re-exports) — import directly from the source file
|
|
41
|
+
- Group imports: external packages first, then internal modules, then relative imports
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
> **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
|
+
> 🇩🇪 Dies ist die deutsche Übersetzung. [Englische Version](../coding-style.md).
|
|
2
|
+
|
|
3
|
+
# Coding Style Regeln
|
|
4
|
+
|
|
5
|
+
Relevante Abschnitte in die `CLAUDE.md` des Projekts kopieren.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Benennung
|
|
10
|
+
|
|
11
|
+
- Variablen und Funktionen: `camelCase` (JS/TS), `snake_case` (Python, Go, Rust)
|
|
12
|
+
- Klassen und Typen: `PascalCase` in allen Sprachen
|
|
13
|
+
- Konstanten: `SCREAMING_SNAKE_CASE` nur für echte Konstanten, die sich nie ändern
|
|
14
|
+
- Boolesche Variablen: Präfix mit `is`, `has`, `can`, `should` — `isActive`, `hasPermission`
|
|
15
|
+
- Namen nicht abkürzen, außer die Abkürzung ist allgemein bekannt (`id`, `url`, `db`, `ctx`)
|
|
16
|
+
|
|
17
|
+
## Funktionen
|
|
18
|
+
|
|
19
|
+
- Eine Verantwortlichkeit pro Funktion — wenn "und" in der Beschreibung benötigt wird, aufteilen
|
|
20
|
+
- Maximal 40 Zeilen pro Funktion; bei längeren Unterfunktionen extrahieren
|
|
21
|
+
- Keine booleschen Parameter — ein Options-Objekt oder zwei separate Funktionen verwenden
|
|
22
|
+
- Frühzeitig bei Guard-Klauseln zurückkehren — den Happy Path nicht innerhalb von Bedingungen verschachteln
|
|
23
|
+
|
|
24
|
+
## Kommentare
|
|
25
|
+
|
|
26
|
+
- Keine Kommentare schreiben, außer das WARUM ist nicht offensichtlich
|
|
27
|
+
- Niemals Kommentare schreiben, die beschreiben, was der Code tut (das macht der Code bereits)
|
|
28
|
+
- Kommentar schreiben wenn: eine versteckte Einschränkung vorhanden ist, ein Workaround für einen bestimmten Bug, oder Verhalten, das einen Leser überraschen würde
|
|
29
|
+
- Niemals TODO-Kommentare schreiben — stattdessen ein nachverfolgbares Issue erstellen
|
|
30
|
+
|
|
31
|
+
## Fehlerbehandlung
|
|
32
|
+
|
|
33
|
+
- Fehler niemals stillschweigend schlucken (`catch (e) {}` ist immer falsch)
|
|
34
|
+
- Fehler immer an der Grenze behandeln, wo eine Aktion möglich ist
|
|
35
|
+
- Fehler nach oben propagieren mit Kontext — mit der relevanten ID oder dem Operationsnamen umschließen
|
|
36
|
+
- Kein `console.error` in Produktionscode verwenden — den Logger des Projekts verwenden
|
|
37
|
+
|
|
38
|
+
## Dateiorganisation
|
|
39
|
+
|
|
40
|
+
- Ein primärer Export pro Datei
|
|
41
|
+
- Dateinamen passen zu ihrem primären Export: `UserService.ts` exportiert `UserService`
|
|
42
|
+
- Keine Barrel-Dateien (`index.ts`-Re-Exports) — direkt aus der Quelldatei importieren
|
|
43
|
+
- Imports gruppieren: zuerst externe Pakete, dann interne Module, dann relative Imports
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
> **Mit uns arbeiten:** Claudient wird von [Uitbreiden](https://uitbreiden.com/) unterstützt — wir bauen KI-Produkte und B2B-Lösungen mit Entwickler-Communities. [uitbreiden.com](https://uitbreiden.com/)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
> 🇩🇪 Dies ist die deutsche Übersetzung. [Englische Version](../git.md).
|
|
2
|
+
|
|
3
|
+
# Git Regeln
|
|
4
|
+
|
|
5
|
+
Relevante Abschnitte in die `CLAUDE.md` des Projekts kopieren.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Commit-Nachrichten
|
|
10
|
+
|
|
11
|
+
- Format: `type: kurze Beschreibung` (Imperativ-Modus, ≤ 72 Zeichen)
|
|
12
|
+
- Typen: `feat`, `fix`, `docs`, `refactor`, `test`, `chore`, `perf`
|
|
13
|
+
- Beispiele: `feat: add webhook signature verification`, `fix: handle null user in auth middleware`
|
|
14
|
+
- Keine generischen Nachrichten: "update", "changes", "fix bug", "wip" sind nicht akzeptabel
|
|
15
|
+
- Body (optional): WARUM erklären, nicht was. Das Diff zeigt was.
|
|
16
|
+
|
|
17
|
+
## Branches
|
|
18
|
+
|
|
19
|
+
- Feature-Branches: `feat/kurze-beschreibung`
|
|
20
|
+
- Bugfixes: `fix/kurze-beschreibung`
|
|
21
|
+
- Niemals direkt in `main` oder `master` committen
|
|
22
|
+
- Branches nach dem Merge löschen
|
|
23
|
+
|
|
24
|
+
## Was niemals committen
|
|
25
|
+
|
|
26
|
+
- `.env`-Dateien oder jede Datei, die Secrets enthält
|
|
27
|
+
- `node_modules/`, `__pycache__/`, Build-Artefakte
|
|
28
|
+
- Persönliche Editor-Einstellungen (`.idea/`, `.vscode/settings.json`)
|
|
29
|
+
- Dateien > 10MB (git-lfs oder externen Speicher verwenden)
|
|
30
|
+
- Generierte Dateien, die aus dem Quellcode reproduziert werden können
|
|
31
|
+
|
|
32
|
+
## Vor dem Pushen
|
|
33
|
+
|
|
34
|
+
- Tests lokal ausführen — niemals rot pushen
|
|
35
|
+
- Eigenes Diff vor jedem Push überprüfen: `git diff origin/main...HEAD`
|
|
36
|
+
- WIP-Commits squashen, bevor zu einem geteilten Branch gepusht wird
|
|
37
|
+
- Niemals `force-push` auf `main` oder einem geteilten Branch
|
|
38
|
+
|
|
39
|
+
## Gefährliche Befehle — immer bestätigen vor der Ausführung
|
|
40
|
+
|
|
41
|
+
- `git reset --hard` — zerstört uncommittete Änderungen dauerhaft
|
|
42
|
+
- `git clean -f` — löscht nicht verfolgte Dateien dauerhaft
|
|
43
|
+
- `git push --force` — überschreibt die Remote-Historie
|
|
44
|
+
- `git stash drop` — verwirft gespeicherte Änderungen dauerhaft
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
> **Mit uns arbeiten:** Claudient wird von [Uitbreiden](https://uitbreiden.com/) unterstützt — wir bauen KI-Produkte und B2B-Lösungen mit Entwickler-Communities. [uitbreiden.com](https://uitbreiden.com/)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
> 🇩🇪 Dies ist die deutsche Übersetzung. [Englische Version](../performance.md).
|
|
2
|
+
|
|
3
|
+
# Performance-Regeln
|
|
4
|
+
|
|
5
|
+
Relevante Abschnitte in die `CLAUDE.md` des Projekts kopieren.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Datenbank
|
|
10
|
+
|
|
11
|
+
- Niemals Abfragen in Schleifen ausführen — mit `IN (...)` batch-verarbeiten oder einen Join verwenden
|
|
12
|
+
- Abfragen, die unbegrenzte Ergebnisse zurückgeben können, immer paginieren — kein `SELECT *` ohne `LIMIT`
|
|
13
|
+
- Indizes hinzufügen, bevor die Abfrage in der Produktion langsam wird, nicht danach — Abfrage-Pläne während der Entwicklung analysieren
|
|
14
|
+
- Nur die benötigten Spalten auswählen — `SELECT *` ruft ungenutzte Daten ab und verhindert Index-Only-Scans
|
|
15
|
+
- Aggregation auf Datenbankebene verwenden (`COUNT`, `SUM`, `GROUP BY`) — keine Zeilen in den Speicher laden, um sie zu zählen
|
|
16
|
+
|
|
17
|
+
## API und Netzwerk
|
|
18
|
+
|
|
19
|
+
- Antworten cachen, die aufwändig zu berechnen sind und sich selten ändern — explizite TTLs setzen
|
|
20
|
+
- Listen-Endpunkte paginieren — maximal N Elemente pro Anfrage mit einem Cursor oder Offset zurückgeben
|
|
21
|
+
- Keine N+1-Abfragen — verwandte Daten mit DataLoader, `include` oder einem Join batchen
|
|
22
|
+
- Synchrone Aufrufe zu externen Diensten in Request-Handlern vermeiden — Queues für nicht-kritische Arbeit verwenden
|
|
23
|
+
- Timeouts für alle externen HTTP-Aufrufe setzen — niemals eine langsame Abhängigkeit den Server hängen lassen
|
|
24
|
+
|
|
25
|
+
## Speicher
|
|
26
|
+
|
|
27
|
+
- Keine großen Datensätze in den Speicher laden, um sie zu verarbeiten — streamen oder paginieren
|
|
28
|
+
- Referenzen freigeben, wenn fertig — versehentliche Closures vermeiden, die Garbage Collection verhindern
|
|
29
|
+
- Generatoren/Iteratoren für große Sequenzen verwenden, anstatt vollständige Listen im Speicher aufzubauen
|
|
30
|
+
|
|
31
|
+
## Messung
|
|
32
|
+
|
|
33
|
+
- Vor der Optimierung profilieren — niemals raten, wo der Engpass liegt
|
|
34
|
+
- Unter produktionsähnlichen Bedingungen messen — lokale Benchmarks sind irreführend
|
|
35
|
+
- Baseline vor Änderungen festlegen — ohne Baseline kann keine Verbesserung bestätigt werden
|
|
36
|
+
- Performance-Tests gehören in CI — Regressionen, die Code-Review bestehen, aber das Performance-Budget verletzen, müssen automatisch erkannt werden
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
> **Mit uns arbeiten:** Claudient wird von [Uitbreiden](https://uitbreiden.com/) unterstützt — wir bauen KI-Produkte und B2B-Lösungen mit Entwickler-Communities. [uitbreiden.com](https://uitbreiden.com/)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
> 🇩🇪 Dies ist die deutsche Übersetzung. [Englische Version](../security.md).
|
|
2
|
+
|
|
3
|
+
# Sicherheitsregeln
|
|
4
|
+
|
|
5
|
+
Relevante Abschnitte in die `CLAUDE.md` des Projekts kopieren.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Secrets
|
|
10
|
+
|
|
11
|
+
- Niemals Secrets im Quellcode — nicht in Kommentaren, nicht in Testdateien, nicht in Beispielkonfigurationen
|
|
12
|
+
- Niemals Secrets protokollieren — prüfen, dass Logger-Aufrufe keine `password`-, `token`-, `key`-, `secret`- oder `credential`-Felder enthalten
|
|
13
|
+
- Umgebungsvariablen für alle Secrets verwenden; beim Start lesen und ihre Existenz validieren
|
|
14
|
+
- Secrets rotieren, die versehentlich committet wurden — jeden committeten Secret als kompromittiert behandeln
|
|
15
|
+
|
|
16
|
+
## Eingabevalidierung
|
|
17
|
+
|
|
18
|
+
- Alle Eingaben an Systemgrenzen validieren: API-Parameter, Query-Strings, Request-Bodies, Datei-Uploads, Umgebungsvariablen
|
|
19
|
+
- Typ, Format, Länge und Bereich validieren — nicht nur Vorhandensein
|
|
20
|
+
- Eine Allowlist (gültige Werte) anstelle einer Denylist (blockierte Werte) verwenden, wo möglich
|
|
21
|
+
- Niemals Benutzereingaben direkt in SQL-Abfragen, Shell-Befehlen, Dateipfaden oder HTML ohne Bereinigung verwenden
|
|
22
|
+
|
|
23
|
+
## Authentifizierung und Autorisierung
|
|
24
|
+
|
|
25
|
+
- Authentifizierung bei jeder Anfrage prüfen, die sie erfordert — niemals auf Frontend-Routing verlassen
|
|
26
|
+
- Autorisierung (Benutzer kann DIESE Aktion durchführen) separat von Authentifizierung (Benutzer ist angemeldet) prüfen
|
|
27
|
+
- Autorisierungsprüfungen müssen den authentifizierten Benutzer aus dem Anfrage-Kontext referenzieren — niemals aus einem Query-Parameter
|
|
28
|
+
- Token-Ablauf muss serverseitig erzwungen werden — niemals client-seitig bereitgestellte Token-Zeitstempel vertrauen
|
|
29
|
+
|
|
30
|
+
## Datenbanken
|
|
31
|
+
|
|
32
|
+
- Parametrisierte Abfragen oder ORM verwenden — niemals SQL durch String-Verkettung erstellen
|
|
33
|
+
- Datenbankbenutzer müssen Mindestberechtigungen haben — App-Benutzer sollte keinen DDL-Zugriff haben
|
|
34
|
+
- Interne Datenbankfehler niemals an Clients weitergeben — serverseitig protokollieren, generischen Fehler an den Client zurückgeben
|
|
35
|
+
|
|
36
|
+
## Abhängigkeiten
|
|
37
|
+
|
|
38
|
+
- Abhängigkeitsversionen pinnen — niemals `*` oder `latest` in der Produktion verwenden
|
|
39
|
+
- `npm audit` / `pip-audit` / `govulncheck` vor jedem Release ausführen
|
|
40
|
+
- Nicht verwendete Abhängigkeiten entfernen — jede Abhängigkeit ist eine potenzielle Angriffsfläche
|
|
41
|
+
- Quellcode neuer Abhängigkeiten prüfen, bevor sie hinzugefügt werden
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
> **Mit uns arbeiten:** Claudient wird von [Uitbreiden](https://uitbreiden.com/) unterstützt — wir bauen KI-Produkte und B2B-Lösungen mit Entwickler-Communities. [uitbreiden.com](https://uitbreiden.com/)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
> 🇩🇪 Dies ist die deutsche Übersetzung. [Englische Version](../testing.md).
|
|
2
|
+
|
|
3
|
+
# Test-Regeln
|
|
4
|
+
|
|
5
|
+
Relevante Abschnitte in die `CLAUDE.md` des Projekts kopieren.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Was testen
|
|
10
|
+
|
|
11
|
+
- Verhalten über öffentliche APIs testen — nicht interne Implementierungsdetails
|
|
12
|
+
- Tests müssen Refactoring überleben: wenn das Umbenennen einer privaten Funktion Tests bricht, sind die Tests falsch
|
|
13
|
+
- Edge Cases testen: null/leere Eingaben, Grenzwerte, Fehlerpfade
|
|
14
|
+
- Framework-Code oder Sprach-Builtins nicht testen
|
|
15
|
+
|
|
16
|
+
## Test-Struktur
|
|
17
|
+
|
|
18
|
+
- Eine logische Assertion pro Test — wenn ein Test mehrere nicht zusammenhängende Dinge prüft, aufteilen
|
|
19
|
+
- Testnamen beschreiben WAS das System tut, nicht WIE: `"returns 404 when user not found"` nicht `"test findUser"`
|
|
20
|
+
- Arrange → Act → Assert — je ein Block, kein Durchmischen
|
|
21
|
+
- Keine Bedingungslogik in Tests — wenn ein `if` benötigt wird, zwei Tests schreiben
|
|
22
|
+
|
|
23
|
+
## Mocking
|
|
24
|
+
|
|
25
|
+
- Interne Module nicht mocken — nur an Systemgrenzen mocken (externe APIs, Datenbanken, Dateisystem)
|
|
26
|
+
- Die Klasse/das Modul, das getestet wird, niemals mocken
|
|
27
|
+
- Integrationstests müssen die echte Datenbank treffen — Test-Datenbank verwenden, keine Mocks
|
|
28
|
+
- Wenn ein Unit-Test 5+ Mocks benötigt, ist der Code wahrscheinlich nicht gut strukturiert
|
|
29
|
+
|
|
30
|
+
## Abdeckung
|
|
31
|
+
|
|
32
|
+
- Abdeckung ist ein Minimum, kein Ziel — 80% Abdeckung mit schlechten Tests ist schlechter als 60% mit guten Tests
|
|
33
|
+
- Jedes neue Feature benötigt mindestens einen Happy-Path-Test und einen Error-Path-Test
|
|
34
|
+
- Jeder Bugfix benötigt einen Regressionstest, der den Bug erkannt hätte
|
|
35
|
+
|
|
36
|
+
## Testdaten
|
|
37
|
+
|
|
38
|
+
- Factories oder Fixtures verwenden — niemals User-IDs, E-Mails oder UUIDs in Tests hardcoden
|
|
39
|
+
- Tests müssen isoliert sein — kein gemeinsamer veränderbarer State zwischen Tests
|
|
40
|
+
- Tests müssen deterministisch sein — keine Zufallsdaten, keine zeitabhängigen Assertions ohne Mockierung der Uhr
|
|
41
|
+
- Nach jedem Test bereinigen — Tabellen abschneiden, Mocks zurücksetzen, erstellte Dateien löschen
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
> **Mit uns arbeiten:** Claudient wird von [Uitbreiden](https://uitbreiden.com/) unterstützt — wir bauen KI-Produkte und B2B-Lösungen mit Entwickler-Communities. [uitbreiden.com](https://uitbreiden.com/)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
> 🇪🇸 Esta es la traducción en español. [Versión en inglés](../coding-style.md).
|
|
2
|
+
|
|
3
|
+
# Reglas de Estilo de Código
|
|
4
|
+
|
|
5
|
+
Copia las secciones relevantes en el `CLAUDE.md` de tu proyecto.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Nomenclatura
|
|
10
|
+
|
|
11
|
+
- Variables y funciones: `camelCase` (JS/TS), `snake_case` (Python, Go, Rust)
|
|
12
|
+
- Clases y tipos: `PascalCase` en todos los lenguajes
|
|
13
|
+
- Constantes: `SCREAMING_SNAKE_CASE` solo para constantes verdaderas que nunca cambian
|
|
14
|
+
- Variables booleanas: prefijo con `is`, `has`, `can`, `should` — `isActive`, `hasPermission`
|
|
15
|
+
- No abrevies nombres a menos que la abreviatura sea universalmente conocida (`id`, `url`, `db`, `ctx`)
|
|
16
|
+
|
|
17
|
+
## Funciones
|
|
18
|
+
|
|
19
|
+
- Una responsabilidad por función — si necesitas "y" en la descripción, divídela
|
|
20
|
+
- Máximo 40 líneas por función; si es más larga, extrae sub-funciones
|
|
21
|
+
- Sin parámetros booleanos — usa un objeto de opciones o dos funciones separadas
|
|
22
|
+
- Retorno anticipado para cláusulas de guarda — no anides el camino feliz dentro de condicionales
|
|
23
|
+
|
|
24
|
+
## Comentarios
|
|
25
|
+
|
|
26
|
+
- No escribas comentarios a menos que el POR QUÉ no sea obvio
|
|
27
|
+
- Nunca escribas comentarios que describan lo que hace el código (el código ya lo hace)
|
|
28
|
+
- Escribe un comentario cuando: hay una restricción oculta, una solución para un bug específico, o comportamiento que sorprendería al lector
|
|
29
|
+
- Nunca escribas comentarios TODO — crea un issue rastreado en su lugar
|
|
30
|
+
|
|
31
|
+
## Manejo de errores
|
|
32
|
+
|
|
33
|
+
- Nunca ignores errores silenciosamente (`catch (e) {}` siempre está mal)
|
|
34
|
+
- Siempre maneja los errores en el límite donde puedas tomar acción
|
|
35
|
+
- Propaga los errores hacia arriba con contexto — envuelve con el ID o nombre de operación relevante
|
|
36
|
+
- No uses `console.error` en código de producción — usa el logger del proyecto
|
|
37
|
+
|
|
38
|
+
## Organización de archivos
|
|
39
|
+
|
|
40
|
+
- Una exportación primaria por archivo
|
|
41
|
+
- Los nombres de archivo coinciden con su exportación primaria: `UserService.ts` exporta `UserService`
|
|
42
|
+
- Sin archivos barrel (`index.ts` re-exportaciones) — importa directamente desde el archivo fuente
|
|
43
|
+
- Agrupa las importaciones: paquetes externos primero, luego módulos internos, luego importaciones relativas
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
> **Trabaja con nosotros:** Claudient está respaldado por [Uitbreiden](https://uitbreiden.com/) — construimos productos de IA y soluciones B2B con comunidades de desarrolladores. [uitbreiden.com](https://uitbreiden.com/)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
> 🇪🇸 Esta es la traducción en español. [Versión en inglés](../git.md).
|
|
2
|
+
|
|
3
|
+
# Reglas de Git
|
|
4
|
+
|
|
5
|
+
Copia las secciones relevantes en el `CLAUDE.md` de tu proyecto.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Mensajes de commit
|
|
10
|
+
|
|
11
|
+
- Formato: `tipo: descripción corta` (modo imperativo, ≤ 72 caracteres)
|
|
12
|
+
- Tipos: `feat`, `fix`, `docs`, `refactor`, `test`, `chore`, `perf`
|
|
13
|
+
- Ejemplos: `feat: add webhook signature verification`, `fix: handle null user in auth middleware`
|
|
14
|
+
- Sin mensajes genéricos: "update", "changes", "fix bug", "wip" no son aceptables
|
|
15
|
+
- Cuerpo (opcional): explica el POR QUÉ, no el qué. El diff muestra el qué.
|
|
16
|
+
|
|
17
|
+
## Ramas
|
|
18
|
+
|
|
19
|
+
- Ramas de funcionalidades: `feat/descripción-corta`
|
|
20
|
+
- Correcciones de bugs: `fix/descripción-corta`
|
|
21
|
+
- Nunca hagas commit directamente en `main` o `master`
|
|
22
|
+
- Elimina las ramas después de hacer merge
|
|
23
|
+
|
|
24
|
+
## Qué nunca hacer commit
|
|
25
|
+
|
|
26
|
+
- Archivos `.env` o cualquier archivo que contenga secretos
|
|
27
|
+
- `node_modules/`, `__pycache__/`, artefactos de build
|
|
28
|
+
- Configuraciones personales del editor (`.idea/`, `.vscode/settings.json`)
|
|
29
|
+
- Archivos > 10MB (usa git-lfs o almacenamiento externo)
|
|
30
|
+
- Archivos generados que pueden reproducirse desde el código fuente
|
|
31
|
+
|
|
32
|
+
## Antes de hacer push
|
|
33
|
+
|
|
34
|
+
- Ejecuta las pruebas localmente — nunca hagas push en rojo
|
|
35
|
+
- Revisa tu propio diff antes de cada push: `git diff origin/main...HEAD`
|
|
36
|
+
- Aplasta los commits WIP antes de hacer push a una rama compartida
|
|
37
|
+
- Nunca hagas force-push en `main` ni en ninguna rama compartida
|
|
38
|
+
|
|
39
|
+
## Comandos peligrosos — siempre confirmar antes de ejecutar
|
|
40
|
+
|
|
41
|
+
- `git reset --hard` — destruye los cambios sin commit permanentemente
|
|
42
|
+
- `git clean -f` — elimina archivos sin rastrear permanentemente
|
|
43
|
+
- `git push --force` — reescribe el historial remoto
|
|
44
|
+
- `git stash drop` — descarta permanentemente los cambios guardados en stash
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
> **Trabaja con nosotros:** Claudient está respaldado por [Uitbreiden](https://uitbreiden.com/) — construimos productos de IA y soluciones B2B con comunidades de desarrolladores. [uitbreiden.com](https://uitbreiden.com/)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
> 🇪🇸 Esta es la traducción en español. [Versión en inglés](../performance.md).
|
|
2
|
+
|
|
3
|
+
# Reglas de Rendimiento
|
|
4
|
+
|
|
5
|
+
Copia las secciones relevantes en el `CLAUDE.md` de tu proyecto.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Base de datos
|
|
10
|
+
|
|
11
|
+
- Nunca ejecutes consultas dentro de bucles — agrupa con `IN (...)` o usa un join
|
|
12
|
+
- Siempre pagina las consultas que pueden devolver resultados ilimitados — sin `SELECT *` sin `LIMIT`
|
|
13
|
+
- Agrega índices antes de que la consulta sea lenta en producción, no después — analiza los planes de consulta durante el desarrollo
|
|
14
|
+
- Selecciona solo las columnas que necesitas — `SELECT *` obtiene datos no usados e impide escaneos solo de índice
|
|
15
|
+
- Usa agregación a nivel de base de datos (`COUNT`, `SUM`, `GROUP BY`) — no cargues filas en memoria para contarlas
|
|
16
|
+
|
|
17
|
+
## API y red
|
|
18
|
+
|
|
19
|
+
- Cachea las respuestas que son costosas de calcular y cambian poco — establece TTLs explícitos
|
|
20
|
+
- Pagina los endpoints de lista — devuelve un máximo de N elementos por solicitud con un cursor u offset
|
|
21
|
+
- No hagas consultas N+1 — agrupa los datos relacionados con DataLoader, `include` o un join
|
|
22
|
+
- Evita llamadas síncronas a servicios externos en los manejadores de solicitudes — usa colas para el trabajo no crítico
|
|
23
|
+
- Establece timeouts en todas las llamadas HTTP externas — nunca dejes que una dependencia lenta bloquee tu servidor
|
|
24
|
+
|
|
25
|
+
## Memoria
|
|
26
|
+
|
|
27
|
+
- No cargues grandes conjuntos de datos en memoria para procesarlos — usa streaming o paginación
|
|
28
|
+
- Libera las referencias cuando termines — evita closures accidentales que impidan la recolección de basura
|
|
29
|
+
- Usa generadores/iteradores para secuencias grandes en lugar de construir listas completas en memoria
|
|
30
|
+
|
|
31
|
+
## Medición
|
|
32
|
+
|
|
33
|
+
- Perfila antes de optimizar — nunca adivines dónde está el cuello de botella
|
|
34
|
+
- Mide en condiciones similares a producción — los benchmarks locales son engañosos
|
|
35
|
+
- Establece una línea base antes de hacer cambios — sin una línea base, no puedes confirmar la mejora
|
|
36
|
+
- Las pruebas de rendimiento pertenecen al CI — las regresiones que pasan la revisión de código pero fallan el presupuesto de rendimiento deben detectarse automáticamente
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
> **Trabaja con nosotros:** Claudient está respaldado por [Uitbreiden](https://uitbreiden.com/) — construimos productos de IA y soluciones B2B con comunidades de desarrolladores. [uitbreiden.com](https://uitbreiden.com/)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
> 🇪🇸 Esta es la traducción en español. [Versión en inglés](../security.md).
|
|
2
|
+
|
|
3
|
+
# Reglas de Seguridad
|
|
4
|
+
|
|
5
|
+
Copia las secciones relevantes en el `CLAUDE.md` de tu proyecto.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Secretos
|
|
10
|
+
|
|
11
|
+
- Nunca pongas secretos en el código fuente — ni en comentarios, ni en archivos de test, ni en configs de ejemplo
|
|
12
|
+
- Nunca registres secretos — verifica que las llamadas al logger no incluyan campos `password`, `token`, `key`, `secret` o `credential`
|
|
13
|
+
- Usa variables de entorno para todos los secretos; léelos al inicio, valida que existen
|
|
14
|
+
- Rota los secretos que hayan sido accidentalmente comprometidos — trata cualquier secreto comprometido como comprometido
|
|
15
|
+
|
|
16
|
+
## Validación de entradas
|
|
17
|
+
|
|
18
|
+
- Valida todas las entradas en los límites del sistema: parámetros de API, query strings, cuerpos de solicitudes, cargas de archivos, variables de entorno
|
|
19
|
+
- Valida el tipo, formato, longitud y rango — no solo la presencia
|
|
20
|
+
- Usa una lista de permitidos (valores válidos) no una lista de bloqueados (valores bloqueados) donde sea posible
|
|
21
|
+
- Nunca uses la entrada del usuario directamente en consultas SQL, comandos de shell, rutas de archivo o HTML sin saneamiento
|
|
22
|
+
|
|
23
|
+
## Autenticación y autorización
|
|
24
|
+
|
|
25
|
+
- Verifica la autenticación en cada solicitud que lo requiera — nunca confíes en el enrutamiento del frontend
|
|
26
|
+
- Verifica la autorización (el usuario puede hacer ESTA acción) separadamente de la autenticación (el usuario ha iniciado sesión)
|
|
27
|
+
- Las verificaciones de autorización deben referenciar al usuario autenticado desde el contexto de la solicitud — nunca desde un parámetro de consulta
|
|
28
|
+
- La expiración del token debe ser forzada en el servidor — nunca confíes en las marcas de tiempo de token proporcionadas por el cliente
|
|
29
|
+
|
|
30
|
+
## Bases de datos
|
|
31
|
+
|
|
32
|
+
- Usa consultas parametrizadas u ORM — nunca concatenes cadenas SQL
|
|
33
|
+
- Los usuarios de la base de datos deben tener los permisos mínimos requeridos — el usuario de la app no debe tener acceso DDL
|
|
34
|
+
- Nunca expongas errores internos de la base de datos a los clientes — registra en el servidor, devuelve un error genérico al cliente
|
|
35
|
+
|
|
36
|
+
## Dependencias
|
|
37
|
+
|
|
38
|
+
- Fija las versiones de las dependencias — nunca uses `*` o `latest` en producción
|
|
39
|
+
- Ejecuta `npm audit` / `pip-audit` / `govulncheck` antes de cada lanzamiento
|
|
40
|
+
- Elimina las dependencias no utilizadas — cada dependencia es una superficie de ataque potencial
|
|
41
|
+
- Revisa el código fuente de las nuevas dependencias antes de agregarlas
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
> **Trabaja con nosotros:** Claudient está respaldado por [Uitbreiden](https://uitbreiden.com/) — construimos productos de IA y soluciones B2B con comunidades de desarrolladores. [uitbreiden.com](https://uitbreiden.com/)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
> 🇪🇸 Esta es la traducción en español. [Versión en inglés](../testing.md).
|
|
2
|
+
|
|
3
|
+
# Reglas de Testing
|
|
4
|
+
|
|
5
|
+
Copia las secciones relevantes en el `CLAUDE.md` de tu proyecto.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Qué probar
|
|
10
|
+
|
|
11
|
+
- Prueba el comportamiento a través de APIs públicas — no los detalles de implementación interna
|
|
12
|
+
- Las pruebas deben sobrevivir al refactoring: si renombrar una función privada rompe las pruebas, las pruebas están mal
|
|
13
|
+
- Prueba los casos límite: entradas nulas/vacías, valores de frontera, rutas de error
|
|
14
|
+
- No pruebes el código del framework ni los builtins del lenguaje
|
|
15
|
+
|
|
16
|
+
## Estructura de las pruebas
|
|
17
|
+
|
|
18
|
+
- Una aserción lógica por prueba — si una prueba verifica múltiples cosas no relacionadas, divídela
|
|
19
|
+
- Los nombres de las pruebas describen LO QUE hace el sistema, no CÓMO: `"returns 404 when user not found"` no `"test findUser"`
|
|
20
|
+
- Preparar → Actuar → Asegurar — un bloque cada uno, sin entrelazar
|
|
21
|
+
- Sin lógica condicional en las pruebas — si necesitas un `if`, escribe dos pruebas
|
|
22
|
+
|
|
23
|
+
## Mocking
|
|
24
|
+
|
|
25
|
+
- No hagas mock de módulos internos — solo haz mock en los límites del sistema (APIs externas, bases de datos, sistema de archivos)
|
|
26
|
+
- Nunca hagas mock de la clase/módulo bajo prueba
|
|
27
|
+
- Las pruebas de integración deben usar la base de datos real — usa una base de datos de prueba, no mocks
|
|
28
|
+
- Si una prueba unitaria requiere 5+ mocks, el código probablemente no está bien estructurado
|
|
29
|
+
|
|
30
|
+
## Cobertura
|
|
31
|
+
|
|
32
|
+
- La cobertura es un suelo, no un objetivo — 80% de cobertura con malas pruebas es peor que 60% con buenas pruebas
|
|
33
|
+
- Cada nueva funcionalidad necesita al menos una prueba del camino feliz y una del camino de error
|
|
34
|
+
- Cada corrección de bug necesita una prueba de regresión que habría detectado el bug
|
|
35
|
+
|
|
36
|
+
## Datos de prueba
|
|
37
|
+
|
|
38
|
+
- Usa factories o fixtures — nunca hardcodees IDs de usuario, emails o UUIDs en las pruebas
|
|
39
|
+
- Las pruebas deben estar aisladas — sin estado mutable compartido entre pruebas
|
|
40
|
+
- Las pruebas deben ser deterministas — sin datos aleatorios, sin aserciones dependientes del tiempo sin mockear el reloj
|
|
41
|
+
- Limpia después de cada prueba — trunca las tablas, reinicia los mocks, elimina los archivos creados
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
> **Trabaja con nosotros:** Claudient está respaldado por [Uitbreiden](https://uitbreiden.com/) — construimos productos de IA y soluciones B2B con comunidades de desarrolladores. [uitbreiden.com](https://uitbreiden.com/)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
> 🇫🇷 This is the French translation. [English version](../coding-style.md).
|
|
2
|
+
|
|
3
|
+
# Règles de Style de Code
|
|
4
|
+
|
|
5
|
+
Copiez les sections pertinentes dans le `CLAUDE.md` de votre projet.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Nommage
|
|
10
|
+
|
|
11
|
+
- Variables et fonctions : `camelCase` (JS/TS), `snake_case` (Python, Go, Rust)
|
|
12
|
+
- Classes et types : `PascalCase` dans tous les langages
|
|
13
|
+
- Constantes : `SCREAMING_SNAKE_CASE` uniquement pour les vraies constantes qui ne changent jamais
|
|
14
|
+
- Variables booléennes : préfixer avec `is`, `has`, `can`, `should` — `isActive`, `hasPermission`
|
|
15
|
+
- Ne pas abréger les noms sauf si l'abréviation est universellement connue (`id`, `url`, `db`, `ctx`)
|
|
16
|
+
|
|
17
|
+
## Fonctions
|
|
18
|
+
|
|
19
|
+
- Une responsabilité par fonction — si vous avez besoin de "et" dans la description, séparez-la
|
|
20
|
+
- Maximum 40 lignes par fonction ; si plus long, extraire des sous-fonctions
|
|
21
|
+
- Pas de paramètres booléens — utiliser un objet d'options ou deux fonctions séparées
|
|
22
|
+
- Retourner tôt pour les clauses de garde — ne pas imbriquer le chemin heureux dans des conditionnels
|
|
23
|
+
|
|
24
|
+
## Commentaires
|
|
25
|
+
|
|
26
|
+
- N'écrire aucun commentaire sauf si le POURQUOI n'est pas évident
|
|
27
|
+
- Ne jamais écrire des commentaires qui décrivent ce que fait le code (le code le fait déjà)
|
|
28
|
+
- Écrire un commentaire quand : il y a une contrainte cachée, un contournement pour un bug spécifique, ou un comportement qui surprendrait un lecteur
|
|
29
|
+
- Ne jamais écrire des commentaires TODO — créer un problème suivi à la place
|
|
30
|
+
|
|
31
|
+
## Gestion des erreurs
|
|
32
|
+
|
|
33
|
+
- Ne jamais avaler silencieusement les erreurs (`catch (e) {}` est toujours faux)
|
|
34
|
+
- Toujours gérer les erreurs à la limite où vous pouvez agir
|
|
35
|
+
- Propager les erreurs vers le haut avec du contexte — envelopper avec l'ID ou le nom d'opération pertinent
|
|
36
|
+
- Ne pas utiliser `console.error` dans le code de production — utiliser le logger du projet
|
|
37
|
+
|
|
38
|
+
## Organisation des fichiers
|
|
39
|
+
|
|
40
|
+
- Un export primaire par fichier
|
|
41
|
+
- Les noms de fichiers correspondent à leur export primaire : `UserService.ts` exporte `UserService`
|
|
42
|
+
- Pas de fichiers barrel (`index.ts` qui réexporte) — importer directement depuis le fichier source
|
|
43
|
+
- Grouper les imports : packages externes d'abord, puis modules internes, puis imports relatifs
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
> **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,48 @@
|
|
|
1
|
+
> 🇫🇷 This is the French translation. [English version](../git.md).
|
|
2
|
+
|
|
3
|
+
# Règles Git
|
|
4
|
+
|
|
5
|
+
Copiez les sections pertinentes dans le `CLAUDE.md` de votre projet.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Messages de commit
|
|
10
|
+
|
|
11
|
+
- Format : `type: courte description` (mode impératif, ≤ 72 caractères)
|
|
12
|
+
- Types : `feat`, `fix`, `docs`, `refactor`, `test`, `chore`, `perf`
|
|
13
|
+
- Exemples : `feat: add webhook signature verification`, `fix: handle null user in auth middleware`
|
|
14
|
+
- Pas de messages génériques : "update", "changes", "fix bug", "wip" ne sont pas acceptables
|
|
15
|
+
- Corps (optionnel) : expliquer le POURQUOI, pas le quoi. Le diff montre le quoi.
|
|
16
|
+
|
|
17
|
+
## Branches
|
|
18
|
+
|
|
19
|
+
- Branches de fonctionnalités : `feat/short-description`
|
|
20
|
+
- Corrections de bugs : `fix/short-description`
|
|
21
|
+
- Ne jamais committer directement sur `main` ou `master`
|
|
22
|
+
- Supprimer les branches après fusion
|
|
23
|
+
|
|
24
|
+
## Ce qu'il ne faut jamais committer
|
|
25
|
+
|
|
26
|
+
- Fichiers `.env` ou tout fichier contenant des secrets
|
|
27
|
+
- `node_modules/`, `__pycache__/`, artefacts de build
|
|
28
|
+
- Paramètres d'éditeur personnels (`.idea/`, `.vscode/settings.json`)
|
|
29
|
+
- Fichiers > 10 Mo (utiliser git-lfs ou un stockage externe)
|
|
30
|
+
- Fichiers générés qui peuvent être reproduits depuis la source
|
|
31
|
+
|
|
32
|
+
## Avant de pousser
|
|
33
|
+
|
|
34
|
+
- Exécuter les tests localement — ne jamais pousser en rouge
|
|
35
|
+
- Relire votre propre diff avant chaque push : `git diff origin/main...HEAD`
|
|
36
|
+
- Squasher les commits WIP avant de pousser sur une branche partagée
|
|
37
|
+
- Ne jamais force-pousser sur `main` ou toute branche partagée
|
|
38
|
+
|
|
39
|
+
## Commandes dangereuses — toujours confirmer avant d'exécuter
|
|
40
|
+
|
|
41
|
+
- `git reset --hard` — détruit les modifications non committées de façon permanente
|
|
42
|
+
- `git clean -f` — supprime les fichiers non suivis de façon permanente
|
|
43
|
+
- `git push --force` — réécrit l'historique distant
|
|
44
|
+
- `git stash drop` — supprime définitivement les modifications mises en attente
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
> **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,40 @@
|
|
|
1
|
+
> 🇫🇷 This is the French translation. [English version](../performance.md).
|
|
2
|
+
|
|
3
|
+
# Règles de Performance
|
|
4
|
+
|
|
5
|
+
Copiez les sections pertinentes dans le `CLAUDE.md` de votre projet.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Base de données
|
|
10
|
+
|
|
11
|
+
- Ne jamais exécuter des requêtes dans des boucles — regrouper avec `IN (...)` ou utiliser une jointure
|
|
12
|
+
- Toujours paginer les requêtes qui peuvent retourner des résultats non bornés — pas de `SELECT *` sans `LIMIT`
|
|
13
|
+
- Ajouter des index avant que la requête soit lente en production, pas après — analyser les plans de requête pendant le développement
|
|
14
|
+
- Sélectionner uniquement les colonnes dont vous avez besoin — `SELECT *` récupère des données inutilisées et empêche les scans index-only
|
|
15
|
+
- Utiliser l'agrégation au niveau base de données (`COUNT`, `SUM`, `GROUP BY`) — ne pas charger des lignes en mémoire pour les compter
|
|
16
|
+
|
|
17
|
+
## API et réseau
|
|
18
|
+
|
|
19
|
+
- Mettre en cache les réponses coûteuses à calculer et qui changent peu — définir des TTLs explicites
|
|
20
|
+
- Paginer les endpoints de liste — retourner un maximum de N éléments par requête avec un curseur ou un offset
|
|
21
|
+
- Ne pas faire de requêtes N+1 — regrouper les données liées avec DataLoader, `include`, ou une jointure
|
|
22
|
+
- Éviter les appels synchrones vers des services externes dans les gestionnaires de requêtes — utiliser des queues pour les tâches non critiques
|
|
23
|
+
- Définir des timeouts sur tous les appels HTTP externes — ne jamais laisser une dépendance lente bloquer votre serveur
|
|
24
|
+
|
|
25
|
+
## Mémoire
|
|
26
|
+
|
|
27
|
+
- Ne pas charger de grands jeux de données en mémoire pour les traiter — streamer ou paginer
|
|
28
|
+
- Libérer les références quand c'est terminé — éviter les fermetures accidentelles qui empêchent le garbage collection
|
|
29
|
+
- Utiliser des générateurs/itérateurs pour les grandes séquences plutôt que de construire des listes complètes en mémoire
|
|
30
|
+
|
|
31
|
+
## Mesure
|
|
32
|
+
|
|
33
|
+
- Profiler avant d'optimiser — ne jamais deviner où est le goulot d'étranglement
|
|
34
|
+
- Mesurer dans des conditions similaires à la production — les benchmarks locaux sont trompeurs
|
|
35
|
+
- Établir une baseline avant de faire des changements — sans baseline, vous ne pouvez pas confirmer l'amélioration
|
|
36
|
+
- Les tests de performance appartiennent à la CI — une régression qui passe la revue de code mais échoue le budget de performance doit être détectée automatiquement
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
> **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/)
|