904f3340695b7e681fb54720c3bf7b3118b9fc40
`NatalChart::compute` cuesta varios ms (VSOP2013 + casas + aspectos base). Bajo drag de slider en el panel, el shell dispara `compose()` decenas de veces — la natal del sujeto principal y la del partner de Synastry/Composite son **idénticas** entre frames pero hoy se recomputan. Nuevo `natal_cache.rs`: LRU de 8 entradas con `Mutex<Vec<(Key, Arc)>>`, key = hash de contenido `(StoredBirthData, StoredChartConfig, offset_minutes)`. Move-to-front en hit, evict del back cuando se llena. f64s se hashean vía `to_bits()`. `compute_natal_chart` ahora consulta el cache antes de delegar a eternal; firma cambia a devolver `Arc<NatalChart>` — los call sites (natal principal, partner de Synastry/Composite) usan auto-deref a través de `Arc::Deref` sin cambios. Editar una carta (cualquier campo de `StoredBirthData` o `StoredChartConfig`) invalida automáticamente su entrada porque el hash cambia. Capacidad 8 cubre el caso típico (natal + partner) con holgura. Test nuevo `natal_cache_hits_are_faster` valida que `compose` con offset_minutes repetido es más rápido que con offset distinto (HIT vs MISS): 9 tests engine, todos verdes. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Description
No description provided
Languages
Rust
96.7%
JavaScript
0.8%
Shell
0.8%
Python
0.8%
HTML
0.3%
Other
0.6%