# Review — Mevzuat dışı eğitim, marka ve belge seçenekleri planı (v1.2) — 2026-10-20

> **Review type:** plan-re-review
> **Previous review:** `docs/reviews/review-mevzuat-disi-egitim-plan-re-review-2026-10-20.md` (heyet 829, REJECTED, 1 bulgu — F-A)
> **Upstream document(s) read:** `proje-haritasi.md` «EGT-218 kararları — mevzuat dışı eğitimler ve marka» (Sets, 20.10.2026, 6 madde, değişmedi)
> **Other cross-referenced documents:** `CLAUDE.md` (kırmızı çizgiler); heyet 828 ve 829 raporları (bu turda çözülen bulguların kapanış kanıtı olarak); v1.2 ile v1.1 arasındaki tek fark için satır bazlı karşılaştırma yapıldı
> **Stage locks in effect:** Upstream kararlar (EGT-218, madde 1-6) locked.

---

## Upstream Coverage Matrix

| Upstream § / madde | Reviewed doc'ta durumu | Kanıt |
|---|---|---|
| Karar 1 — kategori; mevzuat eğitiminde mevzuat/bağlam zorunlu | ✓ Uyumlu | M-1, M-2 (v1.1'den değişmedi) |
| Karar 6 — mevzuat dışı = mevzuatsız | ✓ Uyumlu | M-2 iki yönlü CHECK (değişmedi) |
| Karar 2 — marka, backoffice tanımlı, katalog+teklif+belgede görünür | ✓ Uyumlu | M-6 (değişmedi) |
| Karar 3 — belge verebilme isteğe bağlı, düzenleyen tanımda seçilir | ✓ Uyumlu | M-7 (değişmedi) |
| Karar 5 — üretim iki yollu, `generated` ayrı ticket | ✓ Uyumlu | Kapsam dışı bölümü + M-7 (değişmedi) |
| Heyet 828 F-1…F-7 | ✓ Uyumlu | Önceki re-review'da (829) tek tek doğrulanmış, bu turda metinde değişiklik yok |
| **Heyet 829 F-A** — `brand` kind için `brand_id` zorunluluğu mekanizması tanımsızdı | ✓ Uyumlu | `## Veri modeli` satırı: *"`brand` ⇒ `brand_id IS NOT NULL` (heyet 829 F-A; form da aynı kuralı alan hatası olarak söyler, CHECK son savunma)"* — hem DB CHECK hem form katmanı adlandırılmış, test listesi satır 63'teki *"`brand` markası olmayan tanımda reddedilir"* beklentisiyle artık tutarlı |
| Kırmızı çizgi 14 / AD-27 | ✓ Uyumlu | Değişmedi |
| AD-11 / kopya ilkesi | ✓ Uyumlu | Değişmedi |
| Migration güvenliği / rollback | ✓ Uyumlu | Değişmedi |

## ✅ What works

- F-A'nın çözümü hedefe tam isabet ediyor: önceki turda eksik olan tam da «hangi katman reddedecek» sorusuydu, ekleme bunu DB CHECK + form olarak açıkça adlandırıyor ve "CHECK son savunma" ifadesiyle savunma derinliği (defence-in-depth) ilkesini `regulation_owner ⇒ regulatory` kuralıyla aynı teknikle (başka bir sütuna bakan CHECK) tutarlı şekilde uyguluyor.
- Değişiklik izole: plan metninin tek bir satırı (`## Veri modeli`) güncellenmiş, başka hiçbir karar, test veya görev satırı dokunulmamış — v1.1'de doğrulanmış hiçbir madde bozulmamış.
- Test listesi (satır 63) zaten bu davranışı bekliyordu; artık karşılığında bir uygulama mekanizması var, plan içi tutarsızlık kalmadı.

## ⚠️ Findings & Risks

Yok.

## ❓ Open Questions

Yok.

## Previous Findings Status (re-review)

| Önceki bulgu | Durum |
|---|---|
| F-A (heyet 829) — `brand ⇒ brand_id` mekanizması tanımsız | ✅ Resolved |

Heyet 828'in yedi bulgusu önceki turda (829) zaten kapanmıştı ve bu turda da hiçbir satır geri açılmadı.

## Verdict: ✅ APPROVED

Upstream Coverage Matrix'te ⚠/❌ satır yok. Heyet 828'in yedi bulgusu ve heyet 829'un tek bulgusu (F-A) sırayla kapandı; bu tur F-A'nın çözümünü doğruladı ve yeni bir problem bulunmadı. Plan, kategori/mevzuat ayrımı, durum makinesi, bitirme koşulu, marka, belge modu/düzenleyen, gruplama okuyucuları, yetki yerleşimi ve rollback dahil her noktada iç tutarlı ve upstream kararlarla birebir örtüşüyor. Developer implementasyona geçebilir.
