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 12:51] – Flujo en siete fases con Revisar separada; el /clear al empezar cada fase se da por hecho (dicho una vez en el tema 1) 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 3: | Línea 3: | ||
| Este módulo no enseña a programar en Java ni en Angular: eso ya lo hacéis en otros módulos. Enseña **todo lo que rodea a programar** cuando se trabaja con un agente de IA: el repositorio, | Este módulo no enseña a programar en Java ni en Angular: eso ya lo hacéis en otros módulos. Enseña **todo lo que rodea a programar** cuando se trabaja con un agente de IA: el repositorio, | ||
| - | En la **1ª evaluación** cada alumno monta su **fábrica**: un repositorio preparado para trabajar así. En la **2ª evaluación** | + | En la **1ª evaluación** cada alumno monta su **arnés**: un repositorio preparado para trabajar así. A esto, a poner el esfuerzo en el entorno que rodea al agente (scripts, skills, tests, revisiones, CI) en vez de en programar a mano, se le llama **ingeniería de arneses**; en inglés, //harness engineering// |
| - | Para saber a dónde se llega, lo mejor es ver cómo se trabaja cuando | + | Para saber a dónde se llega, lo mejor es ver cómo se trabaja cuando |
| ===== Un día de trabajo en el proyecto ===== | ===== Un día de trabajo en el proyecto ===== | ||
| - | Lorenzo está haciendo | + | El proyecto es una tienda. Hoy toca el issue **#12, «Alta de clientes»**, |
| - | ==== 1. Empezar el issue ==== | + | ==== 1. Start ==== |
| En la carpeta del repositorio abre Claude Code y escribe: | En la carpeta del repositorio abre Claude Code y escribe: | ||
| Línea 23: | Línea 23: | ||
| < | < | ||
| Issue #12: Alta de clientes | Issue #12: Alta de clientes | ||
| - | Rama lorenzo-12-alta-clientes creada desde develop. | + | Rama < |
| Worktree en ../ | Worktree en ../ | ||
| Para arrancar la aplicación: | Para arrancar la aplicación: | ||
| Línea 41: | Línea 41: | ||
| Base de datos, backend y frontend, en Docker, con datos de prueba, en un puerto que no choca con nada. Si por la tarde empieza el #13, tendrá otra carpeta y otra aplicación en otro puerto, y las dos conviven. Un script y nada más: '' | Base de datos, backend y frontend, en Docker, con datos de prueba, en un puerto que no choca con nada. Si por la tarde empieza el #13, tendrá otra carpeta y otra aplicación en otro puerto, y las dos conviven. Un script y nada más: '' | ||
| - | ==== 2. Especificar | + | ==== 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 66: | Línea 70: | ||
| </ | </ | ||
| - | **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. | + | **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. |
| - | ==== 3. Implementar ==== | + | === Forma B: Plan === |
| - | Conversación nueva (''/ | + | Cuando el issue no es un CRUD (por ejemplo, el #13: un filtro por provincia en el listado de clientes), en vez de usar SDD se crea directamente un **plan**. Se pone el agente en **modo plan**, en el que solo lee y no toca código, y se le dice lo que se quiere y que escriba el plan en '' |
| + | |||
| + | < | ||
| + | - [ ] 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 ==== | ||
| + | |||
| + | Conversación nueva (''/ | ||
| + | |||
| + | < | ||
| + | /git-flow update | ||
| + | </ | ||
| + | |||
| + | Y una sola orden, que depende de la forma: | ||
| + | |||
| + | === Forma A: SDD === | ||
| < | < | ||
| Línea 76: | 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. Después de cada tarea pasa los tests unitarios y de arquitectura y la marca como hecha en el fichero de tareas. | + | 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. | ||
| Como el backend ha cambiado, lo reconstruye: | Como el backend ha cambiado, lo reconstruye: | ||
| Línea 86: | Línea 119: | ||
| El mismo script: reconstruye lo que ha cambiado y lo vuelve a levantar. El frontend ni eso: se recarga solo al guardar. | El mismo script: reconstruye lo que ha cambiado y lo vuelve a levantar. El frontend ni eso: se recarga solo al guardar. | ||
| - | ==== 4. Los tests ==== | + | ==== 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. Revisar | + | ==== 5. Review & Finish |
| Antes de cerrar, el agente revisa su propio trabajo: | Antes de cerrar, el agente revisa su propio trabajo: | ||
| Línea 120: | Línea 165: | ||
| </ | </ | ||
| - | Compara el código con la spec y con las reglas de calidad del proyecto, y los tests con los criterios de aceptación. No toca nada: deja cada hallazgo como una tarea en '' | + | Compara el código con la spec y con las reglas de calidad del proyecto, y los tests con los criterios de aceptación. No toca nada: deja cada hallazgo como una tarea en '' |
| < | < | ||
| Línea 126: | Línea 171: | ||
| </ | </ | ||
| - | ==== 6. Cerrar el issue ==== | + | Luego los commits y el cierre: |
| - | + | ||
| - | Los commits y el cierre: | + | |
| < | < | ||
| Línea 135: | Línea 178: | ||
| </ | </ | ||
| - | '' | + | '' |
| Por la tarde empieza el #13 igual. No le da tiempo a terminarlo: '' | Por la tarde empieza el #13 igual. No le da tiempo a terminarlo: '' | ||
| - | ==== 7. Publicar | + | ==== 6. Publish |
| El viernes, con tres issues cerrados en '' | El viernes, con tres issues cerrados en '' | ||
| Línea 147: | Línea 190: | ||
| </ | </ | ||
| - | '' | + | '' |
| - | ===== Lo que Lorenzo | + | ===== Lo que no se ha hecho ===== |
| - | Esto es lo que vende la fábrica. En todo el día Lorenzo | + | Esto es lo que aporta el arnés. En todo el día **no** |
| * escrito un comando de git: ni '' | * escrito un comando de git: ni '' | ||
| Línea 161: | Línea 204: | ||
| * entrado al servidor. | * entrado al servidor. | ||
| - | Lo que sí ha hecho es lo que solo puede hacer él: **decidir qué se construye** (el issue y la spec), **comprobar que es lo que quería** (los tests y el navegador) y **dar el visto bueno** (leer la revisión y cerrar). Programar con esta arquitectura es eso: pensar y comprobar, y que el resto se ejecute solo. Y hay una regla que lo hace posible: **ningún comando se queda esperando a Lorenzo**. Los que generan trabajo lo dejan en ficheros del repositorio (la spec, las tareas, la revisión); los que hacen algo irreversible solo comprueban que esos ficheros están como tienen que estar. | + | Lo que sí se ha hecho es lo que solo puede hacer una persona: **decidir qué se construye** (el issue y la spec), **comprobar que es lo que quería** (los tests y el navegador) y **dar el visto bueno** (leer la revisión y cerrar). Programar con esta arquitectura es eso: pensar y comprobar, y que el resto se ejecute solo. Y hay una regla que lo hace posible: **ningún comando se queda esperando a nadie**. Los que generan trabajo lo dejan en ficheros del repositorio (la spec, las tareas, la revisión); los que hacen algo irreversible solo comprueban que esos ficheros están como tienen que estar. |
| ===== El ciclo de vida de un cambio ===== | ===== El ciclo de vida de un cambio ===== | ||
| Línea 171: | Línea 214: | ||
| ===== La gramática de los comandos ===== | ===== La gramática de los comandos ===== | ||
| - | Todo lo que ha escrito | + | Todo lo que se ha escrito |
| ^ Familia ^ Subcomandos ^ De qué se ocupa ^ | ^ Familia ^ Subcomandos ^ De qué se ocupa ^ | ||
| Línea 177: | Línea 220: | ||
| | '' | | '' | ||
| | ''/ | | ''/ | ||
| - | | ''/ | + | | ''/ |
| - | | ''/ | + | | ''/ |
| Lo que empieza por ''/'' | Lo que empieza por ''/'' | ||
| Línea 187: | 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 | Las skills | + | | 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 198: | 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 216: | 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.1791975108.txt.gz · Última modificación: por claude
