Files
SnapOtter/apps/docs/sv/guide/contributing.md
T
SnapOtterandGitHub d10d0f544f fix: release QA hardening across processing, media, security, and CI gates (#649)
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.
2026-07-27 15:37:30 +08:00

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)