- **Fehlerberichte** - Etwas kaputt? Öffne einen [Fehlerbericht](https://github.com/snapotter-hq/snapotter/issues/new?template=bug_report.yml) mit Schritten zur Reproduktion.
- **Feature-Anfragen** - Hast du eine Idee? Starte eine [Diskussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas), damit die Community sich einbringen und dafür stimmen kann.
- **Übersetzungsprobleme** - Eine falsche oder fehlende Übersetzung entdeckt? Öffne ein [Übersetzungs-Issue](https://github.com/snapotter-hq/snapotter/issues/new?template=translation.yml).
- **Dokumentationsprobleme** - Etwas stimmt in der Dokumentation nicht? Öffne ein [Dokumentations-Issue](https://github.com/snapotter-hq/snapotter/issues/new?template=documentation.yml).
### Code (erfordert CLA) {#code-requires-cla}
Wir nehmen Pull Requests an für:
| Typ | Ablauf |
|------|---------|
| Fehlerbehebungen | Öffne direkt einen PR (verlinke das Issue, falls eines existiert) |
| Neue Übersetzungen | Öffne direkt einen PR (siehe [Übersetzungsleitfaden](/de/guide/translations)) |
| Verbesserungen an der Dokumentation | Öffne direkt einen PR |
| Verbesserungen der Testabdeckung | Öffne direkt einen PR |
| Neue Tools oder Features | Starte zuerst eine [Diskussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas); ein Maintainer überführt genehmigte Ideen in ein nachverfolgtes Issue, bevor du Code schreibst |
| Refactorings oder Architekturänderungen | Starte zuerst eine [Diskussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) und warte auf die Freigabe eines Maintainers, bevor du Code schreibst |
### Was wir nicht annehmen {#what-we-will-not-accept}
- Änderungen an CI/CD-Workflows, Release-Konfiguration oder Linter-/Compiler-Konfiguration
- PRs ohne unterzeichnete [Contributor License Agreement](#contributor-license-agreement)
- PRs mit mehr als 400 geänderten Zeilen (teile große Arbeiten in kleinere PRs auf)
- Features, die nicht zuvor besprochen und genehmigt wurden
- Änderungen an `packages/ai/` ohne vorherige Absprache
Bevor wir deinen ersten PR mergen können, musst du unsere [Individual CLA](https://github.com/snapotter-hq/snapotter/blob/main/CLA.md) unterzeichnen. Das ist eine einmalige Voraussetzung.
**Warum:** SnapOtter ist dual lizenziert (AGPLv3 + kommerziell). Die CLA gewährt uns das Recht, deine Beiträge unter beiden Lizenzen zu verbreiten. Du behältst das volle Urheberrecht an deiner Arbeit.
**Wie:** Wenn du deinen ersten PR öffnest, kommentiert der CLA-Assistant-Bot mit einem Link. Klicke darauf, prüfe die Vereinbarung und unterzeichne mit deinem GitHub-Konto. Das dauert 30 Sekunden.
Wenn du im Auftrag deines Arbeitgebers beiträgst und dein Arbeitgeber die IP-Rechte an deiner Arbeit behält, wende dich an contact@snapotter.com, um vor der Einreichung eine Corporate CLA zu vereinbaren.
Stelle vor dem Einreichen eines PR sicher, dass alle Prüfungen lokal bestehen:
```bash
pnpm lint # Biome lint + format check
pnpm typecheck # TypeScript across monorepo
pnpm test# Vitest unit + integration tests
```
## Ablauf eines Pull Requests {#pull-request-process}
1. Forke das Repository und erstelle einen Branch von `main` (`feat/my-feature` oder `fix/issue-123`)
2. Nimm deine Änderungen in fokussierten, überprüfbaren Commits mit [Conventional Commits](https://www.conventionalcommits.org/) vor
3. Füge Tests für deine Änderungen hinzu oder aktualisiere sie
4. Führe `pnpm lint && pnpm typecheck && pnpm test` lokal aus
5. Öffne einen PR gegen `main` und fülle die Vorlage aus
6. Unterzeichne die CLA, falls du dazu aufgefordert wirst
7. Warte, bis die CI besteht und ein Maintainer den PR prüft
### Was du bei der Prüfung erwarten kannst {#review-expectations}
- Wir bemühen uns, innerhalb von 7 Tagen auf PRs zu reagieren
- Kleine, fokussierte PRs werden schneller geprüft
- Wenn du nach 7 Tagen nichts gehört hast, hinterlasse einen Kommentar und pinge den Thread an
- Wir können Änderungen anfordern, einen anderen Ansatz vorschlagen oder den PR schließen, wenn er nicht zur Projektausrichtung passt
### Nachdem dein PR gemergt wurde {#after-your-pr-is-merged}
Dein Beitrag wird im nächsten Release enthalten sein und im Changelog vermerkt.
## Gute erste Issues {#good-first-issues}
Suchst du etwas, woran du arbeiten kannst? Sieh dir unsere [guten ersten Issues](https://github.com/snapotter-hq/snapotter/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) für einsteigerfreundliche Aufgaben an oder [help wanted](https://github.com/snapotter-hq/snapotter/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) für größere Aufgaben, bei denen wir uns über Unterstützung aus der Community freuen.
## Codestil {#code-style}
- Biome übernimmt Formatierung und Linting (doppelte Anführungszeichen, Semikolons, Einrückung mit 2 Leerzeichen)
- Der Pre-Commit-Hook führt `biome check --write` automatisch auf gestagten Dateien aus
- Wenn der Linter meckert, behebe den Code (ändere nicht die Biome-Konfiguration)
Vollständige Architekturdetails findest du im [Entwicklerleitfaden](/de/guide/developer).
## Sicherheit {#security}
**Öffne keinen öffentlichen PR oder kein öffentliches Issue für Sicherheitslücken.** Melde sie privat über [GitHub Security Advisories](https://github.com/snapotter-hq/snapotter/security/advisories/new) oder per E-Mail an contact@snapotter.com. Alle Details findest du in [SECURITY.md](https://github.com/snapotter-hq/snapotter/blob/main/SECURITY.md).