mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
A release-readiness QA pass over the whole product. The commits split into defects a user would hit and gates that were reporting green while measuring nothing. ## Fixes that change behaviour Rate limiting was bypassable on every install: TRUST_PROXY defaulted to true, so request.ip came from a client-set header and a forged X-Forwarded-For got past the login limiter. The default is now a private-network trust list. A transient Postgres outage stranded in-flight jobs, leaving finished output on disk with no row pointing at it. A reconciler now resolves those rows and adopts the bytes rather than dropping the work. A Redis connection that moved to a new address wedged every read-blocked consumer, so completions stopped signalling while health still answered 200. Socket timeouts plus subscriber pings recover it. Installing more than one AI bundle left the shared venv multi-versioned and silently broke three tools. The installer now reconciles distributions to one version each. Converting an image to JXL at quality 1 through 4 returned a 500, because libjxl 0.7 rejects the distance those values compute. The quality is floored at what the encoder honours. A missing ffmpeg was also reported to the user as a corrupt upload; it now says the engine is unavailable. RAW uploads reached an unpatched LibRaw on arm64, so it is built from source at 0.22.2, and the release scan was split so it can fail on an unfixed critical instead of hiding it behind ignore-unfixed. ## Gates that could not fail Two mutation lanes ran zero mutants because Stryker crawled the gitignored docs build; coverage discarded its whole report on any failing test; the lint gate skipped root tests, scripts, and two workspaces; and several generated matrices counted a host missing ffmpeg as a passing tool. Each now measures what it claims. Full evidence and the outstanding release items are tracked locally and are not part of this branch.
133 lines
6.5 KiB
Markdown
133 lines
6.5 KiB
Markdown
---
|
|
description: "Så bidrar du till SnapOtter. Buggrapporter, funktionsförslag, pull requests och CLA-krav."
|
|
i18n_source_hash: 6c920a5f83e0
|
|
i18n_provenance: human
|
|
i18n_output_hash: b0a61ebb3e0d
|
|
i18n_hash_version: 2
|
|
---
|
|
|
|
# Bidra {#contributing}
|
|
|
|
Tack för att du vill bidra. Den här guiden beskriver hur du deltar, vad vi accepterar och hur du kommer igång.
|
|
|
|
## Sätt att bidra {#ways-to-contribute}
|
|
|
|
### Ärenden (ingen konfiguration krävs) {#issues-no-setup-required}
|
|
|
|
- **Buggrapporter** - Något som är trasigt? Öppna en [buggrapport](https://github.com/snapotter-hq/snapotter/issues/new?template=bug_report.yml) med reproduktionssteg.
|
|
- **Funktionsförslag** - Har du en idé? Starta en [diskussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) så att gemenskapen kan väga in och rösta på den.
|
|
- **Översättningsproblem** - Hittade du en felaktig eller saknad översättning? Öppna ett [översättningsärende](https://github.com/snapotter-hq/snapotter/issues/new?template=translation.yml).
|
|
- **Dokumentationsproblem** - Något som inte stämmer i dokumentationen? Öppna ett [dokumentationsärende](https://github.com/snapotter-hq/snapotter/issues/new?template=documentation.yml).
|
|
|
|
### Kod (kräver CLA) {#code-requires-cla}
|
|
|
|
Vi accepterar pull requests för:
|
|
|
|
| Typ | Process |
|
|
|------|---------|
|
|
| Buggfixar | Öppna en PR direkt (länka ärendet om ett finns) |
|
|
| Nya översättningar | Öppna en PR direkt (se [Översättningsguide](/sv/guide/translations)) |
|
|
| Dokumentationsförbättringar | Öppna en PR direkt |
|
|
| Förbättrad testtäckning | Öppna en PR direkt |
|
|
| Nya verktyg eller funktioner | Starta en [diskussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) först; en underhållare omvandlar godkända idéer till ett spårat ärende innan du skriver kod |
|
|
| Refaktoreringar eller arkitekturändringar | Starta en [diskussion](https://github.com/snapotter-hq/snapotter/discussions/new?category=ideas) först och invänta godkännande från en underhållare innan du skriver kod |
|
|
|
|
### Vad vi inte accepterar {#what-we-will-not-accept}
|
|
|
|
- Ändringar av CI/CD-arbetsflöden, release-konfiguration eller linter/kompilator-konfiguration
|
|
- PR:er utan ett signerat [Contributor License Agreement](#contributor-license-agreement)
|
|
- PR:er med över 400 rader ändring (dela upp stort arbete i mindre PR:er)
|
|
- Funktioner som inte först har diskuterats och godkänts
|
|
- Ändringar av `packages/ai/` utan föregående diskussion
|
|
|
|
## Contributor License Agreement {#contributor-license-agreement}
|
|
|
|
Innan vi kan slå samman din första PR måste du signera vårt [individuella CLA](https://github.com/snapotter-hq/snapotter/blob/main/CLA.md). Det här är ett engångskrav.
|
|
|
|
**Varför:** SnapOtter är dubbellicensierat (AGPLv3 + kommersiellt). CLA:t ger oss rätten att distribuera dina bidrag under båda licenserna. Du behåller full upphovsrätt till ditt arbete.
|
|
|
|
**Hur:** När du öppnar din första PR kommenterar CLA Assistant-boten med en länk. Klicka på den, granska avtalet och signera med ditt GitHub-konto. Det tar 30 sekunder.
|
|
|
|
Om du bidrar för din arbetsgivares räkning och din arbetsgivare behåller de immateriella rättigheterna till ditt arbete, kontakta contact@snapotter.com för att ordna ett Corporate CLA innan du skickar in.
|
|
|
|
## Kom igång {#getting-started}
|
|
|
|
### Förutsättningar {#prerequisites}
|
|
|
|
- Node.js 22.22+
|
|
- pnpm 9+
|
|
- Python 3.11+ (endast för AI-verktyg)
|
|
- Docker (valfritt, för fullständig integrationstestning)
|
|
|
|
### Konfiguration {#setup}
|
|
|
|
```bash
|
|
# Fork and clone
|
|
git clone https://github.com/<your-username>/snapotter.git
|
|
cd snapotter
|
|
|
|
# Start Postgres + Redis for local dev
|
|
docker compose -f docker-compose.dev.yml up -d
|
|
|
|
# Install dependencies
|
|
pnpm install
|
|
|
|
# Start dev servers (web on :1351, API on :13490)
|
|
pnpm dev
|
|
```
|
|
|
|
### Köra kontroller {#running-checks}
|
|
|
|
Innan du skickar in en PR, se till att alla kontroller passerar lokalt:
|
|
|
|
```bash
|
|
pnpm lint # Biome lint + format check
|
|
pnpm typecheck # TypeScript across monorepo
|
|
pnpm test # Vitest unit + integration tests
|
|
```
|
|
|
|
## Pull request-processen {#pull-request-process}
|
|
|
|
1. Forka repot och skapa en gren från `main` (`feat/my-feature` eller `fix/issue-123`)
|
|
2. Gör dina ändringar i fokuserade, granskningsbara commits med [conventional commits](https://www.conventionalcommits.org/)
|
|
3. Lägg till eller uppdatera tester för dina ändringar
|
|
4. Kör `pnpm lint && pnpm typecheck && pnpm test` lokalt
|
|
5. Öppna en PR mot `main` och fyll i mallen
|
|
6. Signera CLA:t om du uppmanas
|
|
7. Invänta att CI passerar och att en underhållare granskar
|
|
|
|
### Vad du kan förvänta dig av granskningen {#review-expectations}
|
|
|
|
- Vi strävar efter att svara på PR:er inom 7 dagar
|
|
- Små, fokuserade PR:er granskas snabbare
|
|
- Om du inte har hört något inom 7 dagar, lämna en kommentar som pingar tråden
|
|
- Vi kan begära ändringar, föreslå ett annat tillvägagångssätt eller stänga PR:en om den inte stämmer med projektets inriktning
|
|
|
|
### Efter att din PR har slagits samman {#after-your-pr-is-merged}
|
|
|
|
Ditt bidrag kommer att inkluderas i nästa release och krediteras i ändringsloggen.
|
|
|
|
## Bra första ärenden {#good-first-issues}
|
|
|
|
Letar du efter något att arbeta med? Kolla våra [bra första ärenden](https://github.com/snapotter-hq/snapotter/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) för nybörjarvänliga uppgifter, eller [hjälp önskas](https://github.com/snapotter-hq/snapotter/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) för större poster där vi skulle uppskatta hjälp från gemenskapen.
|
|
|
|
## Kodstil {#code-style}
|
|
|
|
- Biome sköter formatering och linting (dubbla citattecken, semikolon, 2 blanksteg indrag)
|
|
- Pre-commit-hooken kör `biome check --write` på stagade filer automatiskt
|
|
- Om lintern klagar, fixa koden (ändra inte Biome-konfigurationen)
|
|
- ES-moduler överallt (`import`/`export`)
|
|
- Conventional commits: `feat:`, `fix:`, `refactor:`, `docs:`, `test:`, `chore:`
|
|
|
|
För fullständiga arkitekturdetaljer, se [Utvecklarguiden](/sv/guide/developer).
|
|
|
|
## Säkerhet {#security}
|
|
|
|
**Öppna inte en offentlig PR eller ett ärende för säkerhetssårbarheter.** Rapportera dem privat via [GitHub Security Advisories](https://github.com/snapotter-hq/snapotter/security/advisories/new) eller e-post contact@snapotter.com. Se [SECURITY.md](https://github.com/snapotter-hq/snapotter/blob/main/SECURITY.md) för fullständiga detaljer.
|
|
|
|
## Frågor? {#questions}
|
|
|
|
- [Dokumentation](https://docs.snapotter.com/)
|
|
- [Discord](https://discord.gg/hr3s7HPUsr)
|
|
- [GitHub Discussions](https://github.com/snapotter-hq/snapotter/discussions)
|