--- id: 0008 title: Inspector editable — campos del schema + tags + extras status: completed priority: high created: 2026-04-30 completed: 2026-05-01 depends_on: [0005] --- ## Objetivo Refactor del Inspector (`views_inspector`) de read-only a editable. El usuario edita los datos de un nodo y al pulsar Save se persisten en `operations.db` con un solo UPDATE. ## Bloques del nuevo Inspector 1. **Identidad** - `name` (InputText), `type_ref` (combo con tipos del proyecto), `description` (InputTextMultiline corto), `status` (combo: active/stale/corrupted/archived). 2. **Fields del tipo** (driven by 0005) - Render automatico segun `EntitySpec.fields`: - `string` → InputText. - `int` → InputInt. - `float` → InputDouble. - `bool` → Checkbox. - `date` → InputText con placeholder `YYYY-MM-DD` + validacion. - `url` → InputText + boton "Open" que lanza el navegador. - `enum` → Combo con `values`. - Lee/escribe a `entities.metadata` (JSON). Campos requeridos marcados con `*`. 3. **Extras** (campos fuera del schema del tipo) - Lista key-value, "+" para anadir. Tipo siempre string en v1. - Permite que el usuario meta info ad-hoc sin tocar el schema. 4. **Tags** - Chips con boton X para quitar. Input al final con autocomplete (lista de tags ya existentes en la BD via `SELECT DISTINCT json_each.value FROM entities, json_each(entities.tags)`). - Enter o coma valida el chip. 5. **Notes** — sigue en su panel actual, pero anadir un boton "Open notes" en el Inspector que enfoca el panel Note. ## Cambios en codigo - `entity_ops.{h,cpp}`: - `bool entity_update(db_path, id, name, type_ref, description, status, tags_json, metadata_json)` — un solo UPDATE. - `bool entity_list_distinct_tags(db_path, vector* out)` para autocomplete. - `views.cpp::views_inspector`: reemplazo completo. Estado de edicion en `AppState` para que cerrar y reabrir conserve el draft hasta Save. - Save → reload del grafo (mismo flujo que toolbar add-node hoy). ## Definicion de hecho - Editar name, type_ref, description, status, tags, fields tipados y extras. - Save persiste y el viewport refleja los cambios (label, color del tipo, etc.). - Cancelar / cambiar de seleccion sin guardar muestra un confirm dialog. - Tags se autocompletan con las existentes en la BD.