#Değişiklik kaydı

Bu dosya kurulum sahibi için yazılır: yükseltmeden önce neyin değiştiğini ve dikkat etmesi gereken bir şey olup olmadığını buradan okur. Geliştirme günlüğü değil — kararların gerekçesi ve teknik ayrıntı docs/00-ilerleme.md içinde.

Biçim Keep a Changelog, sürümler anlamsal sürümleme.

#Sürüm numarası ne anlatır

x.y.z — anlamsal sürümleme.

  • x artar: geriye uyumsuz değişiklik. Arayüzde ya da API'de bir şeyin adı, yeri veya davranışı, mevcut kurulumları etkileyecek şekilde değişti.
  • y artar: yeni yetenek, yeni ekran, geriye uyumlu davranış değişikliği.
  • z artar: yalnızca hata düzeltmesi.

1.0.0 ne söz veriyor, ne söylemiyor. 1.0.0 arayüzün ve API'nin artık kararlı olduğunu söylüyor: bundan sonra kırıcı bir değişiklik ana sürüm numarasını yükseltir. Söylemediği şey ürünün "bitmiş" olduğu — V2 kapsamı (Git entegrasyonu, dashboard raporları, otomasyon, genel API) duruyor.

Sürüm numarası faz kapanışı DEĞİLDİR. docs/02-fonksiyonlar.md §6'daki V1 çıkış kriteri — Notussoft dışından en az üç ekip ürünü düzenli kullanmaya başladı — 1.0.0 ile karşılanmış olmuyor. İkisi ayrı sorunun cevabı: sürüm "sözleşme kararlı mı", faz "ürün sahada mı". CLAUDE.md faz tablosu bu yüzden hâlâ V1'i aktif gösteriyor ve bu bir tutarsızlık değil.

#Geriye uyumluluk sözü

Yükseltme veri kaybettirmez. Kolon silme ve yeniden adlandırma iki aşamada yapılır: önce yeni kolon eklenir ve çift yazılır, ancak sonraki bir sürümde eskisi kaldırılır. Yani bir sürüm atlamadığınız sürece göçler her zaman ileriye uyumludur.

Bir sürüm geri dönmek desteklenir, iki sürüm geri dönmek desteklenmez: aradaki göçler geri alınmaz. Yükseltmeden önce yedek almak bu yüzden prosedürün parçası (docs/self-hosted.md §3).

Zorunlu bir el müdahalesi varsa bu dosyada "⚠ Yükseltme notu" olarak yazılır. Öyle bir not yoksa docker compose pull && docker compose up -d yeterlidir.


#Yayınlanmadı

#Değişti

  • Ayarların ikinci adı kaldırıldı — .env artık uygulamanın okuduğu adları kullanıyor. NOTUSSHIP_SMTP_HOST gibi adlar yerine NotusShip__Email__Host. Tam liste deploy/.env.example içinde; docs/self-hosted.md §5 bir göç bölümü taşıyor.

Sebep bir kusurdu ve yaşandı: eski adları uygulamanın adlarına çeviren şey docker-compose.yml'di, dolayısıyla çeviri yalnızca compose konteyneri başlatan şeyse oluyordu. Ortam değişkenini doğrudan enjekte eden bir platformda eski adlar girilir, konteynerin içinde görünür ve hiç okunmaz — hata yok, log yok, ayar sessizce kapalı. Çeviri tablosu üstelik üç compose dosyasında aynı bile değildi.

> ⚠ Yükseltme notu. .env dosyanızdaki isteğe bağlı ayarların adlarını > değiştirin. Zorunlu değerler ve POSTGRES_* etkilenmiyor — > NOTUSSHIP_MODE, NOTUSSHIP_LICENSE, NOTUSSHIP_PROXY_COUNT, > NOTUSSHIP_IMAGE, NOTUSSHIP_PORT, NOTUSSHIP_BIND de aynı kalıyor. > > Değiştirmeyi unuttuğunuz bir ad sessiz kalmıyor: uygulama açılışta > gördüğü ama okumadığı her değişkeni ve yerine yazılacak adı log'a yazıyor. > Değer asla yazılmıyor, yalnızca ad. > > Çevirirken tek tuzak: sayı ve doğru/yanlış ayarlarını boş bırakmayın. > NotusShip__Email__Port= gibi boş bir satır, ayarsız bir satırla aynı şey > değil — uygulama Failed to convert configuration value '' diyerek kapanır. > Değeri yazın ya da satırı yorum yapın. (Eski compose bunu gizliyordu.)

  • Operatöre bakan her metin artık İngilizce. Sunucu logları, CLI komut çıktıları, açılış hataları ve sağlık yoklaması açıklamaları Türkçe yerine İngilizce sabit. Arayüz etkilenmiyor — o iki dilli ve kullanıcının tercihine göre çalışmaya devam ediyor.

Sebep: bir hata mesajını arama motorunda aratan kişi sonuç bulabilmeli, ve dokümanların İngilizce sürümü operatöre okuyamayacağı çıktılar üreten komutlar söylüyordu.

> ⚠ Yükseltme notu. Log satırlarına göre kurulmuş bir uyarı kuralınız varsa > (Uptime Kuma, Grafana, grep'li bir cron) desenler değişti. En sık > kullanılanlar: Veritabanı güncel, uygulanacak migration yok. → > Database is up to date, no migrations to apply., Yedekleme çalışmayacak: > → Backups will not run:, zorunlu yapılandırma eksik → > required configuration is missing.

  • api-token-issue --gun yerine --days. Eski ad çalışmaya devam ediyor; betiğinizi değiştirmeniz gerekmiyor. Kullanım satırında yalnızca yenisi yazıyor.

#Düzeltildi

  • Uygulama açılamadığında çıkan hata şeridi artık dilinizi izliyor. Şerit Blazor'dan önce var olduğu için yerelleştiriciye ulaşamıyordu ve İngilizce kullananlara Türkçe görünüyordu — üstelik en çok yardıma ihtiyaç duyulan anda.
  • Sayfanın lang niteliği artık seçilen dile göre yazılıyor. Sabit tr olduğu için ekran okuyucular İngilizce arayüzü Türkçe telaffuz ediyordu.

#1.0.0 — (21 Ağustos 2026)

Arayüz ve API kararlı ilan edildi. V1 kapsamının kod tarafı tamamlandı: çoklu organizasyon, davet ve roller, şifre kurtarma, i18n (TR + EN), wiki, e-posta bildirimleri, global arama, zaman çizelgesi ve raporu, S3 depolama, iOS uygulaması ve self-hosted paketi.

Bu sürüm faz kapanışı değil. V1 çıkış kriteri (docs/02-fonksiyonlar.md §6) Notussoft dışından üç ekibin kurulumu; o karşılanmadı. 1.0.0'ın söylediği tek şey, arayüz ve API sözleşmesinin artık kırılmayacağı.

#Eklendi

  • Mobil uygulama (iOS) — henüz dağıtılmıyor. Sunucu adresi, giriş, dört sekmeli kabuk; "bana atananlar", gelen kutusu, issue detay (durum değiştirme, atama, yorum, kronometre), salt okunur board ve hızlı issue oluşturma. Oturum cihazda kalıyor. Kurulum sahibi için bugün bir eylem gerektirmiyor — indirilebilir bir sürüm yok ve sunucu tarafında değişiklik istemiyor. Buraya yazılmasının sebebi mobilin aynı sunucuya bağlanacak olması: self-hosted kurulumların dışarıdan erişilebilir bir adrese ve geçerli bir TLS sertifikasına ihtiyacı olacak.
  • Wiki — proje bazında sayfa ağacı (sürükle-bırak ile yeniden düzenleme), markdown depolama, araç çubuklu editör ve önizleme, sayfa şablonları (mimari karar kaydı, toplantı notu, teknik tasarım).
  • Wiki sürüm geçmişi — her kayıt bir sürüm, satır bazlı fark görünümü ve seçilen sürüme dönme. Geri alma geçmişi silmez, yeni bir sürüm üretir.
  • Issue referansları — metinde NSHIP-142 yazmak bağlantıya dönüşür; başlığı ve durumu üzerine gelince görünür. Wiki sayfalarında ve issue açıklamasında çalışır.
  • Şifre kurtarma — giriş ekranında "şifremi unuttum", e-postayla gelen tek kullanımlık bağlantı (1 saat geçerli), yeni şifre ekranı. Şifre değiştiğinde tüm oturumlar kapanır. E-posta yapılandırılmamış kurulumlarda ekran bunu açıkça söyler ve operatörün reset-password komutuna yönlendirir.
  • Gelişmiş arama — issue, proje ve kişi araması tam metin altyapısıyla (tsvector + GIN), yazım hatası toleransı ve Türkçe karakter duyarsızlığı. Kaydedilmiş filtreler.
  • E-posta bildirimleri — anlık veya günlük özet, kullanıcı başına ve organizasyon başına seçilebilir.
  • Çoklu organizasyon — aynı hesapla birden çok ekibe üyelik ve aralarında geçiş.
  • Zaman çizelgesi ve proje zaman raporu — haftalık görünüm, kişi ve issue bazında toplam, CSV dışa aktarma.
  • Arayüz dili — Türkçe ve İngilizce; kullanıcı başına dil ve zaman dilimi tercihi.
  • Ek dosyada görsel önizleme — görsel ekler indirilmeden pencerede açılır.
  • Issue açıklaması markdown — başlık, liste, tablo, kod bloğu ve alıntı gösteriliyor; düzenleme wiki ile aynı editörle.
  • Çalışan sürüm görünür — yan panelin dibinde, /api/version ucunda ve operatör için dotnet NotusShip.Api.dll version komutunda.
  • Aktivite akışı — proje ve organizasyon bazında son değişiklikler: issue açılışı, alan değişikliği ve yorumlar tek listede. Yan panelden erişilir.
  • Yeni proje açma — yan paneldeki PROJELER başlığında + düğmesi. Daha önce proje yalnızca ilk kurulum sihirbazında açılabiliyordu; sonradan ikinci bir proje açmanın hiçbir yolu yoktu.
  • Tamamlanmış sprintler görünür — backlog'da katlanmış bir bölüm: ad, tarih, tamamlanan puan, issue listesi ve velocity mini grafiği. Daha önce kapanmış bir sprinti ürünün hiçbir yerinden göremiyordunuz; velocity sayısı bile göremediğiniz verilerden hesaplanıyordu.
  • Backlog'ta satır içi düzenleme — durum, atanan ve öncelik artık satırda değiştirilebiliyor; issue detayına gitmek gerekmiyor.
  • S3-uyumlu dosya depolama (opsiyonel) — MinIO, Cloudflare R2, Backblaze B2 ve DigitalOcean Spaces dahil. Yerel disk varsayılan kalıyor; S3'e geçmek için kova adını ve erişim bilgilerini vermek yeterli. Depolama anahtarları iki sağlayıcıda aynı biçimde olduğu için geçiş veritabanına dokunmayı gerektirmez — dosyaları kopyalayıp ayarları doldurmak yeterli (deploy/.env.example).

#Değişti

  • Sunucunun döndürdüğü doğrulama hataları artık kullanıcıya ulaşıyor. Bazı formlar hatanın sebebini yutup genel bir "kaydedilemedi" gösteriyordu.
  • Wiki editörü rich-text değil markdown. TipTap denendi ve JS paketleyicisi olmadan kurulamadı; ölçümler docs/00-ilerleme.md içinde. Depolama zaten markdown olduğu için yazılan şey depolanan şeyle aynı.

#Düzeltildi

  • Seçilen tema sayfa yenilendiğinde kayboluyordu. Tercih artık hesabınızda saklanıyor (başka cihazda da geçerli) ve sayfa açılırken hemen uygulanıyor — yenilemede bir an yanlış tema görünmüyor.
  • Organizasyon logosu — organizasyon ayarlarından yükleyin; yan panelde adın yanında görünür. PNG, JPEG veya WebP; en fazla 512 KB.
  • Arşivlenen proje geri alınabiliyor: organizasyon ayarlarında arşivlenmiş projelerin listesi ve "Arşivden çıkar" var. Önceden arşiv tek yönlü bir kapıydı — arşivlenen projeye bir daha ulaşılamıyordu.
  • Issue detayı "bana atananlar" ve aktivite akışında da yerinde açılıyor; hiçbiri artık board'a götürmüyor.
  • Backlog'da issue detayı yerinde açılıyor: satıra tıklamak artık board'a götürmüyor, panel backlog'un yanında açılıyor ve kapatınca backlog'da kalıyorsunuz.
  • Backlog canlı güncelleniyor: ekip arkadaşınızın sprinte çektiği ya da durumunu değiştirdiği issue, sayfayı yenilemeden görünüyor.
  • Eşzamanlılık çakışması artık 500 değil: aynı kayda kısa aralıkla iki güncelleme gittiğinde "beklenmeyen bir hata" yerine ne olduğunu söyleyen bir mesaj geliyor.
  • Hızlı issue oluşturmada açıklama alanına yazılamıyordu — alana tıklandığında imleç anında başlığa dönüyor, yazılan metin başlığa gidiyordu.
  • Backlog'da oluşturulan issue listede görünmüyordu; sayfayı yenilemek gerekiyordu, bu yüzden aynı issue iki kez oluşturulabiliyordu.
  • Adresle açılan issue panelinin kapat düğmesi çalışmıyordu (backlog, aktivite akışı veya "bana atananlar" üzerinden açıldığında).
  • Tamamlanmış sprint listesi ilk 10'da kesiliyordu; artık tamamı görünüyor.
  • Backlog satırındaki issue anahtarı bağlantı olduğunu göstermiyordu; tıklanabilirdi ama yalnızca üstüne gelince belli oluyordu.
  • Ekran okuyucu: issue panelindeki altı düzenlenebilir alanın adı birebir aynıydı ("Değiştirmek için tıkla"); artık alan adı ve değeri birlikte okunuyor.
  • İngilizce seçildiğinde arayüz bir an İngilizce görünüp Türkçeye dönüyordu.
  • Backlog satırından issue detayına çıkmanın hiçbir yolu yoktu.
  • Wiki editöründe Yaz sekmesine her dönüşte bir hata şeridi çıkıyordu ve imleç metne gitmiyordu.
  • Hızlı issue oluşturmada "Başka ekle" ile ikinci kaydı girerken önceki açıklama ekranda kalıyordu.

#0.1.0 — V0 (18 Ağustos 2026)

İlk çalışan sürüm. Kapsam, bir yazılım ekibinin sprintini baştan sona yürütmesi:

  • Organizasyon, proje ve issue yönetimi; issue anahtarı (NSHIP-142), tür, öncelik, atanan, etiket, alt görev ve issue bağlantıları.
  • Kanban board — sürükle-bırak, kolon tanımları, filtreler.
  • Sprint ve backlog — sprint başlatma/tamamlama, story point, velocity.
  • Zaman takibi — kronometre ve elle süre girişi.
  • Uygulama içi bildirimler ve gelen kutusu, canlı güncelleme (SignalR).
  • Dosya ekleri, yorumlar ve issue geçmişi.
  • Davet akışı, üç rol (Owner, Member, Viewer).
  • Lisans anahtarı — çevrimdışı doğrulanan imzalı anahtar; anahtarsız kurulum 3 kullanıcılık ücretsiz kademede çalışır.
  • Self-hosted paketi — tek Docker imajı, docker compose, açılışta otomatik göç, gece yedeği ve geri yükleme prosedürü.
⚠ Yükseltme notu (0.1.0'a ilk yükseltmede). Kullanıcılar bir kez sert yenileme yapmalı (Cmd/Ctrl + Shift + R). Daha eski sürümler index.html'i önbelleklenebilir servis ediyordu ve tarayıcıda kalan o kopya artık var olmayan dosya adlarını istiyor. Sunucu bunu düzeltemez. Bu sürümden sonra tekrarlamaz.

#Sürüm çıkarma (bakımcı için)

  1. Directory.Build.props içindeki VersionPrefix değerini yükselt.
  2. Bu dosyada "Yayınlanmadı" başlığını sürüm numarası ve tarihiyle değiştir, üstüne yeni bir "Yayınlanmadı" bölümü aç.
  3. Etiketle ve imajı kur:
git tag v1.0.0 && git push --tags
docker build -f deploy/Dockerfile \
  --build-arg NOTUSSHIP_COMMIT="$(git rev-parse --short HEAD)" \
  -t ghcr.io/notussoft/notusship:v1.0.0 \
  -t ghcr.io/notussoft/notusship:latest .

NOTUSSHIP_COMMIT verilmezse sürüm yalnızca anlamsal numarayı taşır. Verildiğinde version komutu 1.0.0+abc1234 yazar — hangi commit'in ayakta olduğu tartışma konusu olmaz.

GHCR paketi hiçbir zaman public yapılmaz (docs/dagitim.md).