/si:remember Guardar Conocimiento en Memoria del Agente
Workflow completo de 5 entradas — sesión del equipo CULTIVA IA · 12 jun 2026
📁 ~/projects/cultiva-automatizacion-saas
MEMORY.md estaba en 142/200 líneas al inicio de la sesión. Tras añadir 5 entradas alcanza 147/200. Considera ejecutar /si:review para consolidar entradas antiguas.
Entradas procesadas 5
1
Debugging
Webhook Stripe — timestamp silencioso
Parsear conocimiento
"El webhook de Stripe falla silenciosamente si el header X-Signature-Timestamp tiene más de 5 minutos."
Hecho: Validar timestamp del header antes de procesar el evento
Por qué importa: Fallo silencioso = difícil de debuggear
Scope: Específico del proyecto
Por qué importa: Fallo silencioso = difícil de debuggear
Scope: Específico del proyecto
Verificar duplicados
$ grep -ni "stripe\|webhook\|signature" MEMORY.md (sin resultados)
✓ Sin duplicados — entrada nueva
Escribir en MEMORY.md
--- MEMORY.md (extracto final) ... + - Stripe webhook: validar que X-Signature-Timestamp sea < 5 min antes de procesar; falla silenciosamente si caduca
Sugerencia de promoción
Insight de debugging específico — no es una regla imperativa. Sin sugerencia de promoción.
Confirmación
✅ Guardado en auto-memoria
"Stripe webhook: validar que X-Signature-Timestamp sea < 5 min antes de procesar; falla silenciosamente si caduca"
MEMORY.md: 143/200 líneas · Claude lo verá en cada sesión de este proyecto.
2
Convención
Formato de respuesta API
Parsear conocimiento
"Todos los endpoints de la API usan respuestas envueltas {data, meta, error} — NO devolver objetos planos."
Hecho: Estructura
Tono: Imperativo ("NO devolver") → candidato a CLAUDE.md
{data, meta, error} obligatoria en todas las respuestasTono: Imperativo ("NO devolver") → candidato a CLAUDE.md
Verificar duplicados
$ grep -ni "api\|response\|respuesta\|wrapper" MEMORY.md (sin resultados relevantes — hay menciones a la URL de API pero no al formato)
✓ Sin duplicados
Escribir en MEMORY.md
+ - API responses: siempre envolver en {data, meta, error} — nunca devolver objetos planos
Sugerencia de promoción
💡 Esta entrada parece una regla imperativa ("nunca devolver objetos planos").
Las reglas tienen prioridad mayor en CLAUDE.md. ¿Quieres ejecutar /si:promote para moverla allí?
Confirmación
✅ Guardado en auto-memoria
"API responses: siempre envolver en {data, meta, error} — nunca devolver objetos planos"
MEMORY.md: 144/200 líneas
3
Preferencia
Tamaño máximo de PRs
Parsear conocimiento
"El cliente prefiere commits pequeños y atómicos; rechaza PRs con más de 200 líneas cambiadas."
Hecho: Límite de 200 líneas por PR — preferencia del cliente
Scope: Específico del proyecto / cliente
Scope: Específico del proyecto / cliente
Verificar duplicados
$ grep -ni "pr\|commit\|lines\|líneas" MEMORY.md (sin resultados)
✓ Sin duplicados
Escribir en MEMORY.md
+ - Cliente exige PRs atómicos de <200 líneas; rechaza PRs grandes aunque estén bien estructurados
Sugerencia de promoción
💡 Restricción del cliente que aplica a todos los desarrollos futuros.
Considera /si:promote para que Claude aplique este límite automáticamente al generar código o sugerir PRs.
Confirmación
✅ Guardado en auto-memoria
"Cliente exige PRs atómicos de <200 líneas; rechaza PRs grandes aunque estén bien estructurados"
MEMORY.md: 145/200 líneas
4
Gotcha herramienta
Jest --runInBand race conditions
Parsear conocimiento
"Los tests de integración necesitan `--runInBand` o dan race conditions en la DB de test."
Hecho: Comando concreto:
Por qué: Race conditions con la DB de test en ejecución paralela
jest --runInBand obligatorio para tests de integraciónPor qué: Race conditions con la DB de test en ejecución paralela
Verificar duplicados
$ grep -ni "jest\|test\|runInBand" MEMORY.md (sin resultados)
✓ Sin duplicados
Escribir en MEMORY.md
+ - Tests de integración: usar `jest --runInBand` obligatoriamente; sin él hay race conditions en la DB de test
Sugerencia de promoción
Gotcha técnico con valor concreto. Apto para MEMORY.md; promoción opcional si el equipo recuerda este patrón con frecuencia.
Confirmación
✅ Guardado en auto-memoria
"Tests de integración: usar `jest --runInBand` obligatoriamente; sin él hay race conditions en la DB de test"
MEMORY.md: 146/200 líneas
5
Arquitectura
Resend vs SendGrid — decisión tomada
Parsear conocimiento
"Elegimos Resend sobre SendGrid para transaccional: mejor DX, 3000 emails/mes gratis, SDK tipo-seguro."
Hecho: Email transaccional = Resend (no SendGrid, no Mailgun, no SMTP propio)
Motivos: DX, tier gratuito, type-safety
Motivos: DX, tier gratuito, type-safety
Verificar duplicados
$ grep -ni "resend\|sendgrid\|email\|smtp" MEMORY.md (sin resultados)
✓ Sin duplicados
Escribir en MEMORY.md
+ - Email transaccional: Resend (no SendGrid); DX superior, 3k emails/mes gratis, SDK type-safe
Sugerencia de promoción
💡 Decisión de arquitectura definitiva — debería estar en CLAUDE.md para evitar que Claude sugiera SendGrid en futuras conversaciones.
Ejecuta /si:promote para elevarla a regla permanente.
Confirmación
✅ Guardado en auto-memoria
"Email transaccional: Resend (no SendGrid); DX superior, 3k emails/mes gratis, SDK type-safe"
MEMORY.md: 147/200 líneas
📄
MEMORY.md — diff de la sesión
+5 −0
... líneas 139–142 (contexto existente)
- API base: https://api.cultiva-saas.com/v2
- Auth: Bearer token en header, renovar cada 24h con /auth/refresh
- Base de datos: PostgreSQL 15 en Supabase, schema `public`
... nuevas entradas añadidas al final
+- Stripe webhook: validar que X-Signature-Timestamp sea < 5 min antes de procesar; falla silenciosamente si caduca
+- API responses: siempre envolver en {data, meta, error} — nunca devolver objetos planos
+- Cliente exige PRs atómicos de <200 líneas; rechaza PRs grandes aunque estén bien estructurados
+- Tests de integración: usar `jest --runInBand` obligatoriamente; sin él hay race conditions en la DB de test
+- Email transaccional: Resend (no SendGrid); DX superior, 3k emails/mes gratis, SDK type-safe
5
Entradas guardadas
0
Duplicados detectados
3
Candidatas a CLAUDE.md
147
Líneas MEMORY.md