Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.mdaceptado — formaliza el bucle telemetria + capability groups + discovery acceleration. - Hecho: Indice ADR
docs/adr/README.mdahora lista 0001..0004 (faltaban 0002 y 0003). - Hecho: Grupo de capacidades
cpp-windowscreado como caso piloto del bucle:bash/functions/infra/is_cpp_app_running_windows.sh+.md—is_cpp_app_running_windows_bash_infra.bash/functions/infra/launch_cpp_app_windows.sh+.md—launch_cpp_app_windows_bash_infra.bash/functions/pipelines/redeploy_cpp_app_windows.sh+.md—redeploy_cpp_app_windows_bash_pipelines(build? + deploy + launch + verify).- Pagina madre
docs/capabilities/cpp-windows.mdcon lista, ejemplo canonico y fronteras. - Fila anadida a
docs/capabilities/INDEX.md.
- Hecho: Issue
dev/issues/0087-capability-discovery-acceleration.mdcon 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.mdraiz 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 confunction_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, binariofn_match, validator de IDs enfn_create_function, clausula hooks enregistry_calls.md. - Medir delta
Reg %yviolations_24ha 7d. Si no se mueven, replantear capas 1-2. - Hook
PreToolUseconfn_matchrequiere 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— subcommandfn match "<command>". Tokeniza comando, FTS5 query sobrefunctions_fts, re-score aditivo (name=+3, tags=+2, signature=+1.5, description=+1). Latencia 6-7ms. Devuelvetop[]conscore(normalizado top=1.0) yraw_score(absoluto pre-normalizacion). Bug fix critico:high_confidenceahora se computa sobreraw_score, noscore— antes era SIEMPRE true por la normalizacion.cmd/fn/doctor.go— flag--emit-claude-mden subcomandocapabilities. Emite bloque markdown con secciones TOP 20 (porcalls_total), Fresh 7d, Pipelines top 5. Fallback sicall_monitor.operations.dbausente.functions/infra/emit_capabilities_md.go—EmitCapabilitiesMd+RenderCapabilitiesMd(paqueteinfra).projects/fn_monitoring/apps/call_monitor/sequences.go+migrations/006_function_sequences.sql— subcomandocall_monitor sequences --detect [--propose]. Detecta secuencias A->B(->C) con: same session, gap < 30s, occ >= 5, sess >= 2, success_rate >= 0.9. Genera proposalsnew_pipelinecon 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 leerregistry.dbdirecto 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 enINDEX.md— contrato.mdautosuficiente (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 (anadidoPROMOVER 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). Llamafn matchcontimeout 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.txtTTL 1h. Llamafn doctor capabilities --emit-claude-md, awk-parse 3 secciones, emite JSONhookSpecificOutput.additionalContextcon linea compactaCAPABILITIES (cache 1h): TOP / FRESH / PIPELINES. Latencia cold 33ms, warm 18ms.~/.config/systemd/user/call_monitor_sequences.{service,timer}+ copias versionadas enprojects/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 ejemplartaskkill(raw 4.06). Demasiado estricto. - v4 final:
raw_score >= 4.0. Balance ~93% precision contra patrones deanalysis/domain_coverage_gaps. Prefer silencio en queries cortas; acepta 1 falso positivo conocido (robots.txt user-agent->agent_scaffoldpor token "agent").
Dashboard updates (sub-repo registry_dashboard)
- Migration 007
projects/fn_monitoring/apps/call_monitor/migrations/007_calls_command_snippet.sql— anade columnacommand_snippet TEXTacalls. Aditiva, idempotente. Solo se rellena cuandofunction_id == ''. Redactado de secrets (password=,token=,secret=,api_key=,bearer=) antes de persistir. .claude/scripts/hook_call_monitor.sh—insert_callacepta 4to argsnippet. Solo escribe sifn_idvacio. Llamadores Bash pasanCMD_HEAD(200 chars).- Dashboard Recent Executions: columna
Functionmuestra snippet$ <cmd>en gris cuandofunction_idvacio. Hover tooltip con snippet completo. - Nueva sub-tab
Failed Functions(5a): subset derecent_executionsconfunction_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_NoHighlighten X y Y — sin iluminacion ruidosa al hover.- Hover tooltip sobre punto: When, Function, Tool, Duration, Error (si fail).
- Eje Y dinamico
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 condeploy_cpp_exe_to_windows. - UserPromptSubmit hook: cada turno user injecta
CAPABILITIES (cache 1h): TOP / FRESH / PIPELINES. - Timer:
systemctl --user list-timersmuestra proxima ejecucion. Manual run exit 0. - Pipeline
redeploy_cpp_app_windowsejecutado 3+ veces esta sesion via./fn run. Reemplaza ~6 commands manuales con 1 invocacion.
Pendiente
- 2 bugs cosmeticos no bloqueantes:
cp: Permission deniedbenigno en deploy (rsync salva);PID=RUNNING: PID=N MEM=Kformato raro en mensaje final del pipeline redeploy. - Tanda C de 0087 (refuerzos):
/fn_claudeauto-append aMEMORY.mdal crear funciones, naming validator soft. - Esperar telemetria de 7d para medir delta
Reg %yviolations_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.