Bu belge, bu çalışma ağacındaki MacMaid uygulamasının geliştirici haritasıdır. Normatif güvenlik, test ve sürüm kuralları için önce AGENTS.md ve CONTRIBUTING.md okunmalıdır. Ayrıntılı güvenlik sınırları SECURITY.md, paket yöneticisi fallback kararları FALLBACK_POLICY.md, kullanıcı komutları README.md içindedir. Kodla çelişen tarihsel açıklamalar yerine ilgili modülün yürürlükteki davranışı esas alınır.
MacMaid macOS 13+ üzerinde Python 3.11+ ile çalışan, root olarak başlatılmayan bir temizlik, disk inceleme, uygulama kaldırma, geliştirici depolama ve süreç belleği gözlem aracıdır. Kaynak/dev kurulumu Intel ve Apple Silicon üzerinde çalışabilir; mevcut DMG/Homebrew yayınları arm64 hedefler. SIP/TCC veya Full Disk Access engelleri atlanmaz; erişilemeyen hedefler raporlanır ya da işlem durdurulur. Çöp Kutusu'na taşıma alanı hemen boşaltmaz; taranan boyut, işlenen tahmin, tahmini geri kazanım ve dosya sistemi genelindeki serbest alan değişimi farklı ölçülerdir.
- Paket:
src/macmaid; giriş noktasımacmaid = "macmaid.cli:main"(pyproject.toml). Argümansız komut TUI'yi açar. - Bağımlılıklar:
psutil>=7,textual>=6,<8;uv/uv.lock,uv_build; dev grubunda pytest, Ruff, mypy; tarayıcı grubunda Playwright. - Sunum: argparse CLI, Textual TUI, standart kütüphaneden
ThreadingHTTPServerile localhost API, build adımı olmayan HTML/CSS/vanilla JS Web UI.src/macmaid/native/MacMaidApp.swiftWeb arayüzünü yerel macOS penceresinde barındıran uygulama kabuğudur; bağımsız bir iş mantığı katmanı değildir. - Web UI:
macmaid uivarsayılan olarak127.0.0.1:8123üzerinde;--port,--no-open,--appseçenekleri vardır.web,gui,dashboard,appaynı komutun takma adlarıdır.
| Dosya | Sorumluluk |
|---|---|
models.py, config.py, safety.py, system.py |
Temel veri sözleşmeleri, kullanıcı ayarları/whitelist, yol kapıları, güvenli dosya/süreç/komut yardımcıları |
scanner.py, cleaner.py, reporting.py, review.py, cancellation.py |
Salt-okunur aday keşfi, ortak icra/audit, alan ölçüm raporu, inceleme planı/token, iptal |
analyzer.py, large_files.py, duplicates.py, smart_downloads.py, browser_storage.py |
Disk gezinme ve salt-okunur özel keşif akışları |
developer.py, features.py, memory.py |
Yöneticiye ait geliştirici kaynakları; uygulama/proje/sağlık/geçmiş/kurtarma; süreç izleme ve sinyal kapıları |
cli.py, tui.py, web.py, web_queries.py, web_mutations.py |
Ortak çekirdeği çağıran arayüz/HTTP adaptörleri; GET ve POST rotaları ayrı dosyalardadır |
i18n.py, WebUI/i18n.js, WebUI/icons.js |
TUI ve web-progress çeviri yardımcısı (translate()), Web EN/TR kataloğu; ortak SF Symbols benzeri SVG kataloğu |
WebUI/app.js, api.js, ui.js, progress.js, memory.js, features/*.js, index.html, styles.css |
Web gezinmesi, API/review yardımcıları, ilerleme, Memory görünümü ve özellik görünümleri |
UI'larda yeni tarama/silme/ölçme kuralı yazılmaz. Ortak davranış önce çekirdekte eklenir; CLI/TUI/Web aynı hizmetleri kullanır. Çekirdek modüller UI modüllerini import etmez (HTTP rota adaptörlerinin web.py tip/handler bağlantısı hariç).
models.py:
RiskLevel:SAFE=0,MODERATE=1,AGGRESSIVE=2,MANUAL_ONLY=3.MANUAL_ONLYotomatik seçilmez.CleanupProfile:safe(SAFE),deep(MODERATE),developer(MODERATE + geliştirici),aggressive(AGGRESSIVE + geliştirici). Çöp Kutusu ve sistem geçicileri profilin zorunlu parçası değildir; taramada ayrı bayraklarla etkinleştirilir.ActionType:REMOVE_PATH,REMOVE_CHILDREN,COMMAND,COMMAND_WITH_CACHE_FALLBACK,MANUAL_CACHE_FALLBACK,MOVE_TO_TRASH. Adında fallback geçen komut başarısızsa kendiliğinden ham recursive silmeye dönmez.CleanupItem: kategori, açıklama, hedef/komut, tahmini bayt, risk, gerekçe, aksiyon, gerekirse kapanması gereken uygulama, UUID kimliği.ScanResult.statuscomplete/partial/cancelledolabilir; eksik tarama Web ve CLI temizleme isteği için uygun değildir.OperationResult:freedgeriye uyumlu tahmini geri kazanım alanıdır; Trash taşımaları ve doğrulanamayan yönetici etkileri buna eklenmez. Ayrıcascanned_estimated_bytes,processed_estimated_bytes,trash_moved_estimated_bytes,observed_free_bytes_delta,unknown_reclaim_countve ölçüm notları bulunur. APFS ve eşzamanlı disk etkinliği yüzünden serbest alan değişimi tek başına MacMaid'e atfedilemez.
PathSafety (safety.py) mutlak/lexical yolu doğrular; .., NUL, satır sonu ve symlink'li ataları reddeder. /, /System, /bin, /sbin, /usr, /etc, /var, /private, /Library, /Applications, /Users, /Volumes gibi korumalı köklerin kendisi silinemez. Normal cache silmede açıkça izinli ev dizini kökleri, dar sandbox (Containers/<id>/Data/Library/Caches) ve onaylı Application Support cache yaprakları geçerlidir; bütün Application Support silinmez. /private/tmp ve /private/var/tmp için ayrı dar yol denetimi vardır. validate_trash_candidate() Downloads/Desktop altındaki özel adayları, validate_analyzer_candidate() ev dizini altındaki kullanıcı dosyalarını sınırlar; analizör ~/Library, ev dizini ankrajları, .app ve .photoslibrary paketleri ile başka kullanıcıya ait hedeflere dokunamaz.
Config (config.py): ~/.config/macmaid/{whitelist,preferences.json}, ~/Library/Logs/MacMaid/operations.jsonl; Memory ayarları ~/.config/macmaid/memory.json. Tarama whitelist'i bir kez okuyarak keşif filtresi uygular; icra sırasında require_unprotected() whitelist'i tekrar, katı biçimde ve sahiplik/symlink kontrolüyle okur. İlgili dosya okunamaz veya güvenilir değilse işlem durur. Bir üst dizin altında korunan çocuk varsa üst dizin toptan silinemez. replace_whitelist() atomik ve doğrulanmış yazım yapar. Whitelist'in tarama zamanındaki görünümü icra izni değildir.
Cleaner.execute() (cleaner.py) apply=False iken değişiklik yapmaz; root'u engeller, gerekli CLI onayını ve uygulama-kapalı şartını arar, manuel fallback'i ayrıca allow_manual_fallback olmadan çalıştırmaz. Her hedef işlemden hemen önce yeniden yetkilendirilir. system.py içinde directory_fd()/remove_validated_path() dizin tanımlayıcısına sabitlenmiş, symlink takip etmeyen ve sahipliği kontrol eden silme uygular. Trash taşıma renameatx_np ile üzerine yazmayan atomik rename kullanır; platform bunu sunmuyorsa güvenlik düşürülmez. Hedef sahipliği, Trash dizini, whitelist ve kaynak kimliği yeniden kontrol edilir; kaynak yok/hedef var son koşulu doğrulanır. run_command() shell kullanmaz, argüman dizisi ve timeout uygular, zaman aşımında süreç grubunu durdurur. size_of() macOS du -sk kullanır; sizes_of() sınırlı worker havuzuyla ölçer. GUI PATH'i için ensure_tool_search_path() bilinen var olan araç yollarını ekleyebilir; Homebrew konumu körlemesine sabitlenmez.
İşlem/audit kayıtları JSONL'dir; başarısız/atlanan hedefler ve özet de kaydedilir. RecoveryCenter (features.py) doğrulanmış Trash kaydı ve operation_id ile restore/copy sunar; hedef konum doluysa FileExistsError ile işlem fail-closed durur (ayrı bir çakışma uç noktası yoktur). Trash'e taşınan baytları “boşaltılan alan” diye göstermeyin. Akış: keşfet → açık inceleme/izin → canlı kimlik, yol, whitelist, sahiplik, symlink ve çalışan uygulama kontrolleri → icra → post-condition → audit. User data (çerez, oturum, veritabanı, tercih, kaynak kodu vb.) sıradan önbellek değildir.
web.py Host'u localhost ile sınırlar; POST için JSON içerik türü, aynı portlu Origin, HttpOnly; SameSite=Strict oturum çerezi ve token ister. CSP ve nosniff kullanılır; mutation_lock aynı anda mutasyonları sınırlar. Birçok yıkıcı uç nokta web_mutations._review_gate() ile önce reviewOnly planı döndürür; HMAC'li token plan fingerprint'i, kapsam, tarama generation'ı ve süreye bağlıdır (varsayılan en fazla 300 saniye), tek kullanımlıktır. Kullanıcı verisi/MANUAL için ilave extraOptIn gerekir. Yeniden tarama veya whitelist değişimi eski incelemeleri geçersiz kılar. Memory'nin SIGTERM/SIGKILL incelemeleri ayrıdır; bazı POST'lar (settings, scan/cancel, update/check) yıkıcı review akışı değil, ancak aynı oturum/Origin sınırına tabidir. Mutasyon GET olarak eklenmez. Web'in son taramasındaki kimlik/yolları kabul etmesi çekirdeğin işlem zamanı doğrulamasının yerini almaz.
Scanner.scan()(scanner.py): salt-okunur fazlar user/browser/application/sandbox cache ve log/diagnostik;developer/aggressiveprofilde geliştirici ve paket yöneticisi cache fazları;deep/aggressiveprofilde saved state; isteğe bağlı Trash ve yalnızcadeep/aggressiveiçin sistem temp.CancellationToken, progress, issue/notlar, aday deduplikasyonu ve sıralama kullanır.PackageManagerCacheScanneryöneticinin resmi komutunu/kapasitesini araştırır; manuel fallback ancak dar allowlist + ayrı izinle, Docker/Podman'ın değerli state'i otomatik silinmeden kullanılır.scan_installers()eski imajları;scan_leftovers()kurulu app bundle ID'lerinden hareketle terk edilmiş bileşenleri tarar. Eksik/iptal edilmiş sonuçlar sessizce tam sayılamaz.IncrementalAnalyzer(analyzer.py):snapshot()hızlı dizin listesi,scan()/worker'lar kademeli ölçüm,progress(),cancel_active(),approved_paths()ve silme sonrasıinvalidate_after_removal().focus_id/generation eski navigasyon sonuçlarının yeni görünümü ezmesini engeller; sınırlı havuz, duraklatma/önbellek vardır. Analizör keşfi ile Trash izni ayrı kapılardır.DuplicateFinder(duplicates.py) veLargeOldFileScanner(large_files.py) okunur inceleme listeleri üretir;SmartDownloadsScanner(smart_downloads.py) yükleyici/arşiv/eksik ve yinelenen indirmeleri sınıflandırır;.venv,node_modules,build,dist, VCS ve cache gibi proje tarafından üretilen dizinlere inmez (GENERATED_DIRECTORY_NAMES);BrowserStorageInspector(browser_storage.py) cache ile oturum/çerez gibi kullanıcı verisini ayırır. Otomatik silme/seçim yoktur; kullanıcı tarafından seçilmiş dosya Trash işlemleriCleanerve analizör güvenlik kapısından geçer.ApplicationManager(features.py):/Applicationsve~/Applicationsuygulamalarını plist/bundle ID ile bulur; Homebrew cask sahipliğini yöneticiden sorgular. Bundle, güvenli kalıntılar ve varsayılan seçili olmayan kullanıcı verisi bileşenleri ayrı incelenir. Çalışan uygulama, bundle kimliği, cask sahipliği ve whitelist işlem anında yeniden kontrol edilir. Cask içinbrew uninstall --cask; diğer onaylı.appve kalıntılar için Trash kullanılır; yönetici yetkisiyleosascriptveya sessizsudofallback'i yoktur. Yetki yoksa atlanır.ProjectPurgeManager(features.py): proje marker'larıyla (.git,pyproject.toml,package.json, vb.) kaynak kökünü doğrular;build,dist,target,.next,node_modules,.venv,Podsvb. oluşturulabilir hedefleri sınıflandırır. Yerel çıktılar en az 7, bağımlılık dizinleri en az 30 günlükse varsayılan seçilir; kullanıcı seçiminden sonra proje kimliği ve hedef yeniden doğrulanıp Trash'e taşınır.DeveloperStorageCenter(developer.py): Xcode, Node, Python, Rust, Android ve Docker depolama görünümü.DeveloperInventory:runtime,environment,tool,sdkenvanteri; korunan/aktif/baz ortam ve bağımlı kaynaklardaremovable=False. Kaldırma resmi yöneticinin doğrulanmış komutuna gider; ham runtime dizini silinmez.FALLBACK_POLICY.mdcache fallback'i için yetkili kaynaktır.features.pyayrıcasystem_status()/health_indicators()(psutil, pil/termal/izin/sağlık),doctor(),compatibility_checks(), Homebrew MacMaid güncelleme kontrolü/uygulaması, Time Machine yerel snapshot listeleme/inceltme, geçmiş ve kurtarma içerir. Optimize özelliği (DNS/Quick Look/Finder/Dock/Spotlight bakım görevleri) tamamen kaldırıldı; CLI/TUI/Web'deoptimizeyüzeyi ve/api/optimize*rotası yoktur; bu görevleri çalışır özellik diye tanıtmayın. Snapshot inceltme ayrı, açıkça incelenen bir işlemdir.
MemoryService yalnızca MacMaid çalışırken etkin olan, daemon kurmayan servistir. psutil ile normalde 5 saniyede bir örnek alır; PID:create_time anahtarları, kullanıcı/sistem/MacMaid süreç koruması, exe/entrypoint ve sahiplik doğrulaması PID reuse ve yanlış sürece sinyali engeller. Kimliği doğrulanamayan süreç gösterilebilir ama eyleme uygun değildir. RSS paylaşılan sayfalar da içerir, geri kazanılabilir RAM değildir. /usr/bin/memory_pressure -Q pressure headroom için kullanılır; veri yoksa sahte alternatif üretilmez.
Son sürümde süreç bazlı tabloya uygulama ve süreç ailesi grupları eklenmiştir: çalıştırılabilirin en dıştaki .app bundle yolu grubu belirler; bundle dışındaki çocuk yalnızca aynı exe'li ebeveyne katılır. Grup children, memberKeys, protectedCount, eligibleCount, memoryBytes ve memoryMetric ile sunulur. Ayrı, zaman bütçeli ölçüm işçisi /usr/bin/footprint ile aynı kullanıcı süreçlerinin fiziksel footprint'ini örnekler; çok süreçli grupta ortak sayfalar toplamda tek kez sayılır. Araç erişilemezse, çıktı kısmi/eskiyse veya üyelik imzası değiştiyse görünüm dürüstçe RSS'e döner; footprint tahmini PSS değildir. Tek süreçli gruplar toplu ölçülür, çok süreçli gruplar ayrı ölçülür. 10 dakikalık büyüme analizi süreç RSS geçmişinden veya yeterli ve aynı üyelik imzalı grup footprint geçmişinden gelir; en az 256 MiB, başlangıca göre %25 ve yükselen dakikalık medyan eşikleri gerekir. 15 saniyeyi aşan örnek aralığı sürekliliği sıfırlar.
İşlem yetkisi gruba değil, gruptan seçilen tek tek güncel süreç anahtarlarına bağlıdır (en fazla 100). Manuel review() tam hedef fingerprint'i üretir; Web tek kullanımlık token ister. SIGTERM sonrası en az 5 saniye hâlâ yaşayan uygun süreç için yeni, ayrı Force Stop/SIGKILL incelemesi gerekir. CLI memory --stop PID varsayılan salt-okunur review; --apply ve etkileşimsiz durumda --yes gerekir. --watch ile geçmiş örneklenebilir; --growing için en az 600 saniye izleme şarttır. TUI/Web örnekleme ve müdahaleyi UI döngüsü dışında yürütür.
Otomatik helper rule'ları varsayılan kapalıdır; yalnızca exact Dart analysis server ve TypeScript tsserver.js entrypoint'i uygundur, genel Node/Dart süreçleri değil. Rule, exclusion, cooldown ve hata durumları memory.json içinde korunur. Varsayılan kapılar: RSS >2 GiB, 5 dakika kesintisiz eşik, pressure headroom <%15; 30 dakika cooldown; canlı kimlik ve RSS yeniden doğrulanır. Otomasyon yalnızca SIGTERM gönderir, SIGKILL göndermez; iki başarısız denemeden sonra rule durur. Memory testlerinde sahte saat/psutil ile bu kapılar ve grup üyeliği/footprint fallback'i sınanır.
CLI (cli.py) doctor, status, scan/clean, leftovers, installers, developer-caches, apps, analyze, duplicates, large-files, smart-downloads, browser-storage, purge, developer, memory, snapshots, history, restore, completion, whitelist, uninstall, ui sunar; her alt komutun macmaid --help içinde tek satırlık açıklaması vardır. Değiştirici CLI işlemleri normalde --apply olmadan yalnızca incelemedir; interaktif onay veya otomasyon için açık --yes gerekir. apps CLI yalnızca envanter sunar; kaldırma incelenmiş Web/TUI akışındadır. restore için operation ID ve Trash yolu gerekir. whitelist kayıtlı kuralları, sayısını ve dosya yolunu listeler. large-files/duplicates --min-size serbest boyut ifadesi kabul eder (500MB, 1GB vb.). Sonuçsuz liste komutları sessiz kalmaz; tek satır No … found. mesajı basar. CLI çıktısı İngilizce kaynaklıdır; beklenen kullanıcı hataları macmaid: error: + exit 1 ile basılır.
TUI (tui.py) 10 gezinme bölümü tanımlar: Clean, Uninstall Apps, Analyze, Project Purge, Developer Tools, Mac Health, Files & Storage, System & History, Memory ve Check for Updates. Update ekranı açıldığında salt-okunur Homebrew denetimini otomatik başlatır; Install yalnızca bitmiş bir denetimden sonra hazırlanır. @work/worker ve iptal token'ları yavaş işleri UI döngüsünden ayırır. Geçerli binding'ler kodun MacMaidTUI.BINDINGS listesindedir (j/k, space, t, d, r, c, q, h/m/Ctrl+N, l vb.); eskiden belgelenen 1–9 doğrudan sekme kısayollarına güvenmeyin. TUI/CLI gösteriminde Unicode eylem ikonları eklemeyin.
Web görünümü index.html + WebUI/features/*.js modülleri ve memory.js kullanır; navigasyon ağır taramaları kendiliğinden başlatmaz, tarama düğmesiyle başlatır. Web metinleri EN/TR WebUI/i18n.js içindeki anahtarlardan t() ile, TUI metinleri i18n.py/translate() ile yerelleştirilir. /api/progress yanıtı action/phase/detail/logs alanlarını kayıtlı dile göre sunucu tarafında çevirir; faz: yol biçimindeki log satırlarında yol olduğu gibi korunur. CLI yazıları İngilizce kaynaklıdır. Web ikonları WebUI/icons.js içindeki tek SF_SYMBOLS kataloğundan sfSymbol()/data-icon ile gelir; Lucide/emoji/hardcoded SVG eklemeyin. Tema ve dil ayarları Web tarafında localStorage; kullanıcı dili tercihi çekirdekte preferences.json ile saklanabilir.
HTTP GET rotaları web_queries.py, POST rotaları web_mutations.py içindedir; web.py statik dosya/oturum/dispatch ve WebState yaşam döngüsünü yönetir. Başlıca rotalar (tam liste için route_get()/route_post()):
| Alan | Salt-okunur GET | Oturumlu POST (mutasyon/eylem) |
|---|---|---|
| Temizlik | /api/scan, /api/progress, /api/installers, /api/leftovers |
/api/clean, /api/installers/clean, /api/leftovers/clean, /api/scan/cancel |
| Uygulama ve proje | /api/apps, /api/apps/leftovers, /api/purge |
/api/apps/uninstall, /api/purge |
| Disk/dosyalar | /api/analyze, /api/treemap, /api/duplicates, /api/large-files, /api/smart-downloads, /api/browser-storage |
/api/analyze/trash, /api/treemap/trash, /api/treemap/open, /api/duplicates/trash, /api/large-files/trash, /api/smart-downloads/trash, /api/browser-storage/clean |
| Geliştirici | /api/developer/storage, /api/developer/caches, /api/developer/{runtimes,environments,tools,sdks} |
/api/developer/caches/clean, /api/developer/remove |
| Sistem/geçmiş | /api/status, /api/doctor, /api/permissions, /api/snapshots, /api/history, /api/whitelist, /api/macmaid/update |
/api/permissions/open-full-disk-access, /api/snapshots/thin, /api/recovery/restore, /api/whitelist, /api/macmaid/update/check, /api/macmaid/update |
| Bellek | /api/memory, /api/memory/history |
/api/memory/stop, /api/memory/force-stop, /api/memory/settings |
uv sync --all-groups
uv run macmaid --help
uv run pytest tests_py/test_core.py -vv # değişen alana göre odaklı test seç
uv run pytest
uv run ruff check src/macmaid tests_py
uv run mypy
uv run python -m compileall -q src/macmaid
node --check src/macmaid/WebUI/app.js
node --check src/macmaid/WebUI/memory.js
uv build
git diff --checkRuff ve mypy sonucu sıfır hata olmalıdır; testleri veya kapsamı daraltarak geçiş sağlanmaz. CI .github/workflows/ci.yml macOS üzerinde lock kontrolü, lint, type check, compile, JS syntax ve pytest çalıştırır. Gerçek Chromium testleri normal koşuda opt-in'dir, CI'da ayrı browser job'unda zorunludur:
MACMAID_BROWSER_TESTS=1 uv run pytest \
tests_py/test_memory_browser.py tests_py/test_webui_devcaches_e2e.py -qTestler tests_py/ altındadır: test_execution_safety.py, test_trash_safety.py, test_system_safety.py, test_scan_mutability.py, test_review.py, test_recovery.py, test_memory.py, test_memory_groups.py, test_memory_webui.py, test_web.py, test_analyzer.py, test_packaging.py vb. Güvenlik değişikliklerinde olumlu/olumsuz vaka ve mümkün olduğunda geçici hata enjeksiyonu (doğru kod PASS → hedef koruma bozulunca FAIL → geri alınınca PASS) gereklidir. Gerçek kullanıcının Mac'indeki dosyalar silinerek test yapılmaz; geçici HOME/dizin, kontrollü sahte süreç/komut ve gerçek tarayıcı testi gerektiğinde Chromium kullanılır. Testlerin yalnızca “hata vermedi” demesi yeterli değildir.
Kurulum: ./install.sh veya uv tool install --force .; kullanıcı seviyesinde uygulama/binary: make prod-install → scripts/prod-install.sh; yayın DMG/CLI: scripts/build-macos-app.sh, scripts/create-dmg.sh ve .github/workflows/macos-dmg.yml. Kaldırma: ./uninstall.sh (--purge-data isteğe bağlı). Makefile içindeki check yalnızca compile/test/smoke-check yapar; Ruff/mypy yerine geçmez.
Bu çalışma ağacındaki sürüm 0.15.26; güncel değeri pyproject.toml üzerinden doğrulayın. Kullanıcıya görünen kod değişikliğinden sonra SemVer'e göre artırın: geriye uyumlu özellik MINOR, hata/güvenlik/UI düzeltmesi PATCH, uyumsuzluk MAJOR (0.x için uyumsuz değişimde minor artırılır). Dört yüzeyi birlikte güncelleyin: pyproject.toml, src/macmaid/__init__.py, uv.lock, src/macmaid/WebUI/index.html; ilgili paketleme/sürüm testlerini çalıştırın. scripts/prod-install.sh app metadata'sında sürümü macmaid.__version__ üzerinden okur. Yerel Git tag'i oluşturmayın/değiştirmeyin/push etmeyin: değişmez v<version> tag'ini yalnızca release CI oluşturur. Sadece dokümantasyon düzenlemesi için sürüm artırımı gerekmez. README.md veya diğer Markdown-only değişiklikleri CI path-ignore sebebiyle tek başına workflow tetiklemez; yerel kontrolleri atlamayın.
- Verinin gerçekten yeniden üretilebilir mi yoksa kullanıcı verisi mi olduğunu, doğru risk düzeyini, uygulama-kapalı ve yönetici-sahipliği şartlarını belirleyin. Temizlik için dar leaf/allowed root seçin; tüm
Application Support/Docker state'i/aktif runtime silmeyin. - Ortak çekirdekte keşif, inceleme, işlem anında yol/whitelist/sahiplik/symlink/kimlik doğrulaması ve audit/post-condition akışını uygulayın; UI'ya yalnızca sunum/çağrı koyun.
shell=True, genişrm -rf, root işlem, güvenliği düşüren fallback yok. - Kullanıcıya görünen TUI/Web metni için hem Türkçe hem İngilizce çeviri, Web ikonu için tek SF kataloğu girdisi sağlayın. Var olan API/CLI inceleme ve dry-run sözleşmesini koruyun.
- İzole davranış testleri, negatif güvenlik testleri, kritik regressions için fault-injection kanıtı, ilgili HTTP/gerçek browser testleri ekleyin. Önce odaklı test, ardından gerekli tam doğrulama ve sürüm yüzeyleri kontrolü yapın.