cfdf515228
- .claude/CLAUDE.md - .claude/commands/subagentes.md - .claude/rules/INDEX.md - .mcp.json - bash/functions/cybersecurity/analyze_dns.md - bash/functions/cybersecurity/audit_http_headers.md - bash/functions/cybersecurity/audit_ssh_config.md - bash/functions/cybersecurity/check_firewall.md - bash/functions/cybersecurity/detect_suspicious_users.md - bash/functions/cybersecurity/encrypt_file.md - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.7 KiB
2.7 KiB
Delegacion: spawn fn-constructor en vez de escribir inline
REGLA DURA. Si vas a escribir logica reutilizable inline en un artefacto (app, analysis, playground) o heredoc, STOP y delega a fn-constructor. La misma sesion debe crear + usar la funcion. No acumular huerfanas.
Cuando un patron es candidato a funcion
- Aparece >=2 veces en esta sesion o en heredocs recientes.
- Firma generica (no depende de tipos internos del artefacto).
- 1 responsabilidad clara (CRUD, parse, transform, http call, formato fijo, etc.).
- No es one-liner idiomatico de stdlib (
time.Now().UTC().Format(...)queda fuera).
Flujo obligatorio (mismo turno)
- Detectar. Si vas a escribir >=5 lineas de logica reutilizable inline -> STOP.
- Spawn
fn-constructorinmediato viaAgent(subagent_type="fn-constructor", ...):- Sin preguntar al usuario (autorizado por defecto).
- Si hay >1 funcion independiente -> una sola llamada al Agent tool con N tool_use blocks paralelos en el mismo mensaje. NO serializar.
- Tagear con grupo de capacidad al menos UN tag de grupo (
notebook,metabase,deploy, etc.). Vercapability_groups.md. fn indexpara registrar.- Importar + invocar en el mismo turno — no dejar funcion huerfana recien creada.
- Auto-verificar con
fn doctor uses-functionsyfn doctor unusedsi tocas >=3 funciones nuevas.
Anti-patrones auditables
| Anti-patron | Consecuencia | Sustituir por |
|---|---|---|
| Escribir helper inline en artefacto en vez de delegar | Reinvento por sesion | Spawn fn-constructor |
| Crear N funciones serialmente | Latencia x N | Multiples Agent() en mismo mensaje |
| Crear funcion y no usarla en el turno | Huerfana desde dia 1 (calls_90d=0) |
Importar + invocar antes de cerrar turno |
| Crear funcion sin tag de grupo | Imposible descubrir en bloque proxima sesion | Anadir tag de grupo (capability group) |
| Reescribir en heredoc logica que ya existe | Capitalizacion perdida | mcp__registry__fn_search antes de escribir |
Excepciones
- Logica de dominio especifica del artefacto (CRUD de tabla concreta, layout de UI, flujo unico de la app) -> queda en el artefacto. Solo lo reutilizable se delega.
- Stub temporal con
not implemented: aceptable si la dependencia externa no esta disponible. Documentar en.md(verstubs.md).
Telemetria
Cada code_writes + calls se registra en call_monitor/operations.db (issue 0085). Vista session_capability_growth mide ratio creadas vs usadas por sesion. Hook UserPromptSubmit inyecta CAPABILITY-GROWTH: created_this_session=X used=Y orphan=Z en cada turno.
Si orphan>0 al cerrar la sesion -> revisar: o la funcion era especulativa (no debio crearse) o falta integrarla en el codigo del artefacto.