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.
7.1 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 |
|---|---|---|---|---|
| SnapOtter'a nasıl katkıda bulunulur. Hata bildirimleri, özellik istekleri, pull request'ler ve CLA gereksinimleri. | 6c920a5f83e0 | human | 817fbe39bf31 | 2 |
Katkıda Bulunma
Katkıda bulunmakla ilgilendiğiniz için teşekkürler. Bu kılavuz nasıl katılabileceğinizi, neleri kabul ettiğimizi ve nasıl başlayacağınızı anlatır.
Katkı yolları
Issue'lar (kurulum gerekmez)
- Hata bildirimleri - Bir şey mi bozuk? Yeniden üretme adımlarıyla birlikte bir hata bildirimi açın.
- Özellik istekleri - Bir fikriniz mi var? Topluluğun görüş bildirebilmesi ve oy verebilmesi için bir tartışma başlatın.
- Çeviri sorunları - Yanlış veya eksik bir çeviri mi gördünüz? Bir çeviri issue'su açın.
- Dokümantasyon sorunları - Dokümanlarda bir aksaklık mı var? Bir dokümantasyon issue'su açın.
Kod (CLA gerektirir)
Şu türde pull request'leri kabul ediyoruz:
| Tür | Süreç |
|---|---|
| Hata düzeltmeleri | Doğrudan bir PR açın (varsa ilgili issue'ya bağlayın) |
| Yeni çeviriler | Doğrudan bir PR açın (Çeviri Kılavuzu bölümüne bakın) |
| Dokümantasyon iyileştirmeleri | Doğrudan bir PR açın |
| Test kapsamı iyileştirmeleri | Doğrudan bir PR açın |
| Yeni araçlar veya özellikler | Önce bir tartışma başlatın; bir bakımcı, onaylanan fikirleri siz kod yazmadan önce izlenen bir issue'ya dönüştürür |
| Refactor veya mimari değişiklikler | Önce bir tartışma başlatın ve kod yazmadan önce bir bakımcının onayını bekleyin |
Kabul etmeyeceklerimiz
- CI/CD iş akışlarında, sürüm yapılandırmasında ya da linter/derleyici yapılandırmasında değişiklikler
- İmzalanmış bir Katkıda Bulunan Lisans Anlaşması olmayan PR'ler
- 400 satırdan fazla değişiklik içeren PR'ler (büyük çalışmaları daha küçük PR'lere bölün)
- Önceden tartışılıp onaylanmamış özellikler
- Önceden tartışmadan
packages/ai/dosyasında yapılan değişiklikler
Katkıda Bulunan Lisans Anlaşması
İlk PR'inizi birleştirebilmemizden önce Bireysel CLA anlaşmamızı imzalamanız gerekir. Bu tek seferlik bir gerekliliktir.
Neden: SnapOtter çift lisanslıdır (AGPLv3 + ticari). CLA, katkılarınızı her iki lisans altında dağıtma hakkını bize verir. Çalışmanızın tüm telif hakkı sahipliğini korursunuz.
Nasıl: İlk PR'inizi açtığınızda, CLA Assistant botu bir bağlantı içeren bir yorum bırakır. Bağlantıya tıklayın, anlaşmayı inceleyin ve GitHub hesabınızla imzalayın. 30 saniye sürer.
İşvereniniz adına katkıda bulunuyorsanız ve işvereniniz çalışmanız üzerindeki fikri mülkiyet haklarını elinde tutuyorsa, göndermeden önce bir Kurumsal CLA düzenlemek için contact@snapotter.com adresine yazın.
Başlarken
Ön koşullar
- Node.js 22.22+
- pnpm 9+
- Python 3.11+ (yalnızca AI araçları için)
- Docker (isteğe bağlı, tam entegrasyon testi için)
Kurulum
# 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
Kontrolleri çalıştırma
Bir PR göndermeden önce, tüm kontrollerin yerelde geçtiğinden emin olun:
pnpm lint # Biome lint + format check
pnpm typecheck # TypeScript across monorepo
pnpm test # Vitest unit + integration tests
Pull request süreci
- Repo'yu fork'layın ve
mainüzerinden bir dal oluşturun (feat/my-featureveyafix/issue-123) - Değişikliklerinizi conventional commits kullanarak odaklı, incelenebilir commit'lerde yapın
- Değişiklikleriniz için testler ekleyin ya da güncelleyin
pnpm lint && pnpm typecheck && pnpm testkomutunu yerelde çalıştırınmainüzerine bir PR açın ve şablonu doldurun- İstenirse CLA'yı imzalayın
- CI'nin geçmesini ve bir bakımcının incelemesini bekleyin
İnceleme beklentileri
- PR'lere 7 gün içinde yanıt vermeyi hedefliyoruz
- Küçük, odaklı PR'ler daha hızlı incelenir
- 7 gün içinde bir yanıt almadıysanız, konu başlığına bir yorum bırakıp bildirin
- Değişiklik isteyebilir, farklı bir yaklaşım önerebilir ya da PR projenin yönüyle uyumlu değilse kapatabiliriz
PR'iniz birleştirildikten sonra
Katkınız bir sonraki sürüme dahil edilir ve değişiklik günlüğünde size atıfta bulunulur.
İyi ilk issue'lar
Üzerinde çalışacak bir şey mi arıyorsunuz? Yeni başlayanlar için uygun görevler için good first issues listesine, ya da topluluk yardımından memnun olacağımız daha büyük işler için help wanted listesine göz atın.
Kod stili
- Biome biçimlendirme ve lint işini yürütür (çift tırnak, noktalı virgül, 2 boşluk girinti)
- Commit öncesi hook, staged dosyalarda
biome check --writekomutunu otomatik olarak çalıştırır - Linter şikayet ederse, kodu düzeltin (Biome yapılandırmasını değiştirmeyin)
- Her yerde ES modülleri (
import/export) - Conventional commit'ler:
feat:,fix:,refactor:,docs:,test:,chore:
Tam mimari ayrıntıları için Geliştirici Kılavuzu bölümüne bakın.
Güvenlik
Güvenlik açıkları için herkese açık bir PR ya da issue açmayın. Bunları GitHub Security Advisories üzerinden ya da contact@snapotter.com adresine e-posta yoluyla özel olarak bildirin. Tüm ayrıntılar için SECURITY.md dosyasına bakın.