📋 La Taberna de las Misiones: Issues, Labels y Milestones
“El general sabio planifica la guerra antes de desenfundar su espada. En GitHub, las Issues son tu mapa de batalla.” - Arte de la Gestión
🎯 La Filosofía del Tablero de Misiones
Antes de escribir código, un equipo profesional define qué construir. Las Issues son el sistema de tareas de GitHub:
- Bug reports: “El botón de login no funciona en Safari”
- Feature requests: “Añadir modo oscuro”
- Preguntas: “¿Cómo configurar variables de entorno?”
- Mejoras: “Optimizar consultas SQL en /api/users”
Los Labels clasifican misiones por tipo (bug, enhancement, documentation). Los Milestones agrupan issues hacia un objetivo común (v1.0, Sprint 3).
📜 El Camino del Conocimiento
Parte 1: Crear y Gestionar Issues
Crear una issue desde la interfaz web:
- Ve a tu repositorio en GitHub
- Click en la pestaña “Issues”
- Click “New issue”
- Llena el formulario:
- Título: Descriptivo y breve (
Login redirige a 404) - Descripción: Contexto, pasos para reproducir, comportamiento esperado
- Assignees: ¿Quién trabajará en esto?
- Labels:
bug,high priority - Projects/Milestone: Vincúlala a un objetivo
- Título: Descriptivo y breve (
Anatomía de una issue profesional:
## 🐛 Descripción del Bug
Al hacer clic en "Iniciar Sesión" con credenciales válidas, la app redirige a una página 404 en lugar del dashboard.
## 🔄 Pasos para Reproducir
1. Ir a `https://app.ejemplo.com/login`
2. Ingresar email: `ninja@dojo.com`, password: `secreto123`
3. Hacer clic en "Iniciar Sesión"
4. **Resultado:** Página 404
5. **Esperado:** Dashboard en `/dashboard`
## 🌍 Entorno
- **Navegador:** Chrome 122.0 (también falla en Firefox)
- **SO:** macOS Sonoma 14.2
- **Versión de la app:** v2.1.0
## 📸 Capturas de Pantalla

## 💡 Posible Solución
Revisar la ruta en `src/routes/auth.js`. Puede ser un typo en el redirect.
## ✅ Checklist
- [ ] Bug reproducido en dev
- [ ] Fix implementado
- [ ] Tests unitarios añadidos
- [ ] Probado en Chrome/Firefox/Safari
Elementos clave de una buena issue:
- Título accionable: “Arreglar redirección de login” (no “Login no anda”)
- Contexto suficiente: Alguien que NO conoce el proyecto debe entenderlo
- Pasos reproducibles: Si es bug, ¿cómo lo provoco?
- Criterios de aceptación: ¿Cuándo la issue está “completa”?
- Referencias: Links a PRs relacionados, documentación, diseños
Crear issues desde CLI (GitHub CLI):
# Instalar GitHub CLI (si no lo tienes)
brew install gh # macOS
# O descarga desde: https://cli.github.com
# Autenticarte
gh auth login
# Crear issue interactivamente
gh issue create
# Crear issue con todos los datos de una vez
gh issue create \
--title "Añadir modo oscuro" \
--body "Los usuarios piden un tema dark. Prioridad alta." \
--label "enhancement,high priority" \
--assignee @me
# Listar issues abiertas
gh issue list
# Ver detalle de una issue
gh issue view 42
# Cerrar issue
gh issue close 42
Parte 2: Labels - El Sistema de Clasificación
Los labels son etiquetas de color que clasifican issues por tipo, prioridad, área del proyecto.
Labels por defecto de GitHub:
| Label | Color | Uso |
|---|---|---|
bug | 🔴 Rojo | Errores de código |
enhancement | 🟢 Verde | Nuevas funcionalidades |
documentation | 🔵 Azul | Mejorar docs |
good first issue | 🟣 Morado | Para contribuidores nuevos |
help wanted | 🟡 Amarillo | Se busca colaboración |
wontfix | ⚫ Gris | No se implementará |
duplicate | ⚪ Blanco | Ya existe otra issue |
Crear labels personalizados:
Desde la interfaz:
- Ir a Issues > Labels
- Click “New label”
- Nombre:
backend, Color:#0e8a16, Descripción:Server-side code
Desde CLI:
# Crear label
gh label create "backend" --color 0e8a16 --description "Server-side code"
# Listar labels
gh label list
# Añadir label a una issue
gh issue edit 42 --add-label "backend,bug"
Sistema de labels profesional (ejemplo):
Por tipo:
bug🔴 - Algo no funcionafeature🟢 - Nueva funcionalidadrefactor🔵 - Mejorar código sin cambiar funcionalidaddocs📘 - Documentacióntests🧪 - Testing
Por prioridad:
p0-critical🚨 - Bloquea producciónp1-high⚠️ - Importante, siguiente sprintp2-medium📌 - Deseablep3-low💤 - Backlog
Por área:
frontend🎨 - UI/UXbackend⚙️ - API/Base de datosdevops🐳 - CI/CD, Docker, deployssecurity🔒 - Vulnerabilidades
Estados:
in-progress🏗️ - Alguien trabajandoblocked🚧 - Esperando dependenciaready-for-review👀 - PR abierto, pendiente aprobación
Combinación de labels en acción:
Issue #47: "Endpoint /api/users devuelve 500"
Labels: bug, backend, p0-critical, in-progress
Assignee: @abraham
Milestone: Sprint 5
Parte 3: Milestones - Hitos del Proyecto
Un Milestone agrupa issues relacionadas hacia un objetivo común.
Ejemplos de milestones:
- v1.0 Launch - Issues que DEBEN estar en el primer release
- Sprint 3 - Trabajo de esta iteración de 2 semanas
- Q1 2026 - Objetivos del trimestre
- Performance Improvements - Tema específico
Crear milestone:
Desde GitHub:
- Issues > Milestones > New milestone
- Title:
v1.0 - MVP Launch - Due date:
2026-05-01 - Description:
Primer release público. Debe incluir: - Autenticación completa - CRUD de tareas - Dashboard básico
Desde CLI:
# Crear milestone
gh api repos/:owner/:repo/milestones \
-f title='v1.0 Launch' \
-f description='Primer release público' \
-f due_on='2026-05-01T00:00:00Z'
# Listar milestones
gh api repos/:owner/:repo/milestones
Vincular issue a milestone:
# Desde la UI: Al crear/editar issue, selecciona Milestone en sidebar
# Desde CLI:
gh issue edit 42 --milestone "v1.0 Launch"
Dashboard de progreso:
GitHub muestra automáticamente:
- X issues cerradas / Y totales
- Barra de progreso visual
- Tiempo restante hasta due date
Ejemplo:
v1.0 Launch
15 / 23 issues cerradas (65%)
📅 Due on May 1, 2026 (23 days left)
Parte 4: Workflows Avanzados
Issue Templates:
Crea plantillas predefinidas para bugs, features, etc.
# Estructura de carpeta
.github/
└── ISSUE_TEMPLATE/
├── bug_report.md
└── feature_request.md
Archivo .github/ISSUE_TEMPLATE/bug_report.md:
---
name: 🐛 Bug Report
about: Reportar un error o comportamiento inesperado
title: '[BUG] '
labels: bug
assignees: ''
---
## Descripción del Bug
Una descripción clara del problema.
## Pasos para Reproducir
1. Ir a '...'
2. Hacer clic en '...'
3. Scroll hasta '...'
4. Ver error
## Comportamiento Esperado
Lo que debería pasar.
## Capturas de Pantalla
Si aplica, añade capturas.
## Entorno
- Navegador: [ej. Chrome 122]
- SO: [ej. macOS 14.2]
- Versión: [ej. v2.1.0]
Ahora cuando creen issues, verán botones para elegir plantilla.
Referenciar issues en commits:
# Mencionar issue en commit (crea link automático)
git commit -m "fix: corregir login redirect (#42)"
# Cerrar issue automáticamente al fusionar
git commit -m "fix: resolver bug de login
Closes #42"
# Cuando este commit llegue a main, issue #42 se cierra sola
Palabras clave que cierran issues:
Closes #42Fixes #42Resolves #42
Issue references cruzadas:
# En issue #50:
Este bug es similar a #42, pero afecta a Firefox.
Depende de #48 (añadir tests).
GitHub crea links automáticos y muestra referencias en el timeline.
💡 Jutsu Secreto: Automatización con GitHub Actions
Ejemplo: Auto-etiquetar issues según palabras clave
# .github/workflows/label-issues.yml
name: Auto Label Issues
on:
issues:
types: [opened]
jobs:
label:
runs-on: ubuntu-latest
steps:
- name: Label bug
if: contains(github.event.issue.title, 'bug') || contains(github.event.issue.body, 'error')
run: gh issue edit ${{ github.event.issue.number }} --add-label "bug"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Label feature
if: contains(github.event.issue.body, 'feature request')
run: gh issue edit ${{ github.event.issue.number }} --add-label "enhancement"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Otras automatizaciones útiles:
- Cerrar issues inactivas después de 30 días
- Asignar automáticamente según área del código
- Notificar en Slack cuando se crea issue con label
p0-critical
🎯 Reto Ninja del Tema
Misión: Planificar un proyecto completo con Issues
- Crea un repositorio llamado
task-master-ninja - Crea 3 milestones:
v0.1 - Setup(Due: en 1 semana)v0.2 - Core Features(Due: en 2 semanas)v1.0 - Launch(Due: en 1 mes)
- Crea 10 issues distribuidas en los milestones:
- 3
bug(issues #1, #2, #3) - 4
enhancement(#4, #5, #6, #7) - 2
documentation(#8, #9) - 1
good first issue(#10)
- 3
- Crea labels personalizados:
frontend(color:#ff6b6b)backend(color:#4ecdc4)high priority(color:#ff0000)
- Asigna labels apropiados a cada issue
- Cierra 3 issues con commits que usen
Closes #X
Criterios de éxito:
- ✅ Tienes al menos 3 milestones creados
- ✅ Cada milestone tiene issues asignadas
- ✅ Usas al menos 5 labels diferentes
- ✅ Al menos 1 issue se cerró automáticamente con commit
📚 Recursos Adicionales
Siguiente Pergamino: 3.5 El Juicio del Maestro - Pull Requests y Code Review
¿Organizaste tu proyecto? Comparte un screenshot de tus milestones en Discord con #TabernaNinja! 📋🥷