refactor(monorepo): reorganización lógica + renames + SDDs + split CHANGELOG

Reorganización física de crates/:
- core/ (mezclaba 6 propósitos) se divide en protocol/, init/, runtime/, compat/
- shared/ (3 crates) se redistribuye en protocol/ e init/
- lapaloma (sub-módulo de ui_engine) se promueve a modules/pineal/

Renames de proyectos:
- shipote → shuma (runtime de sandboxes)
- nouser → akasha (explorador de Mónadas)
- yahweh → nahual (motor GPUI, antes ui_engine/)
- lapaloma → pineal (data-viz agnóstica)

Fraccionamiento UI → core agnóstico:
- vista-core (DeckState + snap, 175 LOC, 5 tests verdes)
- barra-core (Task + render_html + sanitize, 90 LOC, 5 tests verdes)
- vista-web y barra-web ahora son thin DOM bindings

Documentación nueva:
- 16 SDDs por subdirectorio (≤80 LOC c/u): protocol/init/runtime/compat
  + 10 módulos + apps/
- docs/STATUS.md con cifras reales por proyecto
- docs/ROADMAP.md con plan a finalización (6 hitos, ~6-8 semanas)
- CHANGELOG.md particionado en docs/changelog/<proyecto>.md (7 buckets)

Automatización:
- scripts/reorg.py — script idempotente que: git mv directorios, renombra
  package names, recomputa path = refs, reescribe imports rust, actualiza
  workspace Cargo.toml. Soporta --dry-run.
- scripts/split-changelog.py — particiona CHANGELOG por componente.

Validación:
- cargo check --workspace pasa (124 crates + 2 nuevos cores).
- 10 tests adicionales (5 en vista-core + 5 en barra-core) verdes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-19 14:48:34 +00:00
parent 86fb6ae20b
commit 550c98f275
375 changed files with 8512 additions and 7155 deletions
@@ -0,0 +1,10 @@
[package]
name = "nahual-widget-container-core"
version = { workspace = true }
edition = { workspace = true }
license = { workspace = true }
description = "Tipos compartidos para contenedores (ChildSlot, etc.). Imported por Splitter, Tabs, Tiled y la Shell."
[dependencies]
gpui = { workspace = true }
nahual-core = { workspace = true }
@@ -0,0 +1,38 @@
//! `nahual_widget_container_core` — tipos compartidos por todos los
//! contenedores (Splitter, Tabs, Tiled, futuros).
//!
//! La pieza más relevante es [`ChildSlot`]: el "paquete" con que la Shell
//! le entrega a un contenedor un hijo ya instanciado. La identidad
//! estable (`id: NodeId`) es lo que permite **swappear el kind del
//! contenedor sin perder los hijos**: cuando el JSON cambia
//! `kind: "Split"` por `kind: "Tabs"`, el LayoutHost descarta el viejo
//! contenedor pero pasa los mismos `ChildSlot` (con los mismos AnyView ya
//! con estado) al contenedor nuevo. Esa preservación es la promesa
//! arquitectónica de la app.
//!
//! `flex` y `label` son metadatos opcionales que cada contenedor
//! interpreta a su gusto:
//! - Splitter: usa `flex` para repartir; ignora `label`.
//! - Tabs: usa `label` para el título de la pestaña; ignora `flex`.
//! - Tiled: usa ambos opcionalmente (peso de tile, label hover).
use gpui::AnyView;
use nahual_core::NodeId;
/// Slot de un hijo entregado a un contenedor. La Shell construye el
/// `Vec<ChildSlot>` haciendo DFS sobre el `LayerConfig` del JSON.
#[derive(Clone)]
pub struct ChildSlot {
/// Identidad estable (proviene del campo `id` del JSON, o se
/// sintetiza desde el path estructural).
pub id: NodeId,
/// Peso flex relativo entre hermanos. Útil para Splitter / Tiled;
/// los contenedores que no lo usan lo ignoran.
pub flex: f32,
/// Texto opcional para decoración (título de tab, label de tile, etc).
/// Si `None`, los contenedores que lo necesiten caen al `id` como
/// fallback razonable.
pub label: Option<String>,
/// El widget instanciado, listo para colgar del árbol de render.
pub view: AnyView,
}