From 0a02f576d4cc9ec5b08d39cb6b06e982f440821b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erkan=20I=C5=9EIK?= Date: Sat, 22 Aug 2026 21:37:36 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20ajan=20notlar=C4=B1=20=E2=80=94=20?= =?UTF-8?q?=C3=A7oklu=20disk/granular=20b=C3=B6l=C3=BCmleme=20mimarisi=20v?= =?UTF-8?q?e=20yap=C4=B1lacaklar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..58caa0e --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,67 @@ +# AGENTS.md — Yali-rs Geliştirme Notları + +> Ajan oturumları arasında süreklilik için. Son güncelleme: commit `5c14847` + +## Proje +- PisiLinux kurulum aracı (eski Python Yali'nin Rust/egui yeniden yazımı). +- Ana dallar: `main`. Push: `git push origin main`. +- Referans kod: `/media/yedekleme/github/erkanisik/yali` (eski Python Yali — + storage mimarisi: `yali/storage/{operations,partitioning,devicetree}.py`). + +## Mimari Kararlar (2026-08 dönemi) + +### Çoklu Disk Manuel Bölümleme +- `CustomPartition` alanları (`src/installer.rs`): + - `disk`: bölümün ait olduğu disk ("/dev/sda") — gruplama bununla. + - `orig_device`: lsblk'tan gelen fiziksel cihaz adı; **boş = kullanıcı tanımı yeni bölüm**. + Silme/işaret mantığı buna dayanır. + - `delete: bool`: eski Yali `OperationDestroyDevice` karşılığı → kurulumda `parted rm`. +- UI (`src/steps/partition.rs`): + - Manuel moda girişte TÜM diskler otomatik taranıp listelenir (disk kartına tıklamak + artık sadece "yeni bölüm hedef diski" seçer; tanımları sıfırlamaz — merge eder, + `orig_device` eşleşmesinde kullanıcı tanımı kazanır). + - Tablo `TableRow::Part | TableRow::FreeSpace` enum'u ile kurulur; HER disk grubu + kendi sütun başlıklarını çizer (`draw_partition_table_header`). + - Silinmek işaretli bölümler ayrı satır çizmez; İLK silinenin konumunda TEK + "Boş Alan" satırında birleşir (GParted tarzı). + `Boş Alan = disk − (korunan fiziksel + yeni tanımlar)`; 0 ise satır gizlenir. + - "Kalan alan" SEMBOLİKTİR (size_mb=0): kaydetme anında sayıya çevrilmez! + Tabloda/özetde kapasite olarak gösterilir; gerçek boyut kurulum anında boşluktan alınır. + (Somutlaştırma taşmaya yol açtığı için kaldırıldı — swap sonradan büyütülünce kök patlıyordu.) +- Slot ataması (`installer::assign_partition_numbers`): parted'ın gerçek davranışını + simüle eder — fiziksel (silinmeyen) bölümler numarasını korur, silinenlerin slotu + boşalır, yeni tanımlar en küçük boş slotu alır. UI ile job tutarlılığı buradan gelir. + +### Granular Kurulum Job'ı (`jobs/partition.rs::CustomPartitionJob`) +Eski wipe&rebuild (mktable + hepsini baştan yarat) KALDIRILDI. Yeni fazlar: +1. FAZ A: `delete=true` olanlar `parted rm N` — N, `orig_device`'tan; + **büyükten küçüğe** sil (kernel slot kayması). +2. FAZ B: yeni tanımlar `disk_free_regions_mb()` ile sysfs'ten hesaplanan boş + bölgelere first-fit yerleşir ("kalan" = en büyük bölge). Sabit boyutlular ÖNCE, + sembolikler SONRA (`creates.sort_by_key(size==0)`) işlenir. +3. FAZ C: yalnızca istenenler mkfs (LUKS akışı korundu). +- İşlemi olmayan disklere ve `delete=true` satırlara mount/fstab/summary dokunmaz. + +### Diğer Düzeltmeler +- MB dönüşümleri tek bölme: `x / 1_048_576` (çift `x/1024/1024` hassasiyet kaybı yapardı). +- Disk seçiminde `size_gb * 1024` yerine `size_bytes / 1_048_576`. +- Mountpoint değişince boyut alanı SADECE boş/"0"/"remaining" ise varsayılanlanır + (kullanıcının elle girdiği değer ezilmez). +- Simge fontu: `assets/remixicon.ttf` egui fallback fontu (`ui/theme.rs setup_fonts`). + Kutucuk görürsen karakter fontta yok demektir — fontTools ile cmap kontrol et: + kullanılanlar: EB7B check, EA6B arrow, EC28 trash, EA13 add, EFE0 pencil, EECD lock, + ECA1 error, EDFB hard-drive-line, ECB5/B7 eye, F4C6 close. +- Alt bar: her disk için "Mevcut Durum / Kurulum Sonrası" çift şerit + (`manual_dual_bars`, gri segment = boş). + +## Bilinen Açıklar / Yapılacaklar +- [ ] VM testinde rapor edilen hatalar düzeltilecek (kullanıcı listeleyecek) +- [ ] `manual_capacity_error` yalnızca sabit boyutları kontrol eder; LVM PV/LV toplamları ayrıca doğrulanmalı +- [ ] Silinmek işaretli bölüm bir VG'nin PV'siyse SetupLvmJob tarafında kontrol yok +- [ ] Otomatik mod (erase disk) hâlâ tek disk; çoklu otomatik plan yok +- [ ] Debug amaçlı kalan `eprintln!` satırları temizlenebilir + +## Test / Derleme +- `cargo check` + `cargo test` (22 birim testi; partition modülü ağırlıklı). +- VM'de denemek: ISO'yu boot edip manuel bölümlemede sdb üzerindeki senaryolar: + sil→boş-alan birleşimi, geri al, kalan alan, farklı diske bölüm ekleme.