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 |
|---|---|---|---|---|
| Så bidrar du till SnapOtter. Buggrapporter, funktionsförslag, pull requests och CLA-krav. | 6c920a5f83e0 | human | b0a61ebb3e0d | 2 |
Bidra
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
Ärenden (ingen konfiguration krävs)
- Buggrapporter - Något som är trasigt? Öppna en buggrapport med reproduktionssteg.
- Funktionsförslag - Har du en idé? Starta en diskussion 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.
- Dokumentationsproblem - Något som inte stämmer i dokumentationen? Öppna ett dokumentationsärende.
Kod (kräver 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) |
| Dokumentationsförbättringar | Öppna en PR direkt |
| Förbättrad testtäckning | Öppna en PR direkt |
| Nya verktyg eller funktioner | Starta en diskussion 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 först och invänta godkännande från en underhållare innan du skriver kod |
Vad vi inte accepterar
- Ändringar av CI/CD-arbetsflöden, release-konfiguration eller linter/kompilator-konfiguration
- PR:er utan ett signerat 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
Innan vi kan slå samman din första PR måste du signera vårt individuella CLA. 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
Förutsättningar
- Node.js 22.22+
- pnpm 9+
- Python 3.11+ (endast för AI-verktyg)
- Docker (valfritt, för fullständig integrationstestning)
Konfiguration
# 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
Innan du skickar in en PR, se till att alla kontroller passerar lokalt:
pnpm lint # Biome lint + format check
pnpm typecheck # TypeScript across monorepo
pnpm test # Vitest unit + integration tests
Pull request-processen
- Forka repot och skapa en gren från
main(feat/my-featureellerfix/issue-123) - Gör dina ändringar i fokuserade, granskningsbara commits med conventional commits
- Lägg till eller uppdatera tester för dina ändringar
- Kör
pnpm lint && pnpm typecheck && pnpm testlokalt - Öppna en PR mot
mainoch fyll i mallen - Signera CLA:t om du uppmanas
- Invänta att CI passerar och att en underhållare granskar
Vad du kan förvänta dig av granskningen
- 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
Ditt bidrag kommer att inkluderas i nästa release och krediteras i ändringsloggen.
Bra första ärenden
Letar du efter något att arbeta med? Kolla våra bra första ärenden för nybörjarvänliga uppgifter, eller hjälp önskas för större poster där vi skulle uppskatta hjälp från gemenskapen.
Kodstil
- Biome sköter formatering och linting (dubbla citattecken, semikolon, 2 blanksteg indrag)
- Pre-commit-hooken kör
biome check --writepå 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.
Säkerhet
Öppna inte en offentlig PR eller ett ärende för säkerhetssårbarheter. Rapportera dem privat via GitHub Security Advisories eller e-post contact@snapotter.com. Se SECURITY.md för fullständiga detaljer.