feat(0035a): tipo Group + columna group_id en entities

Plumbing para issue 0035 — agrupacion de resultados de enrichers
cuando exceden umbral. Sin cambios visibles para el usuario todavia.

- Migracion idempotente: ALTER TABLE entities ADD COLUMN group_id si
  no existe (detectado via PRAGMA table_info). Se ejecuta al abrir
  el proyecto en switch_to_project y en el bootstrap inicial.
- Tipo Group en examples/types.yaml (template) y en el types.yaml
  del proyecto default activo en Windows.
- shape=square (regla en types_registry.cpp extendida a Group),
  color=#94A3B8, icon=ti-stack-2.
- Fields: name (req), count (int), enricher (string), batch_id (string).

Refs: issues/0035a-group-type-and-schema.md
This commit is contained in:
2026-05-03 14:23:23 +02:00
parent b0706b71c0
commit fc4f0824da
11 changed files with 559 additions and 8 deletions
+11
View File
@@ -72,6 +72,17 @@ bool project_create(const char* slug, std::string* error_msg);
// Idempotente: no-op si projects/ ya existe.
bool projects_migrate_legacy_layout();
// Migracion idempotente del schema de una operations.db existente.
// Detecta columnas/tablas ausentes via PRAGMA y aplica los ALTER TABLE
// minimos. Llamar al abrir un proyecto antes de cargar el grafo.
//
// Migraciones aplicadas:
// - 0035a: ALTER TABLE entities ADD COLUMN group_id TEXT (si falta)
//
// Devuelve true si la BD esta al dia (o ya lo estaba). Si falla, rellena
// `error_msg` y devuelve false.
bool project_migrate_schema(const std::string& path, std::string* error_msg);
// Lee/escribe `graph_explorer.ini` (junto al exe). Formato:
// last_active = <slug>
// recent = slug1,slug2,slug3