Files
SnapOtter/apps/docs/nl/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

6.5 KiB

description, i18n_source_hash, i18n_provenance, i18n_output_hash, i18n_hash_version
description i18n_source_hash i18n_provenance i18n_output_hash i18n_hash_version
Hoe je kunt bijdragen aan SnapOtter. Bugmeldingen, functieverzoeken, pull requests en CLA-vereisten. 6c920a5f83e0 human 90ecc9252cbc 2

Bijdragen

Bedankt voor je interesse om bij te dragen. Deze gids beschrijft hoe je kunt meedoen, wat we accepteren en hoe je begint.

Manieren om bij te dragen

Issues (geen installatie vereist)

  • Bugmeldingen - Werkt er iets niet? Open een bugmelding met stappen om het te reproduceren.
  • Functieverzoeken - Heb je een idee? Start een discussie zodat de community erop kan reageren en erop kan stemmen.
  • Vertaalproblemen - Zie je een verkeerde of ontbrekende vertaling? Open een vertaalprobleem.
  • Documentatieproblemen - Klopt er iets niet in de documentatie? Open een documentatieprobleem.

Code (vereist CLA)

We accepteren pull requests voor:

Type Proces
Bugfixes Open direct een PR (link de issue als die bestaat)
Nieuwe vertalingen Open direct een PR (zie Vertaalgids)
Documentatieverbeteringen Open direct een PR
Verbeteringen aan testdekking Open direct een PR
Nieuwe tools of functies Start eerst een discussie; een maintainer zet goedgekeurde ideeën om in een bijgehouden issue voordat je code schrijft
Refactors of architectuurwijzigingen Start eerst een discussie en wacht op goedkeuring van een maintainer voordat je code schrijft

Wat we niet accepteren

  • Wijzigingen aan CI/CD-workflows, release-configuratie of linter-/compilerconfiguratie
  • PR's zonder een ondertekende Contributor License Agreement
  • PR's met meer dan 400 gewijzigde regels (splits groot werk op in kleinere PR's)
  • Functies die niet vooraf zijn besproken en goedgekeurd
  • Wijzigingen aan packages/ai/ zonder voorafgaand overleg

Contributor License Agreement

Voordat we je eerste PR kunnen samenvoegen, moet je onze Individual CLA ondertekenen. Dit is een eenmalige vereiste.

Waarom: SnapOtter heeft een duale licentie (AGPLv3 + commercieel). De CLA geeft ons het recht om je bijdragen onder beide licenties te verspreiden. Je behoudt het volledige auteursrecht op je werk.

Hoe: Wanneer je je eerste PR opent, plaatst de CLA Assistant-bot een reactie met een link. Klik erop, bekijk de overeenkomst en onderteken met je GitHub-account. Kost 30 seconden.

Als je bijdraagt namens je werkgever en je werkgever de IP-rechten op je werk behoudt, neem dan contact op met contact@snapotter.com om een Corporate CLA te regelen voordat je iets indient.

Aan de slag

Vereisten

  • Node.js 22.22+
  • pnpm 9+
  • Python 3.11+ (alleen voor AI-tools)
  • Docker (optioneel, voor volledige integratietests)

Installatie

# 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

Controles uitvoeren

Zorg voordat je een PR indient dat alle controles lokaal slagen:

pnpm lint          # Biome lint + format check
pnpm typecheck     # TypeScript across monorepo
pnpm test          # Vitest unit + integration tests

Pull request-proces

  1. Fork de repo en maak een branch aan vanaf main (feat/my-feature of fix/issue-123)
  2. Breng je wijzigingen aan in gerichte, beoordeelbare commits met conventional commits
  3. Voeg tests toe of werk ze bij voor je wijzigingen
  4. Voer pnpm lint && pnpm typecheck && pnpm test lokaal uit
  5. Open een PR tegen main en vul het sjabloon in
  6. Onderteken de CLA als daarom wordt gevraagd
  7. Wacht tot CI slaagt en een maintainer het beoordeelt

Beoordelingsverwachtingen

  • We streven ernaar om binnen 7 dagen op PR's te reageren
  • Kleine, gerichte PR's worden sneller beoordeeld
  • Als je binnen 7 dagen niets hebt gehoord, plaats dan een reactie om de thread te pingen
  • We kunnen wijzigingen vragen, een andere aanpak voorstellen of de PR sluiten als die niet aansluit bij de richting van het project

Nadat je PR is samengevoegd

Je bijdrage wordt opgenomen in de volgende release en vermeld in de changelog.

Goede eerste issues

Op zoek naar iets om aan te werken? Bekijk onze good first issues voor toegankelijke taken, of help wanted voor grotere onderdelen waarbij we hulp uit de community waarderen.

Codestijl

  • Biome verzorgt de opmaak en linting (dubbele aanhalingstekens, puntkomma's, inspringen met 2 spaties)
  • De pre-commit-hook voert biome check --write automatisch uit op gestagede bestanden
  • Als de linter klaagt, pas dan de code aan (wijzig de Biome-configuratie niet)
  • Overal ES-modules (import/export)
  • Conventional commits: feat:, fix:, refactor:, docs:, test:, chore:

Zie voor volledige architectuurdetails de Ontwikkelaarsgids.

Beveiliging

Open geen publieke PR of issue voor beveiligingslekken. Meld ze privé via GitHub Security Advisories of e-mail contact@snapotter.com. Zie SECURITY.md voor alle details.

Vragen?