Files
neta/docs/self-hosted-redesign/release-readiness-2026-07-18.md

6.1 KiB
Raw Permalink Blame History

title, description, status, audited_at
title description status audited_at
Neta Self-Hosted v3 Release Readiness 2026-07-18 Supabase çıkışı, dependency, build, runtime, Docker ve production cutover denetimi. release-candidate 2026-07-18

Neta Self-Hosted v3 release readiness — 2026-07-18

Sonuç

Repository teknik olarak Supabase'siz self-host release adayıdır.

  • Uygulamanın build veya runtime aşamasında Supabase paketi, client/helper, environment değişkeni, SQL ağacı veya servis bağlantısı yoktur.
  • İş verisi SQLite + Drizzle, auth Better Auth, dosyalar persistent local data volume üzerinden çalışır.
  • Supabase environment değişkenleri özellikle unset edilerek production build ve standalone runtime doğrulanmıştır.
  • Temiz Docker build, startup migration, non-root runtime, healthcheck, persistent volume ve restart smoke başarılıdır.
  • Lokal geliştirme ve Docker aynı pnpm@11.5.1 ile tek canonical pnpm-lock.yaml kullanır.

Bu sonuç gerçek production cutover'ın yapıldığı anlamına gelmez. Production verisi ve altyapı yetkisi workspace'te bulunmadığı için son export/import, DNS ve gerçek kullanıcı smoke adımları ortam sahibi tarafından yürütülmelidir.

Supabase denetimi

Kaldırılan aktif release kalıntıları:

  • supabase/ altındaki PostgreSQL schema, migration, seed ve setup dosyaları
  • docs/database/ altındaki eski Supabase/PostgreSQL migration kayıtları
  • Supabase kurulumunu anlatan çelişkili numaralı v2 belgeleri
  • takip edilen geçici .artifacts logları ve Python bytecode çıktısı

Doğrulanan sınırlar:

  • @supabase/ssr ve @supabase/supabase-js dependency/lockfile ağacında yok
  • NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY ve SUPABASE_SERVICE_ROLE_KEY runtime sözleşmesinde yok
  • app, components, config, lib, server, proxy ve Next config içinde Supabase runtime importu yok
  • .next production server/static çıktısında Supabase paket, env veya supabase.co referansı yok
  • release boundary eski supabase/ ve docs/database/ ağaçlarının yeniden eklenmesini hata olarak kabul ediyor

Repository'de kalan supabase kelimeleri tarihsel dönüşüm belgeleri, regresyon sınırı testleri ve offline veri import aracıdır. scripts/import-supabase.mjs hazırlanmış bir export bundle'ını diskten okur; Supabase SDK kullanmaz, Supabase'e bağlanmaz ve uygulama runtime'ına import edilmez. Mevcut kurulumların verisini korumak için bilinçli olarak tutulmuştur.

Bu denetimde düzeltilen release sorunları

  1. Repo genelindeki ESLint hata ve uyarıları giderildi; props-state senkronizasyon effect'leri deterministik override modellerine taşındı, any kullanımları tiplendi ve görseller Next Image'a alındı.
  2. next/font/google kaldırıldı. Üretim build'i artık Google Fonts ağına bağlanmadan sistem font stack'iyle deterministik tamamlanır.
  3. Standalone build'in public ve static asset'leri eksiksiz paketlemesi için postbuild hazırlığı eklendi.
  4. pnpm start, output: standalone ile uyumsuz next start yerine doğrudan standalone server'ı çalıştırır.
  5. Docker ve lokal geliştirme arasındaki npm/pnpm lockfile ayrışması kaldırıldı. package-lock.json silindi; Docker frozen canonical pnpm lockfile kullanır.
  6. Docker native dependency build scriptleri pnpm-workspace.yaml içindeki dar allowlist ile sınırlandı.
  7. Docker build'deki gereksiz ikinci dependency kurulumu kaldırıldı.

Doğrulama kanıtları

Başarılı kontroller:

  • pnpm lint
  • pnpm typecheck
  • Faz 1 migration, persistence, backup retention, restore ve checksum smoke
  • Faz 2 auth/domain smoke
  • Faz 3 storage smoke
  • Faz 4 UI boundary
  • Faz 5 freelancer backend boundary/smoke
  • Faz 6 portal boundary/smoke ve cross-client negatif akışlar
  • Faz 7 AI/business boundary/smoke
  • Faz 8 offline import dry-run/apply/idempotency/rollback smoke
  • Faz 8 source ve build artifact release boundary
  • Faz 9 API boundary/smoke
  • Supabase environment değişkenleri olmadan production build
  • Standalone migration, liveness, readiness, /register, public asset ve static CSS smoke
  • Docker Node 22 build, Next 16.2.10, non-root nextjs user, startup migration ve readiness
  • Aynı persistent volume ile Docker restart sonrası readiness
  • git diff --check

Readiness yanıtında dataDirWritable, databaseReachable ve migrationsApplied kontrollerinin tamamı true dönmüştür.

Güvenlik audit'i

Canonical production ağacında high veya critical advisory yoktur. pnpm audit --prod iki moderate bulgu raporlar:

  1. Eski esbuild, Better Auth'ın opsiyonel Drizzle Kit/tooling zinciri üzerinden gelir. Advisory, esbuild development server'ın başka sitelere okunabilir yanıt vermesiyle ilgilidir; Neta production container'ı esbuild development server çalıştırmaz.
  2. Next'in kendi içinde taşıdığı eski PostCSS sürümü için stringify advisory'si vardır. Neta production'da kullanıcıdan CSS alıp build/stringify etmez; PostCSS yalnızca güvenilen source build'inde çalışır.

Audit'in önerdiği zorunlu downgrade/force fix framework ve migration tooling'i uyumsuz sürümlere taşıdığı için uygulanmamıştır. Upstream Next ve Drizzle/Better Auth zinciri güncellendiğinde lockfile yenilenip audit tekrar çalıştırılmalıdır.

Yayın öncesi kalan zorunlu dış adımlar

Gerçek production deploy için aşağıdakiler hâlâ ortam sahibinin sorumluluğundadır:

  • güçlü ve benzersiz BETTER_AUTH_SECRET
  • HTTPS reverse proxy ve doğru APP_URL, NEXT_PUBLIC_SITE_URL, gerekirse TRUSTED_ORIGINS
  • kalıcı /app/data volume'u ve host-level şifreli/off-site backup
  • mevcut kurulum varsa maintenance/read-only, final export, import dry-run/final import
  • gerçek satır, dosya ve checksum karşılaştırması
  • owner hesabı ve kritik owner/client akışlarının production smoke'u
  • DNS geçişi ve tanımlı rollback penceresi

Ürün seviyesinde Faz 10'un sayfa bazlı responsive, accessibility, light/dark ve kullanıcı kabul checklist'leri master planda açık kalmaktadır. Bu maddeler teknik Supabase çıkışını engellemez; “Neta Self-Hosted v3 tamamen tamamlandı” etiketi için ayrıca kapatılmalıdır.