refactor(yahweh): Fase 2 — extraer helpers puros a yahweh-meta-runtime

Sigue de la Fase 1 (lift del schema). Ahora los helpers puros que
cualquier widget renderer o backend ejecutor consume sobre el schema
viven en yahweh-meta-runtime. Sin GPUI, sin nakui — usa cierres en
lugar de traits para decoupling máximo.

Crate nuevo crates/modules/ui_engine/libs/meta-runtime:
- parse.rs: parse_field_value, infer_param_value, resolve_param_value.
- delta.rs: compute_field_delta, compute_clear_fields.
- refs.rs: validate_entity_refs(load: F, refs) con cierre
  Fn(&str, Uuid) -> Option<Value> en vez de trait Store.
- format.rs: human_label_for_record, render_value, value_to_input_text,
  short_uuid.
- 33 tests propios.

nakui-ui:
- Nueva dep yahweh-meta-runtime.
- Borrado código local equivalente (~200 líneas) + 34 tests
  duplicados.
- validate_entity_refs callsite usa cierre:
  validate_entity_refs(|e, id| store.load(e, id), &refs).
- 14 tests runtime-específicos quedan (compact/snapshot/event-log/
  morphism pipeline/load_ui_modules).

Distribución tests: 48 → 14 nakui-ui; +33 yahweh-meta-runtime.
Cada crate afectado builds + tests limpio individualmente. Workspace
build full no completó esta corrida por OOM al compilar
surrealdb-core (ambiental, no relacionado).

Fase 2b pendiente: extraer render widgets (form/list/modal/
EntityRef selector) a yahweh — requiere diseñar MetaBackend trait.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sergio
2026-05-10 01:17:17 +00:00
parent f5987d9cfc
commit 6104484498
11 changed files with 755 additions and 592 deletions
+88 -1
View File
@@ -4,7 +4,94 @@ Registro cronológico de cambios sustantivos en el monorepo Brahman. Cada
entrada lista las acciones concretas tras un commit; para detalles de
ratio/diff ver `git show <sha>`.
## 2026-05-09
## 2026-05-10
### refactor(yahweh): Fase 2 — extraer helpers puros a `yahweh-meta-runtime`
Sigue de la Fase 1 (lift del schema a yahweh). Ahora extraemos los
**helpers puros** que cualquier widget renderer o backend ejecutor
necesita sobre el schema: parse, delta, validation, format. Sin
GPUI, sin acoplamiento a un backend específico.
Crate nuevo: `crates/modules/ui_engine/libs/meta-runtime/`
(`yahweh-meta-runtime`):
- **Deps**: `serde_json`, `thiserror`, `uuid`, `yahweh-meta-schema`.
NO GPUI, NO nakui.
- **Módulos**:
- `parse.rs``parse_field_value(kind, raw)`,
`infer_param_value(raw)`, `resolve_param_value(name, raw, spec)`.
- `delta.rs``compute_field_delta(current, proposed)`,
`compute_clear_fields(current, to_clear)`.
- `refs.rs``validate_entity_refs(load: F, refs)` donde `F`
es un cierre `Fn(&str, Uuid) -> Option<Value>`. Decoupling vía
closure en lugar de trait — evita atar el crate a cualquier
backend específico (no hay `Store` trait acá), y los callers
pasan `|e, id| store.load(e, id)` trivialmente.
- `format.rs``human_label_for_record(value, id)`,
`render_value(opt_value)`, `value_to_input_text(value)`,
`short_uuid(id)`.
- **33 tests propios** en el crate nuevo (cubren todos los helpers
movidos + edge cases).
Cambios en `nakui-ui`:
- **Nueva dep** `yahweh-meta-runtime` en `Cargo.toml`.
- **Imports**: agrega `use yahweh_meta_runtime::{...}` con todos los
helpers extraídos. Borrado el código local equivalente
(~200 líneas).
- **`validate_entity_refs` callsite**: pasa de
`validate_entity_refs(&*store, &refs)` a
`validate_entity_refs(|e, id| store.load(e, id), &refs)` — el
closure es ergonómico sobre cualquier `Store`.
- **Tests duplicados borrados** (~34 tests que ahora viven en
`yahweh-meta-runtime`):
- `parse_field_*` (text/number/boolean variants)
- `infer_param_value_*`
- `delta_*` (5 tests)
- `clear_fields_*` (3 tests)
- `validate_entity_refs_*` (5 tests)
- `resolve_param_*` (6 tests)
- `parse_field_entity_ref_*` (4 tests)
- `human_label_*` (3 tests), `render_value_*`,
`value_to_input_text_inverse_of_parse`
- **Tests que se quedan en nakui-ui** (runtime-específicos):
- `lookup_field_simple_and_nested` — helper local del list renderer.
- `append_compact_msg_handles_both_branches`,
`runtime_compact_cycle_resets_counter_after_threshold`,
`snapshot_path_for_replaces_extension`,
`maybe_compact_log_*` (3) — wiring de persistencia a EventLog.
- `load_ui_modules_via_brahman_cards_*` (3) — integración con el
brazo de cards.
- `value_to_input_then_parse_round_trip` — round-trip del par
`value_to_input_text + parse_field_value` (toca ambos lados).
- `event_log_replay_restores_memory_store`,
`morphism_pipeline_executes_real_sales_vender`,
`event_log_replay_handles_full_crud_cycle` — E2E nakui-core.
Distribución de tests:
- `nakui-ui`: 48 → 14 (los 34 movidos viven en runtime).
- `yahweh-meta-runtime`: 33 (nuevos).
- `yahweh-meta-schema`: 8 (sin cambio).
- `brahman-cards`: 26 (sin cambio).
- Total cubriendo el área: 81.
Build: cada crate afectado compila y testea limpio individualmente.
Workspace build full no se completó esta corrida por OOM al
compilar `surrealdb-core` (problema ambiental no relacionado al
refactor).
Lo que NO hace Fase 2:
- No mueve los widgets render (`render_form`/`render_list`/
`render_entity_ref_selector`/`render_confirm_delete_banner`) a
yahweh — eso es Fase 2b/3, requiere diseñar el `MetaBackend`
trait porque las render functions tocan el state de `MetaUi`
(form_inputs, pending_delete, executors).
**Pendientes** (orden):
1. **Fase 2b**: extraer widget render a un crate yahweh nuevo
(sugerencia: `yahweh-widget-meta-form`). Requiere diseñar
`MetaBackend` trait.
2. **Fase 3**: thin shell — `nakui-ui` queda reducido a una impl
de backend wireada a `nakui-core`.
3. **KCL → Nickel** + **card.k eliminado**.
### refactor(yahweh): Fase 1 — `nakui-ui-schema` → `yahweh-meta-schema`
Primer paso del refactor yahweh. El schema de UI declarativa