---
id: "0049a"
title: "Setup proyecto `osint_graph` + sub-repo `graph_explorer`"
status: completado
type: feature
domain:
  - osint
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0049a — Setup proyecto `osint_graph` + sub-repo `graph_explorer`

## Metadata

| Campo | Valor |
|-------|-------|
| **ID** | 0049a |
| **Estado** | pendiente |
| **Prioridad** | alta |
| **Tipo** | infraestructura — parte de [#0049](0049-osint-graph-viewer.md) |

## Dependencias

**Bloqueada por:** ninguna.
**Desbloquea:** todos los demas sub-issues de 0049 (la estructura del proyecto debe existir antes).

---

## Objetivo

Dejar la infraestructura del proyecto `osint_graph` lista: estructura de directorios, `project.md`, vault con symlink, sub-repo Gitea vacio para `graph_explorer`, e indexado en `registry.db`.

## Contexto

Sigue las reglas `projects.md` (estructura) y `cpp_apps.md` (sub-repo + ubicacion). El analisis `analysis/ontology_graph` ya existente sera la fuente de datos de pruebas — pero NO se mueve dentro del proyecto en este sub-issue (ortogonal).

## Arquitectura

```
projects/osint_graph/                          # NEW
├── project.md                                 # NEW (ver template docs/templates/project.md)
├── apps/
│   └── graph_explorer/                        # NEW dir + .git apuntando a dataforge/graph_explorer
│       └── (vacio — el contenido se anade en 0049k)
├── analysis/                                  # vacio inicial
└── vaults/
    ├── vault.yaml                             # NEW
    └── osint_data -> ~/vaults/osint_graph/    # symlink

~/vaults/osint_graph/{raw,processed,exports}/  # NEW dirs reales (fuera del repo)

dataforge/graph_explorer (en Gitea)            # NEW repo vacio, branch master
```

## Tareas

### Fase 1 — Estructura local

- [ ] **1.1** Crear `projects/osint_graph/{apps,analysis,vaults}/`.
- [ ] **1.2** Crear `projects/osint_graph/project.md` con frontmatter:
  ```yaml
  ---
  name: osint_graph
  description: "Visualizacion + recoleccion de datos OSINT con grafos ontologicos. Visor agnostico GPU-accelerated capaz de consumir operations.db de cualquier app del registry."
  tags: [osint, graph, visualization, ontology, gpu]
  repo_url: ""
  ---
  ```
- [ ] **1.3** Crear `~/vaults/osint_graph/{raw,processed,exports}/` y symlink en `projects/osint_graph/vaults/osint_data`.
- [ ] **1.4** Crear `projects/osint_graph/vaults/vault.yaml`:
  ```yaml
  vaults:
    - name: osint_data
      description: "Datos OSINT crudos + procesados + exports para graph_explorer"
      path: "/home/lucas/vaults/osint_graph"
      tags: [osint, graphs]
  ```

### Fase 2 — Sub-repo Gitea

- [ ] **2.1** Crear repo Gitea `dataforge/graph_explorer` (vacio, branch `master`). Usar `gitea_create_repo_*` o el flujo de `/full-git-push`.
- [ ] **2.2** En `projects/osint_graph/apps/graph_explorer/`: `git init -b master` + `git remote add origin <url>` + commit vacio inicial + push.
- [ ] **2.3** Anotar `repo_url` en el futuro `app.md` (creado en 0049k) y, si conviene, en el `project.md` actual.

### Fase 3 — Indexado

- [ ] **3.1** `./fn index` desde la raiz.
- [ ] **3.2** Verificar:
  ```sql
  SELECT id, description FROM projects WHERE id='osint_graph';
  SELECT id, name, path FROM vaults WHERE project_id='osint_graph';
  ```

### Fase 4 — Cleanup

- [ ] Push del repo principal a master con commit `feat(projects): osint_graph project + graph_explorer sub-repo bootstrap`.
- [ ] Verificar con `fn show osint_graph`.

## Criterio de done

- [ ] `fn show osint_graph` muestra el proyecto con vault correctamente indexado.
- [ ] `projects/osint_graph/apps/graph_explorer/.git` existe y `git remote -v` apunta a `dataforge/graph_explorer`.
- [ ] El symlink de vault funciona (`ls projects/osint_graph/vaults/osint_data/`).

## Riesgos

| Riesgo | Mitigacion |
|---|---|
| Repo Gitea ya existe | Reusar; `git remote set-url origin` |
| Vault path absoluto rompe en otros PCs | Documentar en project.md; cada PC monta `~/vaults/osint_graph/` |
