# AÇIK SORULAR > Adı `BILINMEYENLER.md` idi; 05.10.2026'de `git mv` ile `acik-sorular.md` olarak yeniden adlandırıldı. Maddeler sahibi olan belgeye çözülüp taşındıkça bu dosyadan silinir. > **Bu belge hangi commit'e göre yazıldı:** `d49b4413` (dal `feat/fw-license-master`) > **Son doğrulama tarihi:** 2026-10-05 > **Yayın tabanı:** 0.9.7 = bu commit + sonrası; belge yalnız doğrulama anındaki kodu anlatır > (`§2.10`–`§2.13` maddeleri 05.10.2026'da DOC-REHBER-AGAC-5 / `Bundles/RbnSuite` > görevi tarafından eklendi.) > > Bu dosya, diğer belgelerde **kodla doğrulanamayan** ya da **çelişen** noktaları > toplar. Buradaki bir madde **gerçek bir belirsizliktir**; "muhtemel şudur" yazılmaz. > Bir madde çözüldüğünde ilgili belgedeki yerine taşınır ve buradan **silinir**. --- ## 1. Kod ile mevcut belge arasındaki çelişkiler ### 1.2 `MasterRbnHeartbeatsModel` tablo adı ile gerçek tablo uyuşmuyor * Model beyanı: `protected $table = 'rbn_heartbeats'` (`Core/Database/Models/Master/MasterRbnHeartbeatsModel.php:21`). * Ölçülen master tabloları arasında `rbn_heartbeats` **yok**; `z_sys_heartbeats` **var** (`php rbn db:tables --master`). * `MasterDbData::REQUIRED_TABLES` da `z_sys_heartbeats` sayıyor (`Core/System/Config/Definitions/DbProfiles/MasterDbData.php:54-60`). * **Çağıran araştırıldı (05.10.2026, DOC-AGAC-2):** model yalnız `SystemPhysicalMapTrait` içinde `master.rbnHeartbeat` anahtarıyla kayıtlı (`SystemPhysicalMapTrait.php:40`); `Core`, `Bundles`, `Packages`, `Resources` taramasında bu anahtarı ya da sınıfı **çağıran başka kod bulunamadı** (`z_sys_heartbeats` tablosuna doğrudan SQL ile `DatabaseGuardProvider::performHeartbeatTest()` yazıp siler — `DatabaseGuardProvider.php:185-195`; `ProjectCleanupJob.php` eski satırları temizler; ikisi de modeli kullanmaz). Ayrıntı: `docs/Core/System/Registries.md` §5.5. * **Veri katmanı tarafı da araştırıldı (05.10.2026, DOC-AGAC-1, `Core/Database`):** model dosyasında hiçbir **yazma yolu yoktur** — `MasterRbnHeartbeatsModel` yalnız alan bildirimi (`$table`, `$primaryKey`, `$incrementing`, `$keyType`, `$timestamps`, `$scoped`) içerir, metot tanımlamaz (`Core/Database/Models/Master/MasterRbnHeartbeatsModel.php:18-56`; kardeş `RbnHeartbeatsModel` ile karşılaştır: `Models/Project/RbnHeartbeatsModel.php:227` `beat()` yazma yolunu taşır, master modeli taşımaz). Master tarafındaki **tek** heartbeat yazıcısı model değil, doğrudan SQL kullanan `DatabaseGuardProvider::performHeartbeatTest()`'tir ve `z_sys_heartbeats` yazar (`Core/Services/Gatekeepers/Providers/DatabaseGuardProvider.php:185-196`). Aynı tabloyu temizleyen `ProjectCleanupJob.php:30,40` de modeli kullanmaz. Ölü bir hata metni de mevcuttur: yazma yetkisi hatası "rbn_heartbeats tablosuna yazma yetkisi yok" der (`Core/Services/Gatekeepers/Handlers/DatabaseGuardHandler.php:239`) ama test yazdığı tablo `z_sys_heartbeats`'tir. Çelişki çözülmedi: model kayıtlı, kullanılmıyor ve tablo adı uyuşmuyor. Seçenekler (modeli `z_sys_heartbeats`'e çevirmek / modeli ve kaydı silmek) kod kararıdır. Belgelenen davranış: [Core/Database/Models.md](Core/Database/Models.md). **Nasıl çözülür:** `rbn db:tables --master` çıktısıyla gerçek tablo adı doğrulanır, ardından karar verilir. Karar proje sahibinindir. ### 1.3 Layout sarmalama: `$content` mı, bölüm mü? `.agents/rules/core-architecture.md` §6.2, view içeriğinin layout'a `$content` değişkeni olarak enjekte edildiğini yazıyor. **Kodda** bu doğru **değil**: * `ViewEngine::render()` görünümü basar, **sonra** `LayoutResolver::getExtends()` dönen layout'u yeniden render eder (`Core/Render/ViewEngine.php:77-102`). * Taşıma `@section()` / `@yield()` yönergeleriyle **bölüm** üzerinden yapılır (`ViewEngine.php:229-232`, `Core/Render/Resolvers/LayoutResolver.php:29-83`). `$content` **yoktur**. Kural belgesi bu noktada güncel değildir. ### 1.7 `SystemLogicMapTrait` içindeki `handlers['seo']` kaydı çözümlenemiyor * **Ne soruldu:** `Core/Services` kayıt haritasında (`SystemLogicMapTrait.php:114`) `'seo' => 'Core\Render\Handlers\Seo\SeoHandler'` kayıtlı. Bu sınıf gerçekten var mı, `handler('seo')` ne döner? * **NEREYE bakıldı:** `Core/System/Registries/RegistryMap/SystemLogicMapTrait.php:114` (`logicMap()['handlers']`); `Core/Render/Handlers/` dizin ağacı (`Get-ChildItem Core/Render/Handlers -Directory` → yalnız `UI/`); `NamespaceResolver::find('seo','handler')`; çalıştırılan ölçüm: `$probe->handler('seo')` (PHP 8.3, gerçek `Paths::init`). * **Sonuç (ölçüldü):** `Core/Render/Handlers/Seo/` dizini **yok**; `class_exists('Rbn\Framework\Core\Render\Handlers\Seo\SeoHandler')` **false**; `$probe->handler('seo')` → **`NULL`**. Bu kayıt **ölü** bir girdidir; `ComponentContext::resolve()` `mandatory=false` iken `null` döner (`ComponentContext.php:107-111`), `mandatory=true` olsaydı tanı üretirdi. * **Neden hâlâ belirsiz:** **Yok — koddan çözüldü.** Render tarafında SEO işi `Handlers/UI/*` + `Resolvers/SeoResolver` + `Providers/SeoProvider` üçlüsünde yapılıyor; ayrı bir `SeoHandler` **gerekmiyor**. * **Nasıl çözülür / karar:** kayıt **silinmesi** önerilir (salt okunur belge; kod değiştirilmedi). Karar proje sahibinindir. * **Belgelenen davranış:** [Core/Render/README.md §4](Core/Render/README.md), [Core/Services/README.md §4](Core/Services/README.md), [Core/System/Registries.md §5](Core/System/Registries.md). ### 1.8 `AssetBuilder::addFont()` çift font ekler (düzeltilmiş bulgu) * **Ne soruldu:** `addFont('Roboto')` çağrıldığında varsayılan Inter de ekleniyor mu? * **NEREYE bakıldı:** `Core/Render/Builders/AssetBuilder.php:70-74` (`addFont`), `:142-162` (`build()` içindeki font kontrolü ve Inter ekleme), `:145-152` (`str_contains($path, '/fonts/')` testi). Ölçüm: `$rp = new ReflectionProperty(AssetBuilder::class,'styles')` ile `$styles` anahtarları ve `build()['styles']` çıktısı karşılaştırıldı. * **Sonuç (ölçüldü):** | Çağrı | `$styles` anahtarları | `build()['styles']` | |---|---|---| | `addFont('Inter')` | `["@font/Inter"]` | **1** — `…/framework-assets/fonts/inter` (prio 5) | | `addFont('Roboto')` | `["@font/Roboto"]` | **2** — `…/fonts/inter` (prio 5) **+** `@font/Roboto` (prio 15) | Yani `addFont('Roboto')` çağrısında **Inter de eklenir**. * **Kök neden:** `build()` fontu "derlenmiş" yoldan arar (`str_contains($path, '/fonts/')`, `AssetBuilder.php:148`), ama `addFont()` kuyruğa **derlenmemiş** `@font/` yazar (`:72`). `@font/Roboto` yolunda `/fonts/` **yoktur** → font yok sayılır → Inter eklenir. * **İlk ölçümün düzeltilmesi:** İlk denemede "`addStyle()` çoğaldı, 2 eleman" sonucu çıkmıştı. Bu **yanlış yorumdu**: `build()['styles']` içindeki ikinci eleman çoğalma değil, **otomatik Inter**'dir (`AssetBuilder.php:154-162`). Ayrı ölçümde `$styles` **anahtarları** kontrol edildi: `addStyle('x.css',1)` + `addStyle('y.css',2)` + `addStyle('x.css',9)` → anahtarlar `["x.css","y.css"]`, yani **`addStyle()` koruması çalışıyor**; `x.css` önceliği ilk çağrıdaki `1`'de kalır. `addScript('/a.js')` iki kez → 1 eleman. * **Neden hâlâ belirsiz:** `prepare()` akışında bu **düzelir** — temizlik `AssetBuilder.php:93-113` içinde `payload` üzerinde çalışır ve `@font/` ile başlayan **ham** yolları görür. Yani sorun yalnız **`addFont()` doğrudan** `AssetService`/controller üzerinden çağrıldığında görünür (`FrontendBaseController::addAsset()` → `AssetService::addStyle()` yolu). Bu yolun gerçekten kullanılıp kullanılmadığı bu çalışmada ölçülmedi. * **Nasıl çözülür:** `build()` içindeki font kontrolü iki biçimi de kabul etmeli: `str_contains($path,'/fonts/') || str_starts_with($path,'@font/')`. Ya da `addFont()` derlenmiş yolu doğrudan kuyruğa yazmalı. Karar proje sahibinindir (bu görev salt okunur). * **Belgelenen davranış:** [Core/Render/Builders.md §5.1–5.2](Core/Render/Builders.md). ### 1.9 `RawHtmlGate` `` | **`false`** | **değişmez** | Yani gate **`` gibi ham script gövdesi sızmaz, ama hangi vektörlerin **kasıtlı** bırakıldığı kodda belgelenmemiş. Özellikle `