# imajViewer — Dokümantasyon İndeksi | Tarih | Dosya | Konu | |---|---|---| | 2026-11-10 | (bu satır) | **v1.9.2 tamlandı (Gitea release + commit + push)** — Ayarlar sekmeli dialog, hover rengi, grab imleci. Kullanıcı testi onaylı. Gitea release v1.9.2 (id 5) + asset, sha256 doğrulandı. Commit `701eafa` (feat) + `96dc8c6` (dist swap) zaten push edilmişti. Bu oturum: .deb yeniden build edildi (bağımlılık değişimi, 10.7M), pubspec.lock güncellendi, untracked test dosyaları temizlendi. Sistem kurulumu 1.7.0 → 1.9.2. Açık maddeler: dil desteği (placeholder var, uygulanmadı), hücreye snap (ileride). | | 2026-11-10 | [analiz-imajviewer2.md](analiz-imajviewer2.md) | **RAPOr — imajViewer2 Projesi Analizi** — AI görüntü manipülasyon tool'u + video oynatma. Hibrit mimari önerilir: yerel GPU üzerinde özel Python API server (model yükleme stratejisi), ComfyUI alternatif modeller için. img2img, txt2img, mask-based inpainting, image-to-video. Segment API img2img için uygun ($0.001-$0.0072), video için yerel model önerilir (SkyReels-V3, HunyuanVideo). Flutter client media_kit ile video playback. Model yönetimi stratejisi: aktif model GPU'de kalmalı, kullanıcı ayarlardan seçebilmeli. | | 2026-10-31 | [rapor-v192.md](rapor-v192.md) | **RAPOR — v1.9.2 yayınlandı** — Ayarlar dialog'u sekmeli (Genel/Boyut/Kısayollar), dış marginsiz tam-kaplayan panel, responsive ızgara + `H:W` etiketi, hover rengi ayarı (8 renk, `window.json`), başlık çubuğunda save gear'ın yanında + grab imleci, sıralama etiketleri tek kelime, footer cümlesi, kısayol fontu/sütunu. Commit `701eafa` + `96dc8c6` push; Gitea release **v1.9.2** (id 5) + asset, indirilen sha256 `0a4148a2…` doğrulandı; sistem kurulumu 1.7.0 → 1.9.2. Kullanıcı testi onaylı. Açık maddeler rapor §10 | | 2026-10-31 | [plan-settings-tabs.md](plan-settings-tabs.md) | **v1.9.2 YAYINDA (commit + push + release tamam)** — Ayarlar dialog'u sekmeli: `Genel` (sıralama + dosya özellikleri) / `Boyut` / `Kısayollar`, pill sekmeler (`SegmentedButton`, K-01a K-02a K-03a K-04b). `AlertDialog` → `Dialog` `insetPadding: zero`: dış margin ve yuvarlak köşe yok, panel geniş pencerede 520×560 ortada / dar pencerede pencereyi kaplar, `white12` ince border. Sekme başlıkları sekme etiketiyle aynı olduğu için iç başlıklar kaldırıldı. Finalize turu: sekme çubuğu tam genişlik (`expandedInsets`, etiketler ortada) + Boyut sekmesi ızgarası `Expanded` ile pencereyi kaplıyor (responsive hücreler). analyze 33 (baseline), debug build + kurulum `diff -rq` boş. **Kod değişti — çalışan uygulama eski build, kapat/aç gerekir** | | 2026-10-31 | (bu satır) | **EK FİKİR — dil desteği (uygulanmadı, yol haritası)** — Ayarlar > Genel sekmesinde altta `English / Türkçe / Français` seçeneği **disabled placeholder** olarak duruyor (31-10 kararı: yapıya girilmedi). Gerçek geçiş için gerekenler: (1) dil tercihi için kalıcı state (window.json benzeri settings dosyası) + `MaterialApp.locale`'e bağlama, (2) seçili dilin yeniden başlatmadan uygulanması (MaterialApp rebuild / locale notifier), (3) yeni diller için `app_.arb` dosyaları (fr vd.) — şu an yalnız tr/en var, (4) koda gömülü metinlerin (ör. `imajViewer $appVersion`, dil adları) l10n'e taşınması. Sıralama etiketleri tek kelimeye indirildiği için dar pencerede satır kırılması riski yok | | 2026-10-31 | [session-2026-10-31.md](session-2026-10-31.md) | **OTURUM ÖZETİ + DURUM** — v1.8.0 yayında (Gitea). **v1.9.0 YAYINDA (31-10 gece)**: commit a5969cf (feat) + 1a6de71 (dist swap), push; Gitea release **v1.9.0** (id 4) + .deb, download sha256 doğrulandı (63c1ec78…). Kapsam: taskbar dosya adı ✓, ikon 16–256 ✓, ayarlar sırası ✓, ızgara sabit 4 sütun ✓ (geniş/dar transpozesi kaldırıldı — kullanıcı kararı). **AÇIK BUG (kullanıcı testinde doğrulama bekliyor): büyük pencerede ayarlar dialog'u görünmüyor** — transpoze düzeltmesi bu bug'ın çözümü olarak uygulandı; sorun kalarsa kök neden adayı: Impeller + transparent window (session dosyasındaki Skia adımları). Sistem .deb kurulumu kullanıcıda: `sudo apt install ./dist/imajviewer_1.9.0_amd64.deb`. **v1.9.1 WIP (31-10):** compact üst bar + `Flexible` overflow düzeltmesi + **facelift UYGULANDI (bu oturum, detay: session §7)**: [plan-settings-facelift.md](plan-settings-facelift.md) — 520×560 cap'li ortalanmış dialog, M3 bölüm kartları, SegmentedButton sıralama, çift sütun kısayollar (17 l10n çifti, anahtar sütunu 160 px — ölçümle belirlendi, planın ~110 kırpardı), sabit footer, ızgara hücreleri 52×28. **Mekanizma sapması (testle doğrulandı):** planın `LayoutBuilder+Center`'ı açgözlü `Center`'a (dialog kısa içerikte bile pencere yüksekliğine inerdi) → düz `ConstrainedBox`; yapısal widget test: kompakt 568×231 / cap'li 568×600+scroll / küçük pencere 340×332. analyze 33 (dokunulan dosyalarda sıfır); debug build + kurulum `diff -rq` boş. **COMMIT YOK, PUSH YOK** — kullanıcı manuel testi bekleniyor; onay sonrası release akışı (plan §3.4) | | 2026-10-31 | [rapor-ikon-analizi.md](rapor-ikon-analizi.md) | **Rapor — ikon "sembolsüz" araştırması (canlı probe + render testi)** — Pencere ikonu düzgün (`_NET_WM_ICON` 256'dan, panel doğru çiziyor — ekran görüntüsü karşılaştırmasıyla doğrulandı). Kök neden (yüksek güven): hicolor'da **yalnız 64×64** var; 16/22 px'te (Thunar "Aç ile", Xfce app menüsü) sembol ölçeklemede kaybolup düz koyu kareye dönüyor. Yan bulgular: 10×10 unmapped hayalet pencere (framework, zararsız), ikon cache'leri aslında yerinde (`icon-theme.cache`), başlık C++'ta set ediliyor (`_NET_WM_NAME="imajviewer"`; `window_manager.setTitle` Linux'ta destekli — eklenti kaynağı doğrulandı), çift .desktop (sistem 1.7.0 + yerel). Düzeltme: plan-v190'ta | | 2026-10-31 | [plan-v190-taskbar-ikon.md](plan-v190-taskbar-ikon.md) | **PLAN v1.9.0 (onay bekliyor)** — (1) taskbar başlığı = açılan dosyanın adı (`windowManager.setTitle`, her pencere ayrı process → çakışma yok); (2) hicolor'a 16–256 boyut seti (deb + install.sh + mevcut kurulumlar). Karar matrisi 3 soru: sembolsüz görülen yer, 16/22 varyant, sürüm planı | | 2026-10-31 | (bu satır) | **v1.9.0** — Taskbar/alt-tab başlığı = açılan resmin dosya adı; hicolor ikon boyut seti 16–256 (8 boyut); ayarlar sırası (dosya özellikleri → boyut → sıralama); **boyut ızgarası sabit 4 sütun** (geniş/dar transpoze bu sürümde eklenip kaldırıldı — kullanıcı kararı: büyük pencerede ayarlar görünmüyordu). analyze 37 baseline (yeni yok); debug build + kullanıcı kurulumu `diff -rq` temiz. Commit a5969cf (feat) + 1a6de71 (dist swap), push. Release `.deb`: `dist/imajviewer_1.9.0_amd64.deb` (10,384,220 B, 63c1ec78…); Gitea release **v1.9.0** (id 4) + asset (`attachment`), download sha256 doğrulandı. **BEKLENİYOR:** sistem .deb eski — `sudo apt install ./dist/imajviewer_1.9.0_amd64.deb` komutu kullanıcıda; büyük pencere bug düzeltmesi (sabit 4 sütun) kullanıcı testinde doğrulanacak | | 2026-10-31 | (bu satır) | **v1.8.0** — Pencere boyutu ön ayarları (plan: [plan-window-size.md](plan-window-size.md)) + dosya özellikleri satırları sola yaslandı. Kullanıcı manuel test etti (ızgara butonları çalışıyor) → onay. Commit 9a7480c + dist swap eed0646, push edildi. Release `.deb`: `dist/imajviewer_1.8.0_amd64.deb` (10,280,908 B, 6a5f4304…); Gitea release **v1.8.0** (id 3, tag = main HEAD) + asset upload `attachment` alanıyla; download sha256 karşılaştırmayla doğrulandı. Debug build + kullanıcı kurulumu `diff -rq` temiz; analyze'de yeni hata/uyarı yok. **BEKLENİYOR:** sistem .deb hâlâ eski — agent sudo çalıştıramıyor; kurulum komutu kullanıcıya verildi | | 2026-10-31 | [plan-window-size.md](plan-window-size.md) | **v1.8.0 PLAN → UYGULANDI + doğrulandı (kullanıcı manuel test; detay: üstteki v1.8.0 satırı)** — Ayarlara "Size" bölümü: 8 sütun × 4 satır ızgara, **31 buton, 1:1 YOK** (title bar çift tık zaten tam ekran — DragToMoveArea). Etiket `a:b` = **H/a × W/b** (1:2 = sağ/sol yarım, 4:8 = en küçük parça ≈240×259 @1080p); sol-üst hücre boş placeholder. Work area = screen_retriever `visibleSize` (taskbar hariç, logical px). **Custom/seçim takibi YOK** — butonlar saf eylem (`setSize`, konum sabit). minimumSize 400×300 → **160×100** (4:8 için şart). Dosyalar: `window_persistence.dart` (+workAreaSize), yeni `widgets/window_size_selector.dart`, `viewer_screen.dart` (bölüm + onPick), `main.dart` (min size), l10n `sizeSection`, sürüm 1.8.0+19. Doğrulama + release akışı plan dosyasında; açık karar yok | | 2026-10-30 | (bu satır) | **Gitea releases kanalı aktifleşti** — 20-10'dan beri uncommitted kalmış README (GitHub badge/link → Gitea releases) + build-windows.ps1 (Inno Setup sürümü pubspec'ten aynalar) commit+push (8a80cba). Gitea'da ilk release: **v1.7.2** (tag = 8a80cba) + `imajviewer_1.7.2_amd64.deb`; download linki ile sha256 doğrulandı (212aba68…). Not: bu Gitea sürümünde asset upload form alanı `files` değil **`attachment`** (`POST /api/v1/repos/{o}/{r}/releases/{id}/assets` — alan `files` olunca 500 "http: no such file" dönüyor). Windows: acil değil; isteyen build-windows.ps1 ile kendisi derler. **BEKLENİYOR:** sistem .deb hâlâ 1.7.0 — agent sudo çalıştıramıyor (interaktif auth), kurulum komutu kullanıcıya verildi | | 2026-10-25 | (bu satır) | **v1.7.2** — Sağ tuş çift tık / rotate kaydı düzeltmesi (detay sonraki satırda). Kullanıcı manuel test etti (rotate + arka arkaya drag → kayıt dönmüş geliyor; sağ çift tık hâlâ sıfırlıyor) → onay. Release `.deb`: `dist/imajviewer_1.7.2_amd64.deb`; debug build + kullanıcı kurulumu `diff -rq` temiz; analyze'de yeni hata/uyarı yok | | 2026-10-25 | (bu satır) | **Sağ tuş çift tık / rotate kaydı düzeltmesi (1.7.2)** — Şikayet: 10+ crop-save testinin birinde rotate kayda gelmedi. Kayıt matematiği doğrulandı: `_cropRotated`/`_cropAxisAligned` deterministik; motorun EXIF yönü davranışı `bakeOrientation` ile aynı (ölçüldü: 100×50 + orientation 6 → motor 50×100, baked 50×100) → EXIF kaynaklı sapma yok. Gerçek neden: `_onPointerDown`'daki sağ-çift-tık sıfırlaması bir önceki **down** zamanı+konumuyla karşılaştırıyordu; bu yüzden aynı noktada 400 ms içinde başlayan iki rotate drag'i "çift tık" sayılıp tüm efektleri (rotate dahil) sessizce sıfırlıyor, ikinci drag hiç uygulanmıyordu (`_interactionMode='none'`) → Ctrl+S rotasyonsuz kaydediyordu; zamanlamaya bağlı olduğu için ~1/10. Düzeltme: çift tık artık yalnızca gerçek tıklamalar için (hareket ≤4 px `_dragClickSlop`), karar **pointer-up**'ta veriliyor, sürükleme zinciri kesiyor; pointer-up `_rightPointerId` ile korunuyor (sol tuş pan'i tık sayılmıyor). Otomatik test yazılamadı: test binding'inde canvas hit-test'i boş dönüyor (görselsiz RenderImage 0×0) — doğrulama kullanıcı manuel testiyle | | 2026-10-25 | (bu satır) | **v1.7.1** — Zoom yüzde rozeti: alt orta, sağ/sol ok butonlarının arasında, ok butonlarıyla birlikte (hover'da) görünür, hafif saydam siyah zemin; yüzde görüntünün **gerçek piksel boyutuna** göre (100% = 1:1) — `image_canvas.dart::_zoomPercentValue` (fit: yerleşmiş görüntü kutusu / kaynak genişlik, fill: max oran), tekerlek/Ctrl+tekerlek, fill-fit çift tık, görsel değişimi ve pencere boyutu değişiminde güncellenir (`_syncZoom` → post-frame, parent `ValueNotifier`). Header parse (piksel boyutu decode'suz) `lib/services/image_header.dart`'a taşındı; Özellikler paneli de aynı fonksiyonu kullanıyor (davranış değişmedi, kopya kod silindi). analyze: yeni hata/uyarı yok; debug build + kullanıcı kurulumu doğrulandı (`diff -rq` boş); release `.deb`: `dist/imajviewer_1.7.1_amd64.deb` (9.9M) | | 2026-10-21 | [rapor-cokme-analiz-2.md](rapor-cokme-analiz-2.md) | **Rapor — yeni çökme aileleri (3.47.7 SONRASI)** — A: llvmpipe blit, map'siz kaynaktan glibc AVX2 memcpy okuması (2 core, deterministik, char_7/8 PNG'ler); B: GTK tooltip UAF (core silinmiş). 17 Eki'de Xorg+picom aynı saniyede düştü → yığın seviyesi şüphesi (mesa 26.0.8 / ortam / host RAM). İzolasyon testi + host memtest + üst akış raporu seçenekleri. Not: sistem kurulumu hâlâ 1.6.3 (1.7.0 .deb sisteme kurulmamış) | | 2026-10-20 | [rapor-yenilik-analizi.md](rapor-yenilik-analizi.md) | **Analiz — v1.8.0 kapsam teklifi** — her aday kod doğrulamalı: F11 tam ekran (küçük), zoom kısayolları+HUD (küçük-orta, clamp alt sınırı dinamik), recent files (window.json `recent` anahtarı), 90° döndürme F tuşu (küçük), yükleme göstergesi (frameBuilder), GIF=README düzeltmesi (karar), temel Özellikler paneli (bağımlılıksız); ertelenenler: thumbnail şeridi, tam EXIF, bağlam menüsü, HEIC (red). Sürüm planı + doğrulama planı dahil | | 2026-10-20 | [rapor-alcici-degerlendirmesi.md](rapor-alcici-degerlendirmesi.md) | **Rapor** — alıcı gözüyle değerlendirme: animasyonlu GIF yalnız ilk kare, EXIF/bilgi paneli yok, 90° döndürme yok, recent files yok, tam ekrana hiç girilemiyor (F11 yok — "Esc" kısayolu ölü), Windows exe 1.1.0'ta (tag hiç atılmamış); önerilen sıralama tablolu | | 2026-10-20 | (bu satır) | **v1.7.0** — (1) Scroll zoom adımı: normal tekerlek tıkı ×1.1 (tık başına %10), `Ctrl+kaydırma` ×1.01 (tık başına %1, 10× küçük adım) — `image_canvas.dart::_handleScroll`, mevcut `_ctrlPressed` takibi kullanıldı. (2) Ayarlar penceresinde "imajViewer 1.7.0" sürüm gösterimi (`viewer_screen.dart::appVersion`). (3) Kısayol listesi tamamlandı: eksik olan Ctrl+O, Esc (tam ekrandan çık), kaydırma/zoom, Ctrl+kaydırma, sol tık sürükle (pan), sağ çift tık (reset) eklendi — l10n TR+EN ve README tablosu güncellendi. Debug build + kullanıcı kurulumu doğrulandı (`diff -rq` boş); release .deb üretildi: `dist/imajviewer_1.7.0_amd64.deb` (10.3M). Kullanıcı onayladı → commit 57fa3d9 + ee45677 (dist swap + changelog), Gitea'ya push; GitHub public repo v1.7.0'a squash commit (bf59c6f) ile senkronize edildi (force push yok) | | 2026-10-20 | [rapor-cokme-analiz.md](rapor-cokme-analiz.md) | **Rapor — kök neden bulundu + düzeltme (1.6.3, kullanıcı onayladı 20-10)** — SEGV, `fl_compositor_opengl`'in kareyi pencere boyutuyla (tampon eski boyutta) yüklemesi: `memcpy` tampon sonrasını okuyor. flutter#187589/#187626; düzeltme 3.44.7'de yok, 3.47.7'de var → Flutter 3.47.7 ayrı dizine kuruldu, imajViewer onunla derlenip kuruldu. Eski hipotez (llvmpipe UAF) geçersiz | | 2026-10-14 | [plan-flip-horizontal.md](plan-flip-horizontal.md) | **Plan+sonuç (1.6.1 — uygulandı, doğrulandı, push edildi)** — `Ctrl+R` yatay aynalama (efektleri sıfırlayıp aynalar, tekrar basınca geri); crop save aynayı da bindiriyor; kök neden: R tuşu bazı haritalarda mantıksal T geliyor → fiziksel R eşleşmesi eklendi (6e13892) | | 2026-10-12 | [plan-fullsize-persist.md](plan-fullsize-persist.md) | **Plan+sonuç (1.5.0 — uygulandı, doğrulandı)** — fill/fit ("fullsize") modu window.json'da kalıcı; kanıt scripti docs/kanit-fullsize-persist-test.sh | | 2026-10-12 | [rapor-save-mavi-offset-bug.md](rapor-save-mavi-offset-bug.md) | **Rapor (1.4.2 — uygulandı, doğrulandı)** — crop-save mavi kanal offset kaybı (`m[13]`→`m[14]`): kanıt, düzeltme, doğrulama tablosu; Gitea'ya push edildi (b3bd540) | | 2026-10-12 | [rapor-brightness-save-analiz.md](rapor-brightness-save-analiz.md) | ~~Rapor (1.4.1)~~ **GEÇERSİZ** — yukarıdaki rapor bunu kılar (hatalı indeksi iki tarafta da varsaymıştı) | | 2026-08-06 | [rapor-github-acik-kaynak.md](rapor-github-acik-kaynak.md) | **Rapor** — GitHub açık kaynak hazırlığı (gereksinimler, riskler, plan) | | 2026-10-11 | [plan-crop-save.md](plan-crop-save.md) | **Plan (1.4.0)** — Crop Save: görünen alanı orijinal çözünürlükte JPEG q90 kaydetme (uygulandı) | | 2026-08-06 | [Implementation.md](Implementation.md) | Teknik uygulama dokümanı (kökten taşındı) | | 2026-08-06 | [PRD.md](PRD.md) | Product Requirements Document (kökten taşındı) | | 2026-08-06 | [update_plan_01.md](update_plan_01.md) | Pan sınırlama & zoom merkezi sorunu (kökten taşındı) | | 2026-08-06 | [rapor-pan-kilitleme-nuks.md](rapor-pan-kilitleme-nuks.md) | **Rapor** — efekt uygulanmış görselde pan sırasında kilitlenme nüksü (analiz, açık sorular) | | 2026-08-06 | [rapor-gezinme-ayarlar-print.md](rapor-gezinme-ayarlar-print.md) | **Rapor** — gezinme okları (hover), ayarlar/gear (sıralama), yazdırma (printing paketi) | | 2026-08-06 | [rapor-sag-tik-donma-analizi.md](rapor-sag-tik-donma-analizi.md) | **Rapor** — sağ tuş efektlerinde donma analizi + slider UI değerlendirmesi | | 2026-08-03 | [zoom-clamp-mekanizmasi.md](zoom-clamp-mekanizmasi.md) | **Düzeltme** — `_vpSize` sıfırlama bug'ı: çift tıklama sonrası zoom ölümü/pan serbestliği | | 2026-08-03 | [performance_llvmpipe_issue.md](performance_llvmpipe_issue.md) | **Rapor** — llvmpipe donma analizi, kare hızı throttle, ölçüm sonuçları | | 2026-08-03 | [rapor-brightness.md](rapor-brightness.md) | **Rapor** — brightness efekti (Ctrl+Shift+sağ tık) + 4x5 matris birleştirme | | 2026-08-03 | [galeri-klasor-tabanli.md](galeri-klasor-tabanli.md) | **Rapor** — klasör tabanlı galeri + precache/RAM kararı | | 2026-08-03 | [session-2026-08-03.md](session-2026-08-03.md) | **Session özeti** — jfif/jpe/wbmp, pencere cascade, konum kaydı düzeltmesi | | 2026-08-03 | [format-destegi-ek-formatlar.md](format-destegi-ek-formatlar.md) | **Plan** — jfif/jpe/wbmp desteği (TIFF vazgeçildi) | | 2026-08-03 | [pencere-cascade-yerlesim.md](pencere-cascade-yerlesim.md) | **Plan** — yeni pencereyi yan yana / alt satıra açma (screen_retriever) | | 2026-07-27 | [session-windows-ci.md](session-windows-ci.md) | **Windows setup.exe yeniden derlendi, Gitea CI eklendi** | | 2026-07-27 | [session-2026-07-27.md](session-2026-07-27.md) | **Session özeti** — rotate aktif, StartupWMClass ile taskbar gruplama | | 2026-07-27 | [image-canvas-interactions.md](image-canvas-interactions.md) | Detaylı analiz: contrast, saturation, rotate implementasyon planı | | 2026-08-10 | [windows-setup.md](windows-setup.md) | **Windows Development Ortam Kurulum Rehberi** — Flutter SDK, VS Build Tools, CMake, Inno Setup kurulum adımları | | önceki | [zoom-clamp-mekanizmasi.md](zoom-clamp-mekanizmasi.md) | Zoom clamp mekanizması (letterbox-aware) | ## Geliştirme Akışı — Otomatik Build ve Kurulum ### Linux **SDK (2026-10-20):** Linux derlemeleri `/home/alhan/development/flutter-3.47.7/bin/flutter` ile yapılır — varsayılan `~/development/flutter` (3.44.7) resize çökme hatasını taşıyor (bkz. [rapor-cokme-analiz.md](rapor-cokme-analiz.md)). 1. Debug build: `flutter build linux --debug` 2. Sisteme kurulum: `./install.sh` (debug bundle tercih edilir → `~/.local/lib/imajviewer/`) ### Windows 1. Ortam kurulumu: [windows-setup.md](windows-setup.md) rehberini takip edin 2. Build + installer: `.\build-windows.ps1` 3. Manuel kurulum (build çıktılarından): `.\install.ps1` 4. Kaldırma: `.\uninstall.ps1` ### Gitea Release (dağıtım kanalı, 30-10'da aktifleşti) ```bash PASS=$(git remote get-url origin | sed 's|.*://[^:]*:\([^@]*\)@.*|\1|') # release + tag (main HEAD'e) oluşturur: curl -u "git_alhan:$PASS" -X POST -H "Content-Type: application/json" \ "https://git.softmediadesign.com/api/v1/repos/git_alhan/imajviewer/releases" \ -d '{"tag_name":"v","name":"v","body":""}' # .deb yükle — DİKKAT: form alanı "files" değil "attachment" # (files olunca 500 "http: no such file" döner) curl -u "git_alhan:$PASS" -F "attachment=@dist/imajviewer__amd64.deb" \ "https://git.softmediadesign.com/api/v1/repos/git_alhan/imajviewer/releases//assets" ``` Doğrulama: response'taki `browser_download_url`'den indirip `sha256sum` karşılaştır. Projede değişiklik yapıldıktan sonra otomatik yapılır (ayrıca istenmez): 1. Debug build: `flutter build linux --debug` 2. Kullanıcı kurulumu: `rm -rf ~/.local/lib/imajviewer` + `./install.sh` (debug bundle tercih edilir → `~/.local/lib/imajviewer/`) 3. Sürüm atlayan değişikliklerde: `flutter build linux --release` + `bash dist/rebuild-deb.sh` (eski .deb'i dist'ten kaldır) 4. Sistem geneli kurulum: `sudo apt install ./dist/imajviewer__amd64.deb` (dpkg paketi; `dpkg -l imajviewer` ile sürüm doğrula) **KURAL (2026-10-14):** Her güncellemeden sonra kurulum SİSTEME de yapılır — yani 2. adım (kullanıcı kurulumu) + 4. adım (sistem .deb kurulumu) birlikte uygulanır; kullanıcı onayı beklenmez, test edilmemiş sürüm de kurulur. `install.sh` hedef dizini temizlemez (`cp -r` üzerine yazar), bu yüzden 2. adımda önce `rm -rf ~/.local/lib/imajviewer` çalıştırılır — aksi hâlde önceki release kurulumundan kalan `lib/libapp.so` gibi artık dosyalar debug kurulumun içinde kalır. Doğrulama: `diff -rq ~/.local/lib/imajviewer build/linux/x64/debug/bundle` çıktısız olmalı. **KURAL (2026-10-11):** Bu projede Linux tarafında bir geliştirme yapıldığında build + kurulum **hemen** uygulanır; kullanıcı onayı bekleneceğine dair ayrı soru sorulmaz. (Kullanıcı, 11 Eki 2026'da bu kuralı açıkça verdi: "linuxta yapılan değişiklik sisteme hemen uygulansın kullanıcı onayı beklenmesin.") Sürüm atlayan değişikliklerde (feat/fix) ek olarak: `rebuild-deb.sh` ile yeni .deb + dist/ swap (yeni sürümü takip et, eskiyi bırakma). ## İleriye Bırakılanlar - **Hücreye snap / konumlandırma** (karar 31-10): v1.8.0 Size butonları yalnız boyutlandırıyor; buton + hücreye taşıma birlikte düşünülürse ekrana tiling tam otomatik olur. Kullanıcı: "şu anda hiç lazım değil, ileride düşünebiliriz".