feat: cierra issues 0050 y 0052 + commands automáticos

- 0050: jupyter_exec reescrito sin Y.js (REST + KernelClient). Bug raíz adicional: HEAD /api/contents da 405 → cambiado a GET. 9 tests (5 unit + 4 e2e).
- 0052: footprint_aurgi cerrado. Bug fix en setup_geo_stack_docker_pipeline (verify aborta si compose up falla; nombre de contenedor incorrecto).
- Nueva primitiva docker_container_running_py_infra (7 tests).
- /full-git-push y /full-git-pull pasan a modo automático: auto-commit + push sin preguntar, aborta solo si detecta secrets.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-05 23:34:03 +02:00
parent 1bb4f2e0f8
commit 611fc81b6b
14 changed files with 684 additions and 342 deletions
+19 -19
View File
@@ -1,8 +1,10 @@
# /full-git-pull — Pull de fn_registry + todos los sub-repos + submodules + fn sync
# /full-git-pull — Pull automático de fn_registry + sub-repos + submodules + fn sync
Trae los últimos cambios del remote para el repo principal `fn_registry`, todos los sub-repos git anidados que **ya existan localmente**, y los submodules de `cpp/vendor/`. Después regenera `registry.db` y corre `fn sync` para tirar de la metadata del `registry_api` (apps, projects, analysis, vaults, pc_locations registrados desde otros PCs).
Trae los últimos cambios del remote para el repo principal `fn_registry`, todos los sub-repos git anidados que **ya existan localmente**, y los submodules de `cpp/vendor/`. Después regenera `registry.db` y corre `fn sync` para tirar de la metadata del `registry_api`.
**No clona repos que falten.** Cada PC tiene solo el subset de apps/analyses que le interesa (ver memoria "Gitea = fuente de verdad; PCs subset"). Si en este PC necesitas un sub-repo que aún no tienes, clónalo a mano:
**Modo automático (preferencia del usuario):** este comando NO pregunta. Auto-stashea dirty trees antes de pullear y hace `pop` después. Sigue con el resto de repos aunque uno falle. Solo se detiene si detecta riesgo serio (conflicto en stash pop que requiere intervención humana).
**No clona repos que falten.** Cada PC tiene solo el subset de apps/analyses que le interesa. Si en este PC necesitas un sub-repo que aún no tienes, clónalo a mano:
```bash
git clone https://<user>:<token>@<gitea-host>/dataforge/<name>.git <path>
@@ -19,21 +21,18 @@ Consulta `pc_locations` para ver dónde lo tiene otro PC y reproduce el path.
### 1. Descubrir repos locales
```bash
cd /home/lucas/fn_registry # ajustar al PC
cd /home/lucas/fn_registry
REPOS=$(find . -name ".git" -type d \
-not -path "./.git/*" \
-not -path "*/node_modules/*" \
-not -path "*/.venv/*" \
-not -path "*/cpp/vendor/*" \
-not -path "*/cpp/build/*" \
-not -path "*/sources/*" \
-not -path "*/temp/*" \
-not -path "*/subrepos/*" 2>/dev/null | sed 's|/.git$||')
-not -path "./.git" -not -path "./.git/*" \
-not -path "*/node_modules/*" -not -path "*/.venv/*" \
-not -path "*/cpp/vendor/*" -not -path "*/cpp/build/*" \
-not -path "*/sources/*" -not -path "*/temp/*" -not -path "*/subrepos/*" 2>/dev/null \
| sed 's|/.git$||')
REPOS=". $REPOS"
```
Solo se actualizan los sub-repos que ya tengan `.git/` localmente. Lo que falte se queda fuera — pull-on-demand por sub-repo.
Solo se actualizan los sub-repos que ya tengan `.git/` localmente.
### 2. Para cada repo: stash si dirty, pull --ff-only, pop
@@ -56,8 +55,8 @@ for r in $REPOS; do
done
```
- Si `--ff-only` falla por divergencia, abortar el pull de ese repo y reportar (no rebasear sin permiso).
- Si `stash pop` produce conflictos, **avisar** y dejar el conflicto al usuario; no resolverlo automáticamente.
- Si `--ff-only` falla por divergencia → reportar ese repo, seguir con el resto. **No** rebasear ni mergear.
- Si `stash pop` produce conflictos **avisar al usuario al final** y dejar el conflicto sin tocar; seguir con los demás repos.
### 3. Submodules del repo principal
@@ -71,7 +70,7 @@ git submodule update --init --recursive 2>&1 | tail -10
CGO_ENABLED=1 ./fn index 2>&1 | tail -3
```
### 5. fn sync con credenciales de pass
### 5. fn sync
```bash
USER=$(pass registry/basicauth-user | head -1)
@@ -82,14 +81,15 @@ export REGISTRY_API_TOKEN="$TOKEN"
./fn sync
```
Si `pass` falla → gpg-agent locked, pedir al usuario `pass show registry/api-token` en su terminal real.
Si `pass` falla → gpg-agent bloqueado, pedir al usuario `pass show registry/api-token` en su terminal real.
### 6. Resumen
Tabla concisa: por repo, commits pulleados o "ya estaba al día"; submodules actualizados; result de `fn index`; result de `fn sync`.
Tabla concisa: por repo, commits pulleados o "ya estaba al día"; submodules actualizados; resultado de `fn index`; resultado de `fn sync`. Si algún repo quedó con conflicto de stash o divergencia, listarlos al final con la acción sugerida.
## Notas
- **Modo no-interactivo por diseño.** El usuario prefiere flujos rápidos sin confirmaciones.
- Pull solo es fast-forward — nunca rebase ni merge automático.
- Si el repo principal pulleó cambios y eliminó archivos referenciados por sub-repos (raro), el usuario debe resolverlo manualmente.
- Auto-stash incluye untracked (`--include-untracked`) para no perder archivos nuevos.
- `fn index` se corre **antes** de `fn sync` para que las locations locales reflejen el estado actual.