feat(doctor): add fn doctor CLI + 14 functions for system management
Adds `fn doctor` read-only diagnostic command with subcommands artefacts, services, sync, uses-functions, unused, and --json flag for agents. Each subcommand wraps a registry function in functions/infra/. New functions: - artefact_doctor, services_status, pc_locations_drift, audit_uses_functions, find_unused_functions (Go diagnostics) - backup_sqlite_db, rotate_backups, wait_for_http, wait_for_port, port_kill, tail_journal, pre_commit_hook_install (bash utilities) - notify_telegram (Go HTTP) - backup_all pipeline (tag launcher) Plus prior session leftovers (scan_secrets_in_dirty, append_diary_entry, git utilities, http_session_cookie_middleware, compile/full-git pipelines). Fixes pc_locations_drift filepath.Join bug with absolute dir_path. Documents fn doctor in CLAUDE.md, .claude/rules/fn_doctor.md (rule 23), docs/architecture.md, CHANGELOG.md (2026-05-07), and diary entry. First fn doctor uses-functions run found drift in 7/12 apps (deuda para sincronizar app.md con imports reales). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -119,6 +119,22 @@ El agente consulta la operacional para:
|
||||
|
||||
---
|
||||
|
||||
## Capa diagnostica: `fn doctor`
|
||||
|
||||
Sobre el modelo registry+operations existe el comando `fn doctor` (read-only) que reporta estado del sistema:
|
||||
|
||||
- `artefacts` — salud por artefacto (git/venv/manifest/upstream).
|
||||
- `services` — apps tag `service` + systemctl + puerto.
|
||||
- `sync` — drift `pc_locations` BD vs disco del PC actual.
|
||||
- `uses-functions` — drift entre imports reales en codigo de apps y `uses_functions` declarado en `app.md`.
|
||||
- `unused` — funciones del registry sin consumidores.
|
||||
|
||||
Cada subcomando es wrapper fino sobre una funcion del registry (`functions/infra/{artefact_doctor,services_status,pc_locations_drift,audit_uses_functions,find_unused_functions}.go`). La logica vive en el registry; el CLI solo formatea. `--json` produce salida estructurada para agentes. Detalle en `.claude/rules/fn_doctor.md`.
|
||||
|
||||
Util tras deploys, `fn sync`, `git pull` masivos o como gate antes de evaluar metricas del bucle reactivo.
|
||||
|
||||
---
|
||||
|
||||
## Mejoras incorporadas al schema v1.0
|
||||
|
||||
| Problema | Solución |
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
# 2026-05-07
|
||||
|
||||
## 01:39 — `fn doctor` + 14 funciones nuevas para gestion del sistema
|
||||
|
||||
Sesion completa: del analisis de huecos del registry a CLI funcionando + diagnostico real ejecutando.
|
||||
|
||||
### Hecho
|
||||
|
||||
- **Razonamiento gap analysis** del registry actual (1051 funciones, 18 apps, 9 analyses): identificadas 10 categorias de funcionalidad ausente — backup/snapshot, doctor/health, secrets, cleanup/orphans, notify, lifecycle, ops cross-app, test coverage, sync verification, utils chicos.
|
||||
- **Plan en 5 fases** con priorizacion top-5: backup, doctor, audit_uses_functions, notify_telegram, wait_for_http.
|
||||
- **Fase 1 — 8 funciones bash/go base**: `backup_sqlite_db`, `rotate_backups`, `wait_for_http`, `wait_for_port`, `port_kill`, `tail_journal`, `pre_commit_hook_install`, `notify_telegram_go_infra`. Todas creadas via `fn-constructor` en paralelo (4+4).
|
||||
- **Fase 2 — 5 funciones diagnostico Go en `functions/infra/`**: `artefact_doctor`, `services_status`, `pc_locations_drift`, `audit_uses_functions`, `find_unused_functions`. Tests pasan. 5 paralelos.
|
||||
- **Fase 3 — pipeline `backup_all_bash_pipelines`** (tag `launcher`): orquesta backups de `registry.db` + cada `operations.db` + vaults con `rsync --link-dest`.
|
||||
- **Fase 4 — `fn doctor` CLI** (`cmd/fn/doctor.go`): subcomandos `artefacts|services|sync|uses-functions|unused|all`, flag `--json`. Wrapper fino sobre las 5 funciones de Fase 2. Registrado en `cmd/fn/main.go` y `printUsage`.
|
||||
- **Documentacion**: `.claude/rules/fn_doctor.md` (regla 23 en INDEX), seccion CLI en `.claude/CLAUDE.md`, capa diagnostica en `docs/architecture.md`, entrada `2026-05-07` en `CHANGELOG.md`.
|
||||
|
||||
### Bug encontrado y arreglado
|
||||
|
||||
- `pc_locations_drift_go_infra`: `filepath.Join(absoluto, absoluto)` → path corrupto tipo `/home/lucas/fn_registry/home/lucas/fn_registry/...`. Sintoma: TODOS los artefactos reportados como `missing_on_disk`. Fix: chequear `filepath.IsAbs` antes de unir (`pc_locations_drift.go:79` y `:135`).
|
||||
- `go.mod`: `golang.org/x/net` movido a deps directas via `go mod tidy` tras anadir `notify_telegram` (transitiva promovida).
|
||||
|
||||
### Hallazgos de la primera ejecucion
|
||||
|
||||
- `fn doctor artefacts` → 25/27 OK. Falla `chart_demo_cpp_viz` y `shaders_lab_cpp_gfx` por `git_not_initialized` (sub-repos no clonados en este PC, esperado).
|
||||
- `fn doctor services` → 8 services registrados, solo `sqlite_api.service` activo en este PC (puerto 8484 listening).
|
||||
- `fn doctor sync` → sin drift tras el fix.
|
||||
- `fn doctor uses-functions` → **drift real en 7/12 apps**: `auto_metabase`, `dag_engine`, `deploy_server`, `docker_tui`, `kanban`, `metabase_registry`, `script_navegador`. Apps declaran funciones que no usan O usan funciones no declaradas en `app.md`. Pendiente sincronizar.
|
||||
- `fn doctor unused` → muchas funciones core (`compose2`, `curry2`, `chunk`, `flat_map_slice`, etc.) sin consumidores aun. Esperado mientras el registry crece antes que las apps.
|
||||
|
||||
### Comandos clave
|
||||
|
||||
```bash
|
||||
# Build
|
||||
CGO_ENABLED=1 go build -tags fts5 -o fn ./cmd/fn/
|
||||
|
||||
# Verificar todo
|
||||
./fn index
|
||||
./fn doctor # texto humano
|
||||
./fn doctor --json > out.json # para agentes
|
||||
./fn doctor uses-functions # ver drift de imports
|
||||
./fn doctor unused # funciones huerfanas
|
||||
|
||||
# Backup completo (cron-friendly)
|
||||
bash bash/functions/pipelines/backup_all.sh ~/backups/fn_registry
|
||||
```
|
||||
|
||||
### Numeros
|
||||
|
||||
- 1051 → 1065 funciones tras `fn index` (14 nuevas).
|
||||
- 19 apps, 9 analyses, 4 projects, 3 vaults sin cambios.
|
||||
- `fn doctor uses-functions` deja mapeada deuda de sincronizacion en 7 apps.
|
||||
|
||||
### Lo siguiente que pega
|
||||
|
||||
- Sincronizar `uses_functions` en los 7 `app.md` con drift detectado por `fn doctor uses-functions`.
|
||||
- Decidir limpieza de funciones core sin consumidores (`fn doctor unused`): mantener (futuro), tag `deprecated`, o borrar.
|
||||
- Cron diario de `backup_all` apuntando a `~/backups/fn_registry`.
|
||||
- Considerar `notify_telegram` integrado en `deploy_server` para alertas de fallos.
|
||||
- Extender `fn doctor` con subcomando `secrets` que invoque `scan_secrets_in_dirty` sobre todos los repos (apps + analyses) en una pasada.
|
||||
|
||||
### Archivos tocados
|
||||
|
||||
- Nuevos: 14 pares `.sh/.go + .md` en `bash/functions/{infra,pipelines}/` y `functions/infra/`. `cmd/fn/doctor.go`. `.claude/rules/fn_doctor.md`. `docs/diary/2026-05-07.md`.
|
||||
- Modificados: `cmd/fn/main.go` (case `doctor`), `.claude/CLAUDE.md`, `.claude/rules/INDEX.md`, `docs/architecture.md`, `CHANGELOG.md`, `go.mod`, `go.sum`.
|
||||
- Sin commit: 74 archivos en git status pendientes de revision por humano.
|
||||
Reference in New Issue
Block a user