Segunda tanda de cobertura sobre el bucle de aprendizaje autónomo (me...
PMC dispatch#153 · persona: free
Tarea
=== REGLAS DE AUTOPILOT (NO NEGOCIABLES) ===
- NUNCA pushear a main/master ni fuerza (use el branch actual o crea uno feature/).
- NUNCA borrar archivos, ramas o tags.
- NUNCA modificar .env, secretos, dependencias mayores sin que el cambio sea trivial.
- Si hay dudas, ESCRIBE una nota markdown en
.claude/pmc-autopilot/log-<ISO-timestamp>.mdcon tu razonamiento y TERMINA. - Si el cambio funciona y es seguro, COMMITEA con mensaje claro empezando por "[autopilot] ".
- NO ejecutar tests destructivos (DB drops, migraciones). Si los tests requieren eso, marca como blocker.
- Al terminar emite UNA línea final exactamente:
SUMMARY: <una frase del estado tras tu trabajo>.
=== CONTEXTO === Proyecto: CMOAgent Path: /Users/thio/CMOAgent Señales: score=40 state=active branch=update/doctrinestrike-context last_commit=1d
=== LECCIONES GLOBALES (REVIEW LOOP DEL AUTOPILOT) === Patrones que el meta-reviewer destiló de sesiones pasadas en TODOS los proyectos. Aplícalos como reglas operativas si encajan con la situación actual.
- Before dispatching ahead_unpushed or any push task, check for git remote existence; if none exists, mark as N/A and skip without spawning a session.
- If CLAUDE.md contains 'local-only' or 'no git remote', permanently suppress push-related task types for that repo — do not re-queue them.
- Do not dispatch the same task type to the same repo if an autopilot log from the last 24h already documents the same no-op outcome.
- If working tree contains only untracked .claude/ artifacts, resolve dirty_long by adding .gitignore entry in one commit — do not spawn a full 30min session.
- Cap implementer sessions at 60min hard; if the task (playbook, dirty_long) is not closeable in that window, split into subtasks before dispatching.
- Do not re-run lifecycle_audit on a repo where a lifecycle-audit file already exists and is less than 7 days old.
- When a PR is stalled on a product decision (not a technical blocker), write the triage note and stop — do not open a new branch without human approval.
=== PERFIL DE ESTE PROYECTO (síntesis de actividad previa) === CMOAgent converge a main vía rama de integración con absorción determinista de divergencias; playbook /api/pulse + kpis contract estable (573 tests). Policy: cierre manual de MR post-merge en rama alternativa, sin auto-push. Blockers históricos (uv.lock mecánico, .env.tpl vault refs) resueltos; sincronización inter-ramas robusta. Norma LiteLLM: tagging obligatorio, cliente único, cero endpoints directos. Modularización converged, superficie API segura, linter + type-checker clean.
=== INTENTOS PREVIOS (MEMORIA DEL AUTOPILOT) === Estos son los resultados de tus runs anteriores sobre este mismo proyecto y kind. LEE ESTO ANTES DE EMPEZAR — no repitas trabajo ya hecho ni intentes acciones que ya se diagnosticaron como bloqueadas. Si ves un blocker estructural repetido, NO vuelvas a intentar la misma vía: deja una nota y termina.
- [3d, completed] MR !40 (merged) desbloqueada — merge con main actual resuelto (573 tests + ruff + mypy en verde),
- [4d, completed] Rama de integración con las dos ramas divergentes absorbidas, tabla de rutas del portal
- [5d, completed] Cerrado el último P2 de seguridad del audit CTO (tokens de conectores vía referencias
=== CÓMO SE RESOLVIÓ ESTO EN OTROS PROYECTOS ===
Sesiones recientes con el mismo kind en otros repos del portfolio. Toma ideas, no copies a ciegas — el contexto de cada proyecto manda.
- [ThioBot, 2d] (timeout — sesión >90min, marcada como completada)
- [LaPareditaAgent, 2d] Cobertura añadida a properties.ts, tools/ttlock.ts (38→98 %) y telegram/prompt.ts, más
=== TAREA: PLAYBOOK "Boost de cobertura de tests" ===
Objetivo: subir la cobertura de tests de CMOAgent priorizando archivos de dominio críticos.
Proceso:
- Lista los archivos bajo src/ (o equivalente) que son lógica de dominio (no UI glue, no config, no tipos).
- De esos, identifica los 3 con menor cobertura (leyendo tests existentes) y mayor criticidad.
- Para cada uno, TDD:
- primero escribe 2-3 tests unitarios que cubran el path normal + 1-2 edge cases obvios
- si el código no es testeable sin cambios, aplica el refactor mínimo (nunca cambies comportamiento)
- ejecuta los tests — deben pasar (GREEN)
- Commit por archivo cubierto: "test(xxx): add coverage for Y invariant".
Si el proyecto no tiene test runner configurado → reporta claramente y sugiere cuál aplicar (vitest/jest/pytest según el stack).
Reglas operativas — MODO AUTÓNOMO REAL:
- Estás corriendo con
--permission-mode bypassPermissions --dangerously-skip-permissions. Eso significa que puedes ejecutar CUALQUIER comando (read, edit, bash, write, WebFetch, …) sin pedir confirmación. Hazlo. - NO pidas permiso para editar archivos, ejecutar scripts, instalar deps, correr tests, ni hacer commits. El usuario ya te autorizó al delegarte esta tarea.
- NO digas cosas como "¿quieres que proceda?", "¿te parece bien si…?", "necesito tu aprobación". Si lo piensas, ejecútalo.
- SOLO interrumpe al usuario si: · necesitas una credencial o secret que no está disponible, · hay que tomar una decisión estratégica de producto (no técnica) con dos caminos equivalentes, · la acción requiere autenticación externa (OAuth, 2FA push, biometría), · detectas riesgo de pérdida de datos irreversible (drop de DB, force push, rm -rf fuera del worktree).
- Commit por bloques pequeños con mensajes conventional commits. NO pushees a main sin confirmación.
- Sigue las convenciones del repo (CLAUDE.md, AGENTS.md si existen).
- Antes de terminar, ejecuta
/recappara generar un resumen estructurado. - Al terminar: la primera línea de output debe ser
SUMMARY: <1 línea>seguida de la lista de commits hechos y el recap de/recap.
Cuando termines, recuerda:
- 1 línea SUMMARY: ... al final
- Si commiteaste, lista los hashes
- Si NO commiteaste, explica por qué en 1-2 líneas
Resumen del agente
Segunda tanda de cobertura sobre el bucle de aprendizaje autónomo (measure 56→100 %, implement 56→97 %, insights_store 38→98 %); 63 tests nuevos, suite en 750 passed con ruff y mypy
Diff
tests/test_email_sender.py | 205 ++++++++++++++++++++
tests/test_insights_store_sql.py | 369 ++++++++++++++++++++++++++++++++++++
tests/test_learning_implement.py | 346 +++++++++++++++++++++++++++++++++
tests/test_learning_measure.py | 289 ++++++++++++++++++++++++++++
tests/test_social_ops_publishers.py | 333 ++++++++++++++++++++++++++++++++
tests/test_weekly_reset.py | 282 +++++++++++++++++++++++++++
6 files changed, 1824 insertions(+)