---
date: 2026-07-13T00:00:00+00:00
type: plan
status: complete
plan_file: thoughts/shared/plans/PLAN-uranian-90-degree-dial.md
---

# Plan Handoff: Uranyen Astroloji — 90 Derece Dial

## Summary
Uranyen astrolojideki 90° dial tekniğini (kullanıcının sağladığı `uranyen_astroloji.pdf` kaynağından çıkarılan matematiksel yönteme dayanarak) mevcut Laravel chart sistemine eklemek için detaylı bir implementasyon planı hazırlandı. Kapsam, kullanıcı onayıyla: dial görselleştirmesi + 8 Transneptünyen (Uranyen hipotetik) gezegen.

**ÖNEMLİ:** İlk plan taslağında görsel yaklaşım "otantik tek-yelpaze 90° SVG render modu" (0-90° pasta dilimi) olarak varsayılmıştı. Kullanıcının paylaştığı gerçek s.48 örnek görüntüsü (Elvis Presley haritası, kitaptan) üzerinde yapılan uzun bir mock-iterasyonu sonucunda bu varsayımın YANLIŞ olduğu netleşti: gerçek 90° dial görselleri de tam 360° bir çemberdir. Plan dosyası bu doğrultuda güncellendi (Task 2 ve Task 4 baştan yazıldı) — bkz. aşağıdaki "Görsel Araştırma Bulguları".

## Plan Created
`thoughts/shared/plans/PLAN-uranian-90-degree-dial.md`

## Key Technical Decisions
- **TNP dahil edilecek** (kullanıcı seçimi): 8 Uranyen hipotetik nokta zaten swetest tarafından hesaplanıyor, sadece bağlanması gerekiyor.
- **Otantik dial görsel, ama tam 360° çember üzerinde** (düzeltildi): Mevcut "Harmonic n=4" 360° çark (dereceleri *4 mod 360 ile bozan) yeniden kullanılmıyor — ama gerçek dial de tam 360° bir çember, 90°'lik bir dilim değil. Bkz. "Görsel Araştırma Bulguları". Bu, en büyük/belirsiz iş kalemi (Task 4) olmaya devam ediyor.
- **DB migration yok**: Chart tipi zaten sistemde tamamen runtime/query-param bazlı bir kavram (harmonic, sidereal gibi).
- **Orb değerleri kitaptan**: Midpoint 1°, natal sert açı 2°, transit 0°30' — mevcut genel `aspectTypeFromDiff()` (2-8° orb) DEĞİŞTİRİLMEDİ, dial için ayrı parametrik fonksiyon planlandı.

## Task Overview
1. **Vulkanus/Vulcanus adlandırma hatasını düzelt** — swetest "Vulcanus" (c) döndürüyor, kod tabanı her yerde "Vulkanus" (k) arıyor → veri sessizce kayboluyor. Diğer tüm görevlerin ön koşulu.
2. **Backend: 90° dial dönüşümü + Koç Noktası + midpoint tree + "gezegen resmi" zinciri** — `SwetestService::applyNinetyDegreeDial()`, `calculateMidpointTree()`, **`buildPlanetaryPictures()` (yeni eklendi)**, `ChartVisualizerService::dialAspectTypeFromDiff()`.
3. **Web panel + mobil API entegrasyonu** — `ChartPageBuilderService`/`AstroController`'a `applyHarmonicChart` pattern'i izlenerek `uranian_dial` chart tipi eklenmesi.
4. **Otantik dial SVG render modu (360° çember, çift katmanlı nokta render'ı)** — Yeni `dial-svg.blade.php`, `ChartVisualizerService::prepareDialVisualData()` (mevcut `polar()`'ı kullanır, yeni geometri gerekmez), dış mikro + iç makro katman, doğru dairesel çakışma-önleme algoritması, zincir-bazlı açı çizgisi. En büyük/belirsiz görev, 5 alt göreve (4a-4e) bölündü.
5. **Frontend UI** — Chart seçim modallarına ve JS'e yeni tip eklenmesi.
6. **Doğrulama testi** — Kitaptaki Elvis Presley örneği (satır 1137-1220) referans fixture olarak kullanılacak.

## Research Findings (kritik, dosya:satır referanslı)
- **`storage/app/sweph/swetest.exe -hplan`** çalıştırılarak doğrulandı: fictitious object harfleri J=Cupido, K=Hades, L=Zeus, M=Kronos, N=Apollon, O=Admetos, P=Vulkanus, Q=Poseidon.
- **`SwetestService.php:61,1746`** flag dizisi `-p0123456789DAmtGHIFJfJKLMNOPQRSTUVWXYZ` bu harfleri ZATEN içeriyor — TNP'ler zaten hesaplanıyor, yeni ephemeris entegrasyonu GEREKMİYOR.
- Gerçek doğum verisiyle (`swetest.exe -p...flags... -b8.1.1935 -ut02:18:53 ...`) test edilip çıktı doğrulandı — bkz. plan dosyasındaki tam çıktı.
- **`SwetestService::calculateMidpoint()` (1395-1410)** zaten var (shortest-arc formülü, Uranyen sistemle uyumlu) ama private/sadece composite chart için — genel midpoint tree fonksiyonu yok.
- **`SwetestService::applyHarmonicChart()` (1943-2013)** ve **`ChartPageBuilderService.php:808-885,1191-1222`** yeni chart tipi eklemenin tam PATTERN referansı olarak kullanıldı.
- **`ChartVisualizerService::polar()` (4770-4777)** her zaman 360°'yi varsayıyor — **düzeltme:** bu artık bir sorun değil, çünkü gerçek dial de 360° çember (bkz. Görsel Araştırma Bulguları). `polar()` dial modunda da aynen kullanılabilir, yeni bir geometri fonksiyonu gerekmiyor.
- **`AstroController.php:78-86,628-629`** — mevcut `harmonic` chart tipi bile mobil API validation listesinde eksik; dial eklenirken bu boşluk da not edildi.

## PDF'ten Çıkarılan Teknik Detaylar
- 90° dönüşüm: `dial_derece = fmod(longitude, 90)`.
- Sert açılar dial'da aynı noktada görünür: kavuşum/kare/karşıt → dial 0°; yarı kare/sesquikuadrat → dial 45°.
- Kardinal Aks (Koç Noktası): sentetik, sabit 0° nokta — sistemde henüz yok.
- Midpoint formülü + orb kuralları (1°/2°/0°30') plan dosyasında tam olarak dokümante edildi.
- Doğrulama fixture: Elvis Presley doğum haritası (8 Ocak 1935, 02:18:53 CST, Mississippi) — kitaptaki hesaplanmış 90° dial sonuçlarıyla karşılaştırma için.

## Görsel Araştırma Bulguları (kullanıcının paylaştığı s.48 görüntüsü üzerinden)

Kullanıcı, kitabın s.48'indeki gerçek Uranyen dial yazılımı çıktısını (kitabın kendi kırmızı Paint işaretlemeleri HARİÇ) paylaştı ve "tıpatıp" bir mock istedi. Birkaç başarısız denemeden sonra (bkz. plan dosyasındaki Task 4c "Tigers" — gerçekten yaşanan iki somut hata: (1) tüm ikili mod-90 eşleşmelerini ayrım gözetmeden çizmek, (2) hatalı/wraparound'suz dairesel çakışma-önleme algoritması) doğrulanan gerçek katman yapısı:

1. Tam 360° çember (90°'lik dilim DEĞİL) — noktalar gerçek zodyak derecelerinde.
2. Dış ince/hiyerarşik derece tik halkası (kitapta belirtilen 0-180-120-90-60-45-30-22,5-11,25-5,62 skala).
3. Dış "mikro" etiket bandı: TÜM noktalar için küçük glif+derece+dakika, 12 burç/ev halkası YOK.
4. İç "makro" glif katmanı: klasik gezegenler + 8 TNP EŞİT büyüklükte tekrar çiziliyor (asteroid/sabit yıldızlar hariç) — bu katman ilk mock'ta hiç yoktu, sonradan eklendi.
5. Açı çizgileri tüm ikili eşleşme taraması DEĞİL — kitabın Bölüm 3 simetri formülleriyle (A/B=C, A+B-C=D) bulunan TEK bir anlamlı "gezegen resmi" zinciri (örn. "Ay Düğümleri=Eros=Satürn=Admetos/Hades").
6. Merkezde döndürülebilir bir ibre/cetvel + sembol sütunu var; tam işlevi kesin çözülemedi (VERIFY BEFORE IMPLEMENTING).

Plan dosyasındaki Task 2 (`buildPlanetaryPictures()` eklendi) ve Task 4 (baştan yazıldı, alt görevler 4a-4e) bu bulgulara göre güncellendi.

**Referans script'ler (kod tabanına commit edilmedi, `storage/app/` altında — gitignored):** `_dial_mock_authentic.php` gerçek Presley verisiyle sıfırdan bir SVG üreten, `PlanetCatalog::map()`'ten gerçek Hamburg glif kodlarını kullanan bağımsız bir prototip script. Task 4 implementasyonuna başlayan kişi için başlangıç noktası olabilir, ama içindeki dairesel yayma algoritması BİLİNEN ŞEKİLDE HATALI (bkz. Task 4c) — doğrudan kopyalanmamalı.

## Assumptions Made
- Task 4'teki "hangi Blade view'ın `$charts` dizisini dönüp `chart-svg.blade.php`'yi include ettiği" tam olarak tespit edilmedi — **VERIFY BEFORE IMPLEMENTING** olarak işaretlendi.
- `tests/` dizin yapısı (Feature vs Unit) doğrulanmadı, Task 6'da not edildi.
- PDF'teki "Uranyen sistem"in Sun/Moon/Mercury...Pluto + Ay Düğümleri dışındaki asteroidlerinin (Ceres, Pallas, Juno, Vesta) mevcut sistemde zaten var olduğu varsayıldı (scout raporunda `asteroidKeys()` içinde görüldü) — bunlara dokunulmuyor.

## For Next Steps
- Kullanıcı planı gözden geçirmeli: `thoughts/shared/plans/PLAN-uranian-90-degree-dial.md`
- Onay sonrası Task 1 (Vulkanus bug fix) ile başlanması önerilir — diğer tüm görevlerin ön koşulu ve düşük riskli/hızlı bir kazanım.
- Task 4 (SVG render) büyüklüğü nedeniyle ayrı bir spike/mockup onayı önerilir (plan içinde risk olarak işaretlendi).
