--- name: pr description: Abrir un pull request desde un agente con secciones estructuradas para quien revisa y para el cliente (resumen técnico, plan de pruebas y resumen en español). Úsala cuando la persona pide crear un PR o preparar su descripción. --- # Pull request Guía para que un agente abra un pull request cuya descripción sirve a quien revisa el código y también al cliente. ## When to use - La persona pide crear un PR o escribir su descripción. - La rama actual tiene commits que no están en la rama base. - No usar para revisar un PR ajeno, mergear ni cerrar PRs. ## Precondiciones - La persona pidió abrir el PR. Publicar es un efecto externo: no lo hagas por iniciativa propia. - `gh auth status` responde autenticado. - No hay un PR abierto para la rama. Si `gh pr view --json url` devuelve uno, actualízalo con `gh pr edit` en vez de crear otro. ## Procedure 1. **Reunir contexto** - Rama actual: `git branch --show-current`. - Rama base: la que resulta de la sección [Rama base](#rama-base). Resuélvela antes de mirar commits o diff, porque ambos se calculan contra ella. - Commits que difieren: `git log ..HEAD --oneline`. - Cambios completos: `git diff ...HEAD`. - Incorpora el contexto extra que entregue la persona. 2. **Preguntar si hay dudas.** Si el objetivo del cambio no se deduce del diff, pregunta antes de escribir la descripción. 3. **Empujar la rama**: `git push -u origin `. Sin force push salvo instrucción explícita. 4. **Crear el PR** con `gh pr create --base --title "" --body-file `. Escribe el cuerpo en un archivo temporal: evita que las comillas y los backticks se rompan al pasar por el shell. Estructura del cuerpo: ````markdown **Target:** `` ## Summary of Changes - ## Test Plan - [ ] ## Resumen para el cliente ``` - ``` ```` 5. **Devolver la URL del PR.** ## Rama base La rama base sale de dos datos: en qué rama estás y si el repositorio tiene una rama de integración. La rama de integración es `stg` (o `staging`) cuando existe en el remoto, y se comprueba ahí con `git ls-remote --exit-code --heads origin stg`, porque una copia local puede ser de una rama que ya se borró. La rama por defecto del repositorio se obtiene con `gh repo view --json defaultBranchRef -q .defaultBranchRef.name`; suele ser `main`, pero no lo asumas. Si estás en una rama de trabajo, el PR apunta a la rama de integración cuando existe y a la rama por defecto cuando no. En un repositorio con `stg` el trabajo se integra y se prueba ahí antes de llegar a producción, así que un PR de una rama de trabajo directo a `main` se salta ese paso, aunque `main` sea la rama por defecto en GitHub. Si estás en la rama de integración, el pedido puede significar dos cosas distintas y el contexto casi siempre dice cuál. Cuando la persona habla de un cambio concreto y `stg` tiene commits locales que no están en `origin/stg`, o cambios sin commitear, quiere un PR de ese trabajo hacia `stg`: crea una rama desde donde estás con `git switch -c `, que se lleva esos commits, y abre el PR de esa rama a `stg`. Cuando la persona habla de publicar, liberar, promover o "pasar a producción", y `stg` está igual que `origin/stg` y por delante de la rama por defecto, quiere promover lo ya integrado: abre el PR de `stg` a la rama por defecto, sin crear rama, y resume en la descripción todo lo que entra a producción (`git log origin/..origin/stg`). Si las señales no alcanzan o se contradicen (por ejemplo, pide "el PR" a secas y `stg` tiene commits sin subir y además va por delante de `main`), pregunta cuál de las dos quiere antes de empujar nada. Elegir por tu cuenta en ese caso puede publicar a producción trabajo que solo debía revisarse, o esconder un release dentro de una rama de trabajo. Si estás en la rama por defecto, trátalo como trabajo nuevo: crea una rama desde ahí y aplica la regla de las ramas de trabajo. Si la persona nombra la base ("ábrelo contra `main`", "esto es un hotfix a producción"), usa esa; lo anterior es el valor por defecto, no una restricción. Sin esa indicación, no tomes la base de la documentación del repositorio ni de PRs anteriores cuando contradigan esta regla: dilo y pregunta. ## Secciones - **Summary of Changes** (inglés): factual, sin opiniones. Resume el cambio, no repitas la lista de commits. Breve y escaneable. - **Test Plan**: pasos concretos que cubren los flujos afectados. Marca una casilla solo si de verdad ejecutaste ese paso; el resto queda sin marcar para quien revisa. - **Resumen para el cliente** (español): dentro de un bloque de código para copiar y pegar. Solo cambios visibles para la persona usuaria, en lenguaje simple, sin detalle técnico. ## Pitfalls - **Datos sensibles.** El cuerpo de un PR es público en repositorios abiertos: sin credenciales, rutas locales, nombres de clientes ni datos reales. - **Base equivocada.** Resuelve la base con la sección Rama base antes de crear el PR; corregirla después mueve la revisión de sitio. El error típico es usar la rama por defecto de GitHub en un repositorio que tiene `stg`. - **Promoción confundida con trabajo.** Estar parado en `stg` no dice por sí solo qué PR se quiere. Si te descubres eligiendo entre "rama nueva hacia `stg`" y "`stg` hacia `main`" sin una señal de la persona o del estado de las ramas, esa duda es la señal para preguntar. - **Descripción inflada.** Un PR chico lleva secciones cortas. No inventes riesgos, migraciones ni pruebas que no existen. - **Trabajo pendiente.** Si dejaste algo fuera del alcance o un test falla, dilo en el cuerpo del PR, no solo en el chat. ## Verification - `gh pr view --json url,title,body,baseRefName,headRefName` muestra el PR con las tres secciones, y `baseRefName` es la rama que resultó de la sección Rama base (o la que nombró la persona).