---
name: project-create
description: >-
  Crear un proyecto nuevo en el repo del usuario importando la plantilla del
  equipo según el stack (p. ej. Angular). Usar al pedir proyecto nuevo o
  /project-create; preguntar el stack si no está claro. No modifica los
  repositorios plantilla remotos.
---

# Crear proyecto nuevo (desde proyecto base)

## Purpose

Crear un **proyecto nuevo para el usuario** fusionando un **proyecto base** del equipo: remote hacia la plantilla, `fetch`/`merge`, instalación de dependencias del stack y sustitución de nombres/IDs/envs según la referencia del stack.

**Disparadores:** `/project-create`, «crear proyecto», «nuevo proyecto desde plantilla», o equivalente.

## Contrato para el agente (obligatorio)

| Regla | Texto |
| ----- | ----- |
| C1 | **No** ejecutar `git merge` ni personalización masiva hasta tener **`stack_id`** explícito acordado con el usuario (p. ej. `angular`). Si el usuario no lo dijo: **preguntar** y **parar**. |
| C2 | **No** asumir Angular u otro stack por defecto del equipo. |
| C3 | URL de plantilla, remote y rama: **solo** en `references/<stack_id>.md` (sección de plantilla o comandos git de ese archivo). **No** inventar URL ni rama desde memoria. |
| C4 | **Leer entero** `references/<stack_id>.md` **antes** del `git merge` (y antes de sustituciones). Si el archivo no existe: **parar**. **No** improvisar lista de archivos a tocar. |
| C5 | **No** modificar repositorios remotos de plantilla; solo el repo **local del usuario**. |
| C6 | Tras flujo exitoso (merge limpio + pasos de referencia): **preguntar** si desea add-ons; si sí → seguir skill `project-addons`; si no → cerrar sin invocarlo. |

## Árbol de decisión (orden fijo)

1. Confirmar intención de crear proyecto desde plantilla.
2. **Si** falta `stack_id` → preguntar (listar stacks con `references/<stack_id>.md` en el skill + stacks pendientes sin archivo) → **fin de turno** hasta respuesta.
3. **Si** no existe `references/<stack_id>.md` junto a este skill → avisar; no continuar con merge; **fin**.
4. Leer **completo** `references/<stack_id>.md` una vez (incluye URL de plantilla, git y post-merge).
5. Verificar `.git` en la raíz de trabajo; si no: `git init` o clonar según indique el usuario.
6. Ejecutar en el repo del usuario los pasos git de la referencia (remote, `fetch`, `merge`, …) tal cual los indique ese archivo, respetando C5 y conflictos de nombre de remote (acordar con el usuario si el nombre de remote ya existe con otra URL).
7. **Si** merge con conflictos → listar paths en conflicto, orientar resolución manual, **no** seguir como merge limpio → **fin** hasta resuelto.
8. Ejecutar el resto de la referencia **en el orden** del documento (personalización, `npm install`, etc.).
9. Preguntar por add-ons (C6); actuar según respuesta.

## Scope

**Incluye:** comprobar/preparar repo git; remote; fetch/merge; post-merge según `references/<stack_id>.md`; orientación ante conflictos.

**No incluye:** crear/publicar/mantener el repo plantilla; stack sin `references/<stack_id>.md` cuando hace falta el flujo completo.

## Inputs

- Repositorio del usuario con `.git` (o disposición a inicializarlo).
- `stack_id` explícito.
- Lectura obligatoria de `references/<stack_id>.md` **al completo** antes de `git merge`.

## Outputs

- Historial fusionado con plantilla (si merge OK).
- Dependencias y sustituciones según referencia del stack.
- Si merge falla: lista de conflictos.
- Pregunta sobre add-ons antes de cerrar (flujo exitoso).

## Steps

Los pasos operativos están **duplicados de forma normativa** en [Árbol de decisión](#árbol-de-decisión-orden-fijo). Usar el árbol como checklist.

## Examples

**Input:** «Quiero un proyecto Angular nuevo.»

**Proceso:** `stack_id = angular` → leer `references/angular.md` entero → merge y pasos de esa referencia.

**Input:** `/project-create` sin stack.

**Output:** Pregunta por tipo de proyecto; **sin** merge.

**Input:** Stack sin `references/<stack>.md`.

**Output:** Avisar procedimiento detallado pendiente; no inventar sustituciones ni URL de plantilla.

## Anti-patterns

- Merge sin `stack_id`.
- Asumir Angular por frecuencia.
- Saltarse lectura completa de `references/<stack_id>.md` cuando existe.
- Obtener URL de plantilla desde memoria o sin leer la sección correspondiente de `references/<stack_id>.md`.

## Notes

### Tabla de stacks (referencias detalladas)

| `stack_id` | Referencia detallada | Estado |
| ---------- | -------------------- | ------ |
| `angular`  | [references/angular.md](references/angular.md) | Completo |
| `react`    | `references/react.md` (aún no en repo) | Preguntar; parar si piden flujo completo sin archivo |
| `symfony`  | `references/symfony.md` (aún no en repo) | Idem |

URL, rama y remote de la plantilla viven **en cada** `references/<stack_id>.md` que esté completo (p. ej. Angular).
