# π MΓ³dulo G5 β Requirements.md β Editor EARS
## MisiΓ³n
Crear `requirements.md` en formato EARS de forma interactiva.
Los requisitos se infieren del contexto Rohirrim + objetivo G3.
El usuario revisa, modifica y aprueba uno a uno.
---
## Paso 0 β El formato EARS
Mostrar brevemente antes de empezar:
```
β‘ "Los pergaminos deben ser precisos.
Gandalf usa el formato EARS para que cada requisito
sea inambiguo, verificable y trazable."
EARS β Easy Approach to Requirements Syntax:
UBIQUITOUS: THE SYSTEM SHALL [acciΓ³n]
EVENT-DRIVEN: WHEN [disparador] THE SYSTEM SHALL [acciΓ³n]
UNWANTED: IF [condiciΓ³n no deseada] THEN THE SYSTEM SHALL [acciΓ³n]
OPTION: WHERE [feature opcional] THE SYSTEM SHALL [acciΓ³n]
COMPLEX: WHILE [estado] WHEN [disparador] THE SYSTEM SHALL [acciΓ³n]
```
---
## Paso 1 β Inferir requisitos automΓ‘ticamente
A partir del `contexto_rohirrim` + objetivo G3, inferir automΓ‘ticamente
entre 3 y 5 requisitos funcionales relevantes para la aventura descrita.
**Criterios de inferencia segΓΊn tipo de aventura** (del G3):
- **Nueva feature**: requisitos de la funcionalidad descrita + integraciones detectadas
- **Greenfield**: requisitos de producto + autenticaciΓ³n/seguridad bΓ‘sica
- **Refactoring**: requisitos de comportamiento preservado + criterios de refactoring
- **Spike**: hipΓ³tesis tΓ©cnicas a validar + criterios de Γ©xito del spike
**Si `contexto_docs` estΓ‘ disponible**: usar la documentaciΓ³n oficial fetcheada
en G4b para enriquecer los requisitos inferidos con las mejores prΓ‘cticas del
stack real del proyecto (naming conventions, patrones recomendados, restricciones conocidas).
---
## Paso 2 β RevisiΓ³n uno a uno
Aplicar el patrΓ³n estΓ‘ndar de TLOTP (`Γtem X/N`):
```
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π REQUISITO [X/N]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π·οΈ Tipo: [UBIQUITOUS / EVENT-DRIVEN / UNWANTED / ...]
π Prioridad: [MUST / SHOULD / COULD]
[WHEN el usuario envΓe el formulario de registro]
[THE SYSTEM SHALL validar el email, crear la cuenta y enviar
un correo de confirmaciΓ³n en menos de 2 segundos]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
AskUserQuestion:
```json
{
"questions": [{
"header": "Requisito X/N",
"question": "β‘ ΒΏAceptamos este requisito?",
"multiSelect": false,
"options": [
{
"label": "β
Aceptar β pasar al siguiente",
"description": ""
},
{
"label": "βοΈ Modificar β ajustar antes de aceptar",
"description": ""
},
{
"label": "βοΈ Saltar β no incluir este requisito",
"description": ""
},
{
"label": "π« Cancelar todo",
"description": "Volver al menΓΊ sin guardar"
}
]
}]
}
```
---
## Paso 3 β AΓ±adir requisitos nuevos
Tras revisar los inferidos, preguntar:
```json
{
"questions": [{
"header": "Requisitos adicionales",
"question": "β‘ ΒΏQuieres aΓ±adir mΓ‘s requisitos?",
"multiSelect": false,
"options": [
{
"label": "βοΈ AΓ±adir un requisito nuevo",
"description": ""
},
{
"label": "β
No, los requisitos son suficientes",
"description": "Continuar al preview del fichero"
},
{
"label": "π Volver a revisar los anteriores",
"description": ""
}
]
}]
}
```
Repetir este paso en bucle hasta que el usuario confirme que son suficientes.
---
## Paso 4 β Requisitos No Funcionales
AΓ±adir siempre una secciΓ³n de Requisitos No Funcionales (RNF) con al menos:
- Performance (si hay datos del stack que lo impliquen)
- Seguridad (siempre presente β inferir del stack Rohirrim)
- Mantenibilidad (siempre presente)
---
## Paso 5 β Preview completo
Mostrar el fichero completo antes de escribir:
```
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π PREVIEW β requirements.md
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
[contenido completo del fichero]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
AskUserQuestion:
- β
Guardar fichero β continuar a G6
- βοΈ Ajustar algo β volver a la revisiΓ³n
- π Volver al menΓΊ sin guardar
---
## Paso 6 β Escribir fichero
Usar Write para crear el fichero. Si ya existe, preguntar:
- β
Sobrescribir
- βοΈ Crear como requirements-v2.md
- π« Cancelar
**Ruta por defecto**: `docs/requirements.md`
Si no existe carpeta `docs/`: crear en la raΓz o donde el usuario prefiera.
---
## Lore al guardar
```
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π EL PERGAMINO DE LOS DESEOS HA SIDO INSCRITO
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β‘ Gandalf sella el pergamino con su bastΓ³n blanco:
"Los requisitos son la brΓΊjula de La Comunidad."
π₯ Sam: "Β‘El seΓ±or Frodo no irΓ‘ solo sin saber adΓ³nde va!"
β [N] requisitos funcionales aseguran el camino.
π Fichero: [ruta]/requirements.md
π Total: [N] requisitos ([MUST: X Β· SHOULD: Y Β· COULD: Z])
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
---
## Post-generaciΓ³n β CTA de revisiΓ³n adicional
Tras escribir el fichero, mostrar:
```
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π EL PERGAMINO DE LOS DESEOS HA SIDO INSCRITO β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
[el lore existente al guardar va aquΓ β no eliminarlo]
Si `GANDALF_MODE=fast`: continuar directamente a G6 sin preguntar.
Si `GANDALF_MODE=review` o no definido: AskUserQuestion:
- β
Continuar al diseΓ±o β G6
- π Revisar requirements.md generado β abrir el fichero para ajustes adicionales
- π Volver al menΓΊ sin continuar
---
## TransiciΓ³n
β Cargar @prompts/gandalf/sections/06-module-design.md
---
**MΓ³dulo**: `05-module-requirements.md`
**Invocado desde**: `03-module-objective.md` / `04-module-continue.md`
**Requiere**: Write, contexto_rohirrim, objetivo G3