Anatomía de CLAUDE.md

Search for a command to run...

No comments yet. Be the first to comment.
En Santiago de los Caballeros, Republica Dominicana. Volví de República Dominicana con la batería cargada… y con el corazón un poco más Java. Gracias, JConf Dominicana. Hay conferencias que te dejan s

La Inteligencia Artificial no hace que un equipo sea 10 veces más productivo por arte de magia. Lo que realmente marca la diferencia es el contexto que le das a la IA. Muchos equipos prueban ChatGPT,

Muchos piensan que una IA mejora automáticamente con cada conversación. La realidad es diferente. Si no capturas los errores, los aciertos y los patrones que aparecen durante el desarrollo, la IA volv

Cuando la mayoría de las personas empieza a desarrollar aplicaciones con IA, suele pensar que el camino para obtener mejores resultados es: Usar un modelo más potente. Escribir mejores prompts. Aum

Uno de los errores más comunes al construir soluciones con Inteligencia Artificial es querer crear un asistente que haga absolutamente todo desde el inicio. La realidad es otra: las mejores soluciones

Imagina que CLAUDE.md es el manual de instrucciones definitivo de tu proyecto de programación. Está diseñado específicamente para que una Inteligencia Artificial (o un programador nuevo que se sume al equipo) lo lea y entienda exactamente cómo trabajar en tu proyecto sin cometer errores.
Aquí tienes el resumen de las 7 cosas que debe tener este manual:
¿Qué es? Los "botones" que hay que presionar para que el código funcione y comprobar que no esté roto.
En sencillo: Las instrucciones exactas que se escriben en la terminal para arrancar el proyecto.
¿Qué es? El mapa del tesoro.
En sencillo: Una explicación corta (un par de párrafos) que explica cómo está organizado el proyecto y qué hace cada carpeta principal.
¿Qué es? Los "Mandamientos" del proyecto.
En sencillo: Una lista de 5 a 10 cosas que obligatoriamente se deben hacer siempre que se escriba código nuevo para mantener el orden.
¿Qué es? Las "Líneas Rojas".
En sencillo: Lo opuesto a lo anterior. Una lista de 5 a 10 cosas que están prohibidas porque rompen el sistema o vuelven el código un caos.
¿Qué es? Las reglas de convivencia del equipo.
En sencillo: Cómo se deben registrar los cambios, qué nombres ponerle a las carpetas de trabajo (ramas) y cómo pedir permiso para fusionar tu código con el de los demás.
¿Qué es? El control de calidad.
En sencillo: Qué herramientas se usan para probar que el código funciona y qué porcentaje del proyecto debe estar vigilado por estas pruebas automáticas (por ejemplo, el 80%).
¿Qué es? El muro de los lamentos (y aprendizajes).
En sencillo: Una lista de metidas de pata que ya ocurrieron en el pasado para que la IA (o tú) no las vuelva a repetir.
💡 La regla de oro de la imagen: Ese documento no debe ser una enciclopedia gigante. Debe ser directo al grano, idealmente con una extensión de 500 a 1,000 líneas de texto. Así, cualquier IA lo lee en un segundo y programa exactamente como tú quieres.
CLAUDE.md (Stack: Perú Corporativo)Backend (Spring Boot):
Levantar en desarrollo: ./mvnw spring-boot:run -Dspring-boot.run.profiles=dev
Ejecutar pruebas: ./mvnw clean test
Construir JAR: ./mvnw clean package -DskipTests
Frontend (Angular):
Instalar dependencias: npm install
Levantar en desarrollo: ng serve
Construir producción: ng build --configuration production
El proyecto es un sistema monolítico modular con backend y frontend separados.
/backend: Proyecto Java 25 estructurado bajo Arquitectura Limpia (Clean Architecture). Capas: domain (reglas de negocio), application (casos de uso) e infrastructure (controladores REST, entidades JPA de PostgreSQL).
/frontend: Aplicación Angular estructurada por módulos funcionales (auth, dashboard, shared). Usamos Standalone Components y servicios reactivos con RxJS.
Java 25: Usar siempre Virtual Threads (Executors.newVirtualThreadPerTaskExecutor()) para tareas asíncronas y procesamiento de reportes pesados.
Spring Boot 4: Toda inyección de dependencias debe ser por constructor usando Lombok (@RequiredArgsConstructor). Prohibido usar @Autowired en atributos.
Angular: El manejo de estados locales debe hacerse mediante Signals en lugar de BehaviorSubject tradicionales.
PostgreSQL: Usar UUID como llave primaria en lugar de IDs secuenciales para las tablas de transacciones financieras.
NUNCA uses @CrossOrigin("*") en los controladores de Spring Boot; la configuración de CORS se maneja centralizada en SecurityConfig.java.
NUNCA realices consultas a la base de datos dentro de un bucle for (problema de consulta \(N+1\)). Usa JOIN FETCH en los repositorios de Spring Data JPA.
NUNCA hagas un .subscribe() manual en los componentes de Angular si puedes usar el pipe async o toSignal en el HTML. Evita fugas de memoria.
Ramas: Usar GitFlow simplificado. Ramas principales: main (producción) y develop (desarrollo). Las tareas se crean como feature/TICKET-descripcion (ej. feature/PE-102-login-biometrico).
Commits: Seguir la convención Conventional Commits: feat(backend): agregar endpoint de consulta de RUC o fix(frontend): corregir paginación en tabla de clientes.
PRs: Todo Pull Request requiere la aprobación de al menos 1 Tech Lead antes de mezclarse a develop.
Backend: Mínimo 80% de cobertura de código en la capa de aplicación usando JUnit 5 y Mockito. Las pruebas de integración con PostgreSQL deben usar Testcontainers.
Frontend: Pruebas unitarias para componentes críticos usando Jasmine/Karma. Cobertura mínima del 75%.
Error de Zona Horaria: PostgreSQL está configurado en UTC. Al guardar fechas en Java, usa siempre OffsetDateTime o Instant. No uses LocalDateTime, ya que trunca la zona horaria de Perú (PET / UTC-5).
Bloqueos de Base de Datos: Las transacciones largas en Spring Boot con @Transactional suelen bloquear las tablas de facturación. Mantén los métodos transaccionales lo más cortos posible.
Si dejas este archivo en la raíz de tu repositorio, la IA ya no intentará sugerirte código antiguo de Java 8 o Angular 12. Sabrá de inmediato que estás usando lo último (Java 25, Angular moderno con Signals), que no debe usar @Autowired, y que si va a probar la base de datos, tiene que usar Testcontainers.
Enjoy!
Joe