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.
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
- Fork de repo en maak een branch aan vanaf
main(feat/my-featureoffix/issue-123) - Breng je wijzigingen aan in gerichte, beoordeelbare commits met conventional commits
- Voeg tests toe of werk ze bij voor je wijzigingen
- Voer
pnpm lint && pnpm typecheck && pnpm testlokaal uit - Open een PR tegen
mainen vul het sjabloon in - Onderteken de CLA als daarom wordt gevraagd
- 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 --writeautomatisch 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.