clase:daw:daw-proyecto:tema01
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| clase:daw:daw-proyecto:tema01 [2026/10/14 13:10] – «Fábrica» pasa a «arnés» / ingeniería de arneses (harness engineering, dicho en el tema 1); el día de trabajo en impersonal, sin Lorenzo; ejemplos con <alumno> claude | clase:daw:daw-proyecto:tema01 [2026/10/14 14:08] (actual) – Tema nuevo «2. IA y agentes»: los temas 2 a 7 pasan a ser 3 a 8, con sus referencias cruzadas renumeradas claude | ||
|---|---|---|---|
| Línea 43: | Línea 43: | ||
| ==== 2. Specification ==== | ==== 2. Specification ==== | ||
| - | Abre Claude Code en el worktree y pide la especificación del issue: | + | Antes de escribir código, un fichero que diga qué se va a hacer. Hay **dos formas**, según el issue: la A, con una especificación, |
| + | |||
| + | === Forma A: SDD === | ||
| + | |||
| + | El #12 es un CRUD (una entidad con su listado, alta, edición y borrado), así que va por especificación. Se abre Claude Code en el worktree y se pide: | ||
| < | < | ||
| Línea 68: | Línea 72: | ||
| **Leer y corregir esos ficheros es el trabajo importante del día.** Arreglar una frase aquí cuesta un minuto; arreglar el código que sale de una frase mal escrita cuesta una tarde. Se añade un criterio que faltaba al de requisitos y se vuelve a lanzar ''/ | **Leer y corregir esos ficheros es el trabajo importante del día.** Arreglar una frase aquí cuesta un minuto; arreglar el código que sale de una frase mal escrita cuesta una tarde. Se añade un criterio que faltaba al de requisitos y se vuelve a lanzar ''/ | ||
| - | El #12 es un CRUD, y por eso va por spec. El #13 de la tarde, | + | === Forma B: Plan === |
| + | |||
| + | Cuando el issue no es un CRUD (por ejemplo, el #13: un filtro por provincia en el listado | ||
| + | |||
| + | < | ||
| + | - [ ] 1. Backend: parámetro provincia en GET / | ||
| + | - [ ] 2. Frontend: desplegable de provincia en el listado, enlazado al parámetro | ||
| + | </ | ||
| + | |||
| + | Al salir del modo plan, el fichero queda guardado en el worktree. Se lee y se corrige igual que la spec: que no falte una tarea y que cada una se pueda hacer y probar sola. Y aquí acaba la fase: el plan **no se implementa en esta conversación**. Si se hiciera, el contexto estaría lleno de todo lo que el agente ha leído para planificar, y eso empeora lo que programa después. | ||
| ==== 3. Implementation ==== | ==== 3. Implementation ==== | ||
| Línea 78: | Línea 91: | ||
| </ | </ | ||
| - | Y una sola orden: | + | Y una sola orden, que depende de la forma: |
| + | |||
| + | === Forma A: SDD === | ||
| < | < | ||
| Línea 84: | Línea 99: | ||
| </ | </ | ||
| - | El agente va tarea a tarea: escribe la migración, las clases del backend en sus capas, el componente de Angular y los datos de prueba, siguiendo las **convenciones del proyecto** que tiene escritas. | + | Implementa las tareas de la spec del worktree. |
| + | |||
| + | === Forma B: Plan === | ||
| + | |||
| + | < | ||
| + | /code impl plan_filtro-provincia.md | ||
| + | </ | ||
| + | |||
| + | Implementa las tareas del plan que se le pasa, en una conversación nueva que solo contiene el plan y el código que toca, no la planificación. | ||
| + | |||
| + | En las dos el agente va tarea a tarea: escribe la migración, las clases del backend en sus capas, el componente de Angular y los datos de prueba, siguiendo las **convenciones del proyecto** que tiene escritas. Después de cada tarea pasa los tests unitarios y de arquitectura y la marca como hecha en el fichero de tareas. Mientras tanto no se escribe código: se revisa lo que va saliendo. | ||
| Como el backend ha cambiado, lo reconstruye: | Como el backend ha cambiado, lo reconstruye: | ||
| Línea 96: | Línea 121: | ||
| ==== 4. Testing ==== | ==== 4. Testing ==== | ||
| - | Los tests también los escribe el agente, | + | Los tests también los escribe el agente. Cuatro tipos, y para los cuatro los mismos tres verbos. Primero crearlos: |
| < | < | ||
| - | /test unit create | + | /test unit create |
| - | /test api create | + | /test arch create < |
| - | /test e2e create | + | /test api create |
| + | /test e2e create | ||
| </ | </ | ||
| - | Salen los tests unitarios | + | * '' |
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Cada test se ejecuta al crearlo y se deja pasando. | ||
| + | |||
| + | Después, lanzarlos | ||
| < | < | ||
| /test unit run | /test unit run | ||
| + | /test arch run | ||
| /test api run | /test api run | ||
| /test e2e run | /test e2e run | ||
| </ | </ | ||
| - | Todo en verde. Después abre '' | + | Todo en verde. Después |
| < | < | ||
| + | /test unit repair | ||
| + | /test arch repair | ||
| + | /test api repair | ||
| /test e2e repair | /test e2e repair | ||
| </ | </ | ||
| - | El agente mira por qué falla: el test está desactualizado por un cambio **intencionado** del código, así que actualiza el test. Si hubiera sido un error del código, habría arreglado el código y no el test. Y si no lo tuviera claro, no tocaría nada y preguntaría. | + | Como lo que ha fallado es un test E2E, se lanza ''/ |
| ==== 5. Review & Finish ==== | ==== 5. Review & Finish ==== | ||
| Línea 183: | Línea 220: | ||
| | '' | | '' | ||
| | ''/ | | ''/ | ||
| - | | ''/ | + | | ''/ |
| | ''/ | | ''/ | ||
| Línea 193: | Línea 230: | ||
| ^ Tema ^ Pieza ^ Lo que hace posible ^ | ^ Tema ^ Pieza ^ Lo que hace posible ^ | ||
| - | | 2 | Repositorio con instrucciones para el agente, tablero de issues y la skill ''/ | + | | 2 | Qué es un agente, Claude Code y OpenCode, skills, MCP, subagentes y bucles | El vocabulario con el que se entiende todo lo demás | |
| - | | 3 | La aplicación en Docker, una copia por worktree, con datos de prueba, y el script '' | + | | 3 | Repositorio con instrucciones para el agente, tablero de issues y la skill ''/ |
| - | | 4 | La skill ''/ | + | | 4 | La aplicación en Docker, una copia por worktree, con datos de prueba, y el script '' |
| - | | 5 | La skill ''/ | + | | 5 | La skill ''/ |
| - | | 6 | CI y despliegue automático, | + | | 6 | La skill ''/ |
| - | | 7 | Resumen y lista de comprobación | Todo junto, para tenerlo a mano en la 2ª evaluación | | + | | 7 | CI y despliegue automático, |
| + | | 8 | Resumen y lista de comprobación | Todo junto, para tenerlo a mano en la 2ª evaluación | | ||
| Las **skills** son las instrucciones que le dicen al agente cómo se hace cada cosa en este proyecto. Las escribe el alumno durante el trimestre, con ayuda del propio agente, y son lo que convierte una lista de pasos en una sola orden. Lo que no necesita inteligencia (arrancar, parar, ver los logs) no es una skill: es un script. | Las **skills** son las instrucciones que le dicen al agente cómo se hace cada cosa en este proyecto. Las escribe el alumno durante el trimestre, con ayuda del propio agente, y son lo que convierte una lista de pasos en una sola orden. Lo que no necesita inteligencia (arrancar, parar, ver los logs) no es una skill: es un script. | ||
| Línea 204: | Línea 242: | ||
| ===== Herramientas ===== | ===== Herramientas ===== | ||
| - | Todo esto tiene que estar instalado y funcionando antes del tema 2: | + | Todo esto tiene que estar instalado y funcionando antes del tema 3: |
| - | * **git** y **gh** (la CLI de GitHub) autenticado: | + | * **git** y **gh** (la CLI de GitHub) autenticado: |
| * **Docker** con Docker Compose: '' | * **Docker** con Docker Compose: '' | ||
| * **JDK 25** y **Maven**: '' | * **JDK 25** y **Maven**: '' | ||
| Línea 222: | Línea 260: | ||
| ==== Ejercicio 2 ==== | ==== Ejercicio 2 ==== | ||
| * Crea en GitHub el repositorio de tu proyecto, vacío, con '' | * Crea en GitHub el repositorio de tu proyecto, vacío, con '' | ||
| - | * Clónalo y pide al agente que genere en '' | + | |
| + | | ||
| * Arranca los dos a mano, '' | * Arranca los dos a mano, '' | ||
| * Haz commit y push. En este tema los commits se hacen a mano: ''/ | * Haz commit y push. En este tema los commits se hacen a mano: ''/ | ||
clase/daw/daw-proyecto/tema01.1791976214.txt.gz · Última modificación: por claude · Actualmente bloqueado por: Lorenzo
