---
id: 0033d
title: Indexer lee `python_runtime` y `python_runtime_deps` de app.md
status: pending
priority: low
created: 2026-05-02
depends_on: []
blocks: [0033]
---

## Objetivo

Que `fn index` recoja dos campos nuevos del frontmatter `app.md` y
los almacene en `apps` (registry.db). Permite consultas
"que apps necesitan runtime Python" y enable hooks de build
condicionales en `/compile`.

## Cambios

### Schema (`registry/migrations` o `registry/schema.go`)

```sql
ALTER TABLE apps ADD COLUMN python_runtime INTEGER NOT NULL DEFAULT 0;
ALTER TABLE apps ADD COLUMN python_runtime_deps TEXT NOT NULL DEFAULT '[]';
```

### Parser de `app.md`

Extender el parser de frontmatter de apps en `registry/parser.go`
para leer:

```yaml
python_runtime: true                    # bool, default false
python_runtime_deps:                    # array, default []
  - requests
  - certifi
```

### Frontmatter del template

Anadir los campos al template `docs/templates/app.md`:

```yaml
python_runtime: false
python_runtime_deps: []
```

Comentar que solo aplica a apps que ejecutan enrichers Python.

## Tests

- Parser test: `app.md` con los dos campos → struct correcto.
- Indexer test: tras `fn index`, query `SELECT python_runtime,
  python_runtime_deps FROM apps WHERE id='graph_explorer'` devuelve
  los valores esperados.

## Definicion de hecho

- `fn index` no rompe en apps sin los campos (default 0/`[]`).
- `graph_explorer/app.md` actualizado con `python_runtime: true` y
  deps reales (`requests` minimo).
- Query `SELECT id FROM apps WHERE python_runtime = 1` lista las
  apps que necesitan runtime embebido.
