--- id: 0006 title: Sistema de proyectos dentro de la app — subcarpetas + switcher status: completed priority: high created: 2026-04-30 completed: 2026-04-30 --- ## Objetivo Cada "proyecto" es una subcarpeta junto al exe que contiene su propio `operations.db`, `types.yaml` y `graph_explorer.db` (layouts). El usuario crea proyectos, los nombra, y conmuta entre ellos sin reiniciar la app. Esto es lo que va a permitir guardar muchos datos separados por caso/tema sin acumularlos en un solo grafo. Independiente del concepto de "project" del registry (`projects/` raiz del repo) — aqui es organizativo, dentro de la app desplegada. ## Layout en disco (junto al exe) ``` graph_explorer.exe graph_explorer.ini # estado global: ultimo proyecto abierto, recientes projects/ default/ operations.db types.yaml # copia editable; semilla = examples/types.yaml graph_explorer.db # layouts de este proyecto notes/ # opcional, .md sueltos caso_aurgi/ operations.db types.yaml graph_explorer.db osint_demo/ ... ``` ## UI - Menu "Project" en la menubar: - `New...` (input de nombre, valida slug, crea carpeta + semilla types.yaml + operations.db vacio con schema migrado). - `Open...` (combo con los proyectos detectados en `./projects/`). - `Recent` (lista los ultimos 5 desde `graph_explorer.ini`). - `Reveal in explorer` (abre la carpeta del proyecto activo). - Title bar muestra `graph_explorer — `. - Switch de proyecto: cierra BDs, limpia grafo + viewport, abre nuevas BDs, hace reload. ## Cambios en codigo - `main.cpp`: - Resolver paths a traves de `g_active_project` en vez de `./operations.db` y `./graph_explorer.db` directos. - Modo legacy: si arranca con `--input ` o positional, no usa proyecto (compatibilidad con flujo actual). - `app_state` nuevo campo `string active_project_dir`. - Nueva fn `project_create(name)` que escribe schema base de operations.db (entities/relations/...) — extraerlo de lo que ya hace el registry o copiar el DDL. - `graph_explorer.ini` lee/escribe via `app_settings_*` ya existente. ## Migracion del flujo actual - Al primer arranque sin `--input`, si no existe `./projects/`, crear `./projects/default/` y mover `./operations.db` + `./graph_explorer.db` ahi (si existen). - Issues 0005/0007/0008 ya asumen este layout. ## Definicion de hecho - Crear, abrir y conmutar proyectos sin reiniciar. - Cada proyecto tiene su `operations.db`, `types.yaml`, `graph_explorer.db` aislados. - "Recent" persiste entre sesiones via `graph_explorer.ini`. - El layout (posiciones de nodos) es por-proyecto: cambiar de proyecto recupera las posiciones del nuevo, no las del anterior.