chore: auto-commit (7 archivos)

- .mcp.json
- bash/functions/pipelines/full_git_push.sh
- python/pyproject.toml
- python/uv.lock
- bash/functions/infra/jupyter_mcp_serve.md
- bash/functions/infra/jupyter_mcp_serve.sh
- dev/issues/0166-app-to-app-dependencies-tracking.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-01 01:29:45 +02:00
parent dfcb3c46a7
commit dbf5b45acd
7 changed files with 1985 additions and 9 deletions
@@ -0,0 +1,85 @@
---
id: "0166"
title: "Rastrear dependencias entre apps (app→app) para clonado/build reproducible"
status: pendiente
type: enhancement
domain:
- registry-quality
- build
scope: registry-only
priority: media
depends: []
blocks: []
related: []
created: 2026-05-31
updated: 2026-05-31
tags: [build, apps, dependencies, clone, migration]
---
# 0166 — Rastrear dependencias entre apps (app→app)
## APP Metadata
| Campo | Valor |
|-------|-------|
| **ID** | 0166 |
| **Estado** | pendiente |
| **Prioridad** | media |
| **Tipo** | enhancement — metadata de apps + `fn app clone` / `fn doctor` |
## Contexto
Durante la migración a Linux nativo (PC `lucas-linux`, 2026-05-31) al levantar los
servicios systemd hubo que clonar+compilar los apps de servicio. El build de
**`sqlite_api`** (`projects/fn_monitoring/apps/sqlite_api`) falló con:
```
handlers.go:13:2: package fn-registry/apps/data_factory/datafactory is not in std
```
`sqlite_api` **importa un paquete de otro app** (`apps/data_factory/datafactory`).
Como `data_factory` no estaba clonado, no compilaba. Hubo que clonarlo a mano para
desbloquear el build. No hay forma declarada de saber, antes de clonar/compilar un app,
**qué otros apps necesita**.
## Problema
- `fn app clone <id>` clona solo el repo pedido; no arrastra los apps de los que depende.
- `fn sync locations` lista paths por PC pero no relaciones app→app.
- El grafo de dependencias entre apps es implícito (vive solo en los `import` de Go),
así que clonar el subset correcto en una máquina nueva es ensayo-error.
## Objetivo
Hacer explícitas y consultables las dependencias **app→app**, para que:
1. Se pueda **saber** qué apps dependen de qué apps (consulta / reporte).
2. `fn app clone <id>` pueda **arrastrar** los apps-dependencia (o al menos avisarlos).
3. `fn doctor` detecte clones incompletos (app presente pero su dep ausente).
## Propuesta (a concretar)
1. **Metadata declarada** en `app.md`: añadir campo `depends_on_apps: [<id>...]`
en el frontmatter (análogo a `uses_functions`/`uses_types` de las funciones).
2. **Detección automática** (validación): un audit que parsee los `import` de cada app,
detecte imports de la forma `fn-registry/apps/<X>/...` o `.../projects/.../apps/<X>/...`
y compare con `depends_on_apps` (igual que `audit_uses_functions` para funciones).
- Caso semilla confirmado: `sqlite_api``data_factory`.
3. **`fn app clone --with-deps <id>`**: resuelve el cierre transitivo de `depends_on_apps`
y clona todo lo necesario a las rutas de `pc_locations`.
4. **`fn doctor`**: marcar `[incomplete-clone]` si un app está clonado pero falta un
`depends_on_apps`.
## Notas
- Relacionado (mismo arrastre de migración, issues aparte si procede):
- Los `repo_url` de varios apps de servicio (`registry_api`, `services_api`) apuntan al
alias `gitea.organic-machine.com` que **no resuelve**; el host real es
`gitea-dgg044oo04woo4ggcsws4gk0.organic-machine.com`. `fn app clone` falla por eso.
- Los `go.mod` de los apps de servicio requieren `go mod tidy` antes de compilar
(deps faltantes con go 1.26).
## Criterio de hecho
- [ ] Campo `depends_on_apps` documentado y poblado al menos en `sqlite_api`.
- [ ] Audit que detecta imports app→app y reporta drift vs `depends_on_apps`.
- [ ] `fn app clone` resuelve dependencias (o las avisa).