Files
fn_registry/docs/diary/2026-05-14.md
T
egutierrez ca1bf5a59b feat(infra): auto-commit con 29 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 02:06:44 +02:00

9.6 KiB

2026-05-14

01:35 — Telemetria de Claude como motor de capacidades + grupo cpp-windows

El registry pasa a optimizarse sobre las propias ejecuciones del agente. Cada Bash, MCP call y heredoc queda capturado en call_monitor.operations.db (issue 0085) y alimenta el bucle: detectar patron inline -> proponer funcion -> agrupar en capability -> servir descubrimiento gratis al siguiente turno.

  • Hecho: ADR 0004 0004-telemetry-driven-capability-growth.md aceptado — formaliza el bucle telemetria + capability groups + discovery acceleration.
  • Hecho: Indice ADR docs/adr/README.md ahora lista 0001..0004 (faltaban 0002 y 0003).
  • Hecho: Grupo de capacidades cpp-windows creado como caso piloto del bucle:
    • bash/functions/infra/is_cpp_app_running_windows.sh + .mdis_cpp_app_running_windows_bash_infra.
    • bash/functions/infra/launch_cpp_app_windows.sh + .mdlaunch_cpp_app_windows_bash_infra.
    • bash/functions/pipelines/redeploy_cpp_app_windows.sh + .mdredeploy_cpp_app_windows_bash_pipelines (build? + deploy + launch + verify).
    • Pagina madre docs/capabilities/cpp-windows.md con lista, ejemplo canonico y fronteras.
    • Fila anadida a docs/capabilities/INDEX.md.
  • Hecho: Issue dev/issues/0087-capability-discovery-acceleration.md con modelo de 5 capas + plan en 3 tandas (A paralelo, B dependiente, C refuerzos).
  • Hecho: Slash command /fn_claude (.claude/commands/fn_claude.md) describe AUDIT -> GAP -> PROPOSE -> CONSTRUCT -> VALIDATE -> SELF-TEST como flujo autonomo. Limite duro max 5 funciones por invocacion, sin auto-merge.
  • Hecho: .claude/CLAUDE.md raiz lleva ahora seccion "Delegacion + Capability Groups" como REGLA DURA (issue 0086).

Por que ahora

Sesion 2026-05-13/14: Claude reinvento taskkill + cp Desktop + cmd /c start cinco veces pese a tener deploy_cpp_exe_to_windows_bash_infra. Evidencia directa de que sin telemetria + descubrimiento barato las reglas son aspiracion. La respuesta no es regla mas estricta, es infraestructura para que la regla se cumpla.

Las 3 metricas norte (Monitor tab del registry_dashboard)

  • Reg % — fraccion de calls con function_id != ''. Sube cuando se usa registry.
  • MCP ratio — adopcion de patrones canonicos.
  • violations_24h — antipatrones detectados. Baja cuando el bucle cierra.

Pendiente

  • Implementar Tanda A de 0087 en paralelo: fn doctor capabilities --emit-claude-md, binario fn_match, validator de IDs en fn_create_function, clausula hooks en registry_calls.md.
  • Medir delta Reg % y violations_24h a 7d. Si no se mueven, replantear capas 1-2.
  • Hook PreToolUse con fn_match requiere benchmark <50ms antes de habilitar global.

Referencias: ADR 0004, issue 0085, issue 0086, issue 0087, docs/capabilities/cpp-windows.md.

02:00 — Tandas A+B de issue 0087 cerradas + fn_match tuning + Failed Functions sub-tab

Tanda A (paralelo, 3 fn-constructor + edits directos)

  • cmd/fn/match.go — subcommand fn match "<command>". Tokeniza comando, FTS5 query sobre functions_fts, re-score aditivo (name=+3, tags=+2, signature=+1.5, description=+1). Latencia 6-7ms. Devuelve top[] con score (normalizado top=1.0) y raw_score (absoluto pre-normalizacion). Bug fix critico: high_confidence ahora se computa sobre raw_score, no score — antes era SIEMPRE true por la normalizacion.
  • cmd/fn/doctor.go — flag --emit-claude-md en subcomando capabilities. Emite bloque markdown con secciones TOP 20 (por calls_total), Fresh 7d, Pipelines top 5. Fallback si call_monitor.operations.db ausente.
  • functions/infra/emit_capabilities_md.goEmitCapabilitiesMd + RenderCapabilitiesMd (paquete infra).
  • projects/fn_monitoring/apps/call_monitor/sequences.go + migrations/006_function_sequences.sql — subcomando call_monitor sequences --detect [--propose]. Detecta secuencias A->B(->C) con: same session, gap < 30s, occ >= 5, sess >= 2, success_rate >= 0.9. Genera proposals new_pipeline con evidencia. 41 secuencias capturadas en primer run; 0 candidatas (umbrales no alcanzados todavia).
  • .claude/rules/registry_calls.md — clausula nueva: hooks e infraestructura de telemetria pueden leer registry.db directo con conexion read-only. NO sujeto a regla MCP-first porque no es accion del agente.
  • .claude/rules/function_growth_and_self_docs.md (nuevo) + fila en INDEX.md — contrato .md autosuficiente (Ejemplo + Cuando usarla + Gotchas + Growth log) + crecimiento del registry por promocion de composiciones (no por inflar funciones individuales). Issue 0087.
  • .claude/CLAUDE.md — Norte ampliado a 4 objetivos (anadido PROMOVER COMPOSICIONES A PIPELINES). Linea sobre auto-discovery zero-second-lookup.

Tanda B (3 general-purpose en paralelo)

  • .claude/scripts/hook_fn_match.sh (PreToolUse, Bash matcher) — denylist temprana (cmds < 20 chars, ls/cd/pwd/cat/echo/grep, ./fn run, pure-cd). Llama fn match con timeout 0.2. Trigger: high_confidence==true OR raw_score >= ~5. Imprime <system-reminder>FUZZY-MATCH: USE ./fn run <id> a stderr. Latencia path trigger ~113ms, denylist ~32ms.
  • .claude/scripts/hook_capabilities_inject.sh (UserPromptSubmit) — cache ~/.cache/fn_registry/capabilities.txt TTL 1h. Llama fn doctor capabilities --emit-claude-md, awk-parse 3 secciones, emite JSON hookSpecificOutput.additionalContext con linea compacta CAPABILITIES (cache 1h): TOP / FRESH / PIPELINES. Latencia cold 33ms, warm 18ms.
  • ~/.config/systemd/user/call_monitor_sequences.{service,timer} + copias versionadas en projects/fn_monitoring/apps/call_monitor/systemd/. Timer OnCalendar *-*-* 00/6:00:00 (cada 6h). Persistent=true. Service activo y verificado (exit 0).

Tuning de fn_match

Tres iteraciones del threshold de high_confidence:

  • v1: top1.score / top2.score > 1.5 (normalizado). Resultado: SIEMPRE true. Inutil.
  • v2: raw_score >= 3.0. Mejor pero deja falsos positivos en queries debiles (raw 3.2-3.65).
  • v3: raw_score >= 5.0. Mata caso ejemplar taskkill (raw 4.06). Demasiado estricto.
  • v4 final: raw_score >= 4.0. Balance ~93% precision contra patrones de analysis/domain_coverage_gaps. Prefer silencio en queries cortas; acepta 1 falso positivo conocido (robots.txt user-agent -> agent_scaffold por token "agent").

Dashboard updates (sub-repo registry_dashboard)

  • Migration 007 projects/fn_monitoring/apps/call_monitor/migrations/007_calls_command_snippet.sql — anade columna command_snippet TEXT a calls. Aditiva, idempotente. Solo se rellena cuando function_id == ''. Redactado de secrets (password=, token=, secret=, api_key=, bearer=) antes de persistir.
  • .claude/scripts/hook_call_monitor.shinsert_call acepta 4to arg snippet. Solo escribe si fn_id vacio. Llamadores Bash pasan CMD_HEAD (200 chars).
  • Dashboard Recent Executions: columna Function muestra snippet $ <cmd> en gris cuando function_id vacio. Hover tooltip con snippet completo.
  • Nueva sub-tab Failed Functions (5a): subset de recent_executions con function_id != '' AND !success. Columnas When/Function/Tool/Error class/Error snippet. Util para diagnostico cuando objetivo 1+2 caen.
  • ImPlot scatter:
    • Eje Y dinamico 0..max(visible) + 500ms (rescale evita pillarse en picos viejos fuera de ventana).
    • Combo Scatter: en toolbar (1m/5m/15m/1h/6h), independiente del filtro de KPIs.
    • ImPlot::GetStyle().UseLocalTime = true — el eje X ahora muestra hora local, no UTC.
    • ImPlotAxisFlags_NoHighlight en X y Y — sin iluminacion ruidosa al hover.
    • Hover tooltip sobre punto: When, Function, Tool, Duration, Error (si fail).

Bug fix critico: launch_cpp_app_windows

cmd.exe /c "cd /d \"$dir\" && start \"$app\" \"$app.exe\"" rompia en cmd.exe — el \" final tras path termiando en \ se interpretaba como escape de comilla, dejando string sin cerrar -> error "Windows cannot find \". Fix: reescribir a PowerShell Start-Process -FilePath ... -WorkingDirectory ... que usa quoting simple literal.

Discovery quality (tests vs fn_monitoring/analysis/domain_coverage_gaps)

Patrones del analysis testeados contra fn match:

  • Hits correctos high=true: sharpe ratio, monte carlo, cdp browse, websocket stream, stable diffusion, taskkill exe.
  • Falsos negativos coherentes high=false: binance kline, kelly criterion, VaR conditional, OLS regression, vectorized backtest, robots.txt -> coincide con gaps reales del analysis.
  • Falso positivo persistente: 1 de 14 (robots.txt -> agent_scaffold).
  • Cobertura validada: finance/browser/infra/ml estan cubiertos. Trading/quant/scraping confirmados como gaps reales del analysis.

Validacion end-to-end

  • PreToolUse hook test: echo '{...taskkill...}' | bash .claude/scripts/hook_fn_match.sh -> FUZZY-MATCH con deploy_cpp_exe_to_windows.
  • UserPromptSubmit hook: cada turno user injecta CAPABILITIES (cache 1h): TOP / FRESH / PIPELINES.
  • Timer: systemctl --user list-timers muestra proxima ejecucion. Manual run exit 0.
  • Pipeline redeploy_cpp_app_windows ejecutado 3+ veces esta sesion via ./fn run. Reemplaza ~6 commands manuales con 1 invocacion.

Pendiente

  • 2 bugs cosmeticos no bloqueantes: cp: Permission denied benigno en deploy (rsync salva); PID=RUNNING: PID=N MEM=K formato raro en mensaje final del pipeline redeploy.
  • Tanda C de 0087 (refuerzos): /fn_claude auto-append a MEMORY.md al crear funciones, naming validator soft.
  • Esperar telemetria de 7d para medir delta Reg % y violations_24h. Si no se mueven, replantear capa 3 (interceptor PreToolUse mas agresivo).

Referencias: ADR 0004, issues 0085/0086/0087, .claude/rules/function_growth_and_self_docs.md, .claude/scripts/hook_{fn_match,capabilities_inject}.sh, cmd/fn/match.go.