Snapshot de WIP acumulado de sesiones previas antes de merge wave 1 del flow 0008 (kanban_cpp + agent_runner_api + DoD schema). Incluye: - dev/flows/0008-kanban-cpp-and-agent-workflows.md - dev/issues/0112-0119*.md (7 sub-issues) - WIP previo en cmd/fn/doctor.go, registry/*, modules/, cpp/, etc. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6.6 KiB
name, lang, domain, version, description, tags, uses_functions, uses_types, framework, entry_point, dir_path, service
| name | lang | domain | version | description | tags | uses_functions | uses_types | framework | entry_point | dir_path | service | ||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| dag_engine | go | infra | 0.1.0 | Motor de ejecucion de DAGs con CLI y interfaz web. Reemplaza Dagu con implementacion propia compatible con el formato YAML existente. Almacena historial de ejecuciones en SQLite. |
|
|
|
net/http + vite + react | main.go | apps/dag_engine |
|
Arquitectura
CLI + servidor web en un unico binario:
dag-engine run <path.yaml> # ejecuta un DAG desde terminal
dag-engine list [dir] # lista DAGs con schedule y estado
dag-engine status [dag_name] # historial de ejecuciones
dag-engine validate <path.yaml> # valida sin ejecutar
dag-engine server # arranca HTTP + frontend web
Backend (Go)
net/httpconServeMux(Go 1.22+ pattern routing)- SQLite via
go-sqlite3para historial de runs - Executor: parse -> validate -> topo_sort -> spawn/wait por nivel -> store
- Scheduler: cron_ticker por cada DAG con schedule
Frontend (Vite + React + Mantine)
- DagList: tabla de DAGs con schedule, tags, ultimo status
- DagDetail: metadata + "Run Now" + historial
- RunDetail: timeline de steps con stdout/stderr expandible
Storage
SQLite dag_engine.db:
dag_runs: id, dag_name, status, trigger, started_at, finished_at, errordag_step_results: id, run_id, step_name, status, exit_code, stdout, stderr, duration_ms
Build
cd frontend && pnpm install && pnpm build
cd .. && CGO_ENABLED=1 go build -tags fts5 -o dag-engine .
Uso
# CLI
./dag-engine run ~/dagu/dags/example.yaml
./dag-engine list ~/dagu/dags/
# Servidor web
./dag-engine server --port 8090 --dags-dir ~/dagu/dags/ --scheduler
# Browser: http://localhost:8090
Notas
Compatible con el formato YAML de Dagu. Lee DAGs existentes de ~/dagu/dags/ sin modificaciones.
Puerto por defecto 8090 (mismo que Dagu).
2026-05-16 — Fix function-not-found en steps function: + panel Logs en RunDetail [done]
Sintoma: fn_backup y daily-registry-audit fallaron 3 noches seguidas con error: function "<id>" not found (tried as ID and name) aunque las funciones existen en registry.db raiz.
Raiz: servicio systemd dag_engine.service tiene WorkingDirectory=/home/lucas/fn_registry/apps/dag_engine. Binario fn resuelve registry.db por (1) FN_REGISTRY_ROOT, (2) root() walk-up buscando go.mod, (3) exe dir (cmd/fn/ops.go:1597-1628). Sin FN_REGISTRY_ROOT seteado, (2) encuentra el go.mod de apps/dag_engine/ y devuelve ese dir — donde habia una copia stale apps/dag_engine/registry.db (262 KB, May 15) sin las funciones recien creadas. Viola regla .claude/rules/db_locations.md (registry.db SOLO en raiz).
Fix:
- Borrado
apps/dag_engine/registry.dbstale. ~/.config/systemd/user/dag_engine.service: anadidoEnvironment=FN_REGISTRY_ROOT=/home/lucas/fn_registry,FN_BIN=/home/lucas/fn_registry/fn,PATH=/usr/local/go/bin:/home/lucas/go/bin:...,HOME=/home/lucas. Sin PATH el stepgo vetfallaba conexec: "go": executable file not found in $PATH.apps/dag_engine/executor.go: para stepsfunction:el spawn exportaFN_REGISTRY_ROOT=<root>en env y, sistep.dir/working_dirvacios, fijadir = fnRegistryRoot. Belt-and-suspenders: aunque alguien lance el binario sin systemd, losfunction:steps usan el root canonico.
Verificacion: POST /api/dags/daily-registry-audit/run -> step audit_capabilities pasa (387 ms) en vez de fallar con not-found. Restantes failures (audit_artefacts exit 1, fn_backup exit 4 sin respetar continue_on.exit_code) son bugs reales independientes — fuera de scope.
2026-05-16 — Panel Logs en RunDetail (frontend) [done]
apps/dag_engine/frontend/src/pages/RunDetail.tsx: nuevo<Paper>"Logs" al final con<Code block>scrollable (max-h 480) +CopyButtonde Mantine (icono toggle copy/check teal).- Helper
buildLogText(run, steps)compone texto plano: metadata del run (dag, path, status, trigger, started/finished ISO, duration ms, error) + por step ([status] name exit=N Nms, started, finished, error, stdout, stderr indentado 4 espacios). - Permite pegar log entero al LLM para debugging sin abrir N collapses del
StepTimeline. - Build frontend pendiente:
pnpm buildrompe por errores preexistentes (StepTimeline.tsx:49usa API legacy<Collapse in={opened}>;main.tsx:1importa@mantine/core/styles.csssin tipos). Edit de RunDetail type-checkea limpio.
2026-05-16 — BBDDs canonicas (referencia rapida)
dag_engine.db:apps/dag_engine/dag_engine.db(+ WAL sidecars). Migrations enapps/dag_engine/store/migrations/(001_init.sql,002_step_function_id.sql). Tablasdag_runs,dag_step_results.- NO debe coexistir copia de
registry.dben este dir (violadb_locations.md). Si reaparece: borrarla.
Lo siguiente que pega
audit_artefactsfalla con exit 1 endaily-registry-audit— investigar stderr real (probablemente artefacto huerfano o git drift). Step independiente, no bloquea el resto del DAG.fn_backupsteprun_backup_allsale con exit 4 y el DAG no respetacontinue_on.exit_code: [4]. Bug en executor: parsearstep.ContinueOn.ExitCode []inty comparar conresult.ExitCode. Hoy solo se mirastep.ContinueOn.Failure(bool).- Frontend
pnpm buildroto por API drift de Mantine enStepTimeline.tsx(<Collapse in={opened}>) y CSS type import enmain.tsx. Fix junto con un refresh general de tipos.
Documentacion de usuario
Guia completa (formato YAML, anadir DAGs, troubleshooting, endpoints HTTP): apps/dag_engine/README.md.
Capability growth log
Una linea por bump SemVer. Bump-type segun .claude/commands/version.md:
-
major: breaking observable (CLI args, schema BBDD propia, formato wire). -
minor: feature aditiva (nuevo panel, endpoint, opcion). -
patch: bugfix sin cambio observable. -
v0.1.0 (2026-05-18) — baseline.