# Checklist: validación local del .exe instalado (Fase 3.2)

Este documento guía la validación end-to-end del instalador
`MaxEditor_Setup_v0.1.0.exe` apuntando a tu Django local
(`http://127.0.0.1:8000`) **antes** de tocar HawkHost / dominio
público. Filosofía: el `.exe` instalado debe funcionar 100% contra el
backend local antes de cambiar el target a producción.

## Pre-requisitos

- [ ] Django local corriendo en `http://127.0.0.1:8000` (`.\start-backend.cmd`)
- [ ] Node 18+ y Python 3.11+ activos
- [ ] PyInstaller instalado: `pip install -e ".[tray,gui,build]"` desde `companion/`
- [ ] Inno Setup 6.x instalado (`C:\Program Files (x86)\Inno Setup 6\ISCC.exe`)
- [ ] `MaxEditorCompanion.exe` previo desinstalado (Add/Remove Programs)

## Build local (one-shot)

```powershell
.\tools\build_local_distribution.ps1
```

El script hace todo en orden:
1. `npm run build` en `frontend/` → `frontend/dist/`
2. `python manage.py collectstatic --noinput --clear` → `backend/staticfiles/`
3. Inyecta URLs locales en `companion/src/maxeditor_companion/_build_target.py`
4. `python companion/build.py` → `companion/dist/MaxEditorCompanion.exe`
5. Restaura `_build_target.py` a defaults de producción
6. `ISCC.exe installer/maxeditor.iss` → `installer/Output/MaxEditor_Setup_v0.1.0.exe`

Si el script falla a mitad de camino, **verificar** que `_build_target.py`
volvió a `BUILD_EDITOR_URL = None / BUILD_BACKEND_URL = None`:

```powershell
type companion\src\maxeditor_companion\_build_target.py
```

## Instalación

1. Cerrar cualquier instancia previa: tray icon → Salir
2. Desinstalar versión anterior si existe
3. Doble click en `installer\Output\MaxEditor_Setup_v0.1.0.exe`
4. Seleccionar instalación per-user (`PrivilegesRequired=lowest`)
5. Marcar "Crear acceso directo en escritorio" + "Iniciar al arrancar Windows"
6. Finalizar — el companion arranca automáticamente (tray icon visible)

## Verificación funcional

### A. Tray icon

- [ ] Icono aparece en system tray
- [ ] Click derecho muestra menú: Abrir editor, Buscar actualizaciones, Salir
- [ ] "Buscar actualizaciones" responde con "Estás al día" o similar
  (consulta `http://127.0.0.1:8000/api/core/companion/version-check/`)

### B. Apertura del editor

- [ ] "Abrir editor" abre ventana nativa (PyWebView/WebView2)
- [ ] Se ve el dashboard de MaxEditor (mismo HTML/CSS que el navegador)
- [ ] **No** aparece la barra de URL del navegador
- [ ] Console del WebView (F12 si el debug está habilitado) sin errores 404
  para assets de `/static/`

### C. Login

- [ ] Usuario `admin@altoque.tv` puede loguearse contra Django local
- [ ] Token JWT se guarda y persiste tras reabrir la ventana

### D. Companion bridge

- [ ] Badge "companion online" visible en header del dashboard
- [ ] En cada `project-card`, si la carpeta `imports/` existe en el
  workspace, aparece chip "N import(s) local(es)"
- [ ] Botón "Re-localizar" abre file picker nativo
- [ ] Importar un video nuevo desde el editor invoca el companion
  (verificar log en `%LOCALAPPDATA%\MaxEditor\logs\companion.log`)

### E. Edición end-to-end

- [ ] Crear proyecto nuevo
- [ ] Importar video
- [ ] Transcribir (si Whisper local está configurado)
- [ ] Editar timeline (split, trim, mover bloques)
- [ ] Exportar video → ver archivo en `media/exports/`
- [ ] **Verificar logs de Django**: NO debe haber llamadas a FFmpeg
  (FFmpeg corre en el companion, no en el server)

### F. Persistencia

- [ ] Cerrar la ventana → tray icon sigue visible
- [ ] "Abrir editor" desde tray vuelve al estado anterior
- [ ] Reiniciar Windows → companion arranca automáticamente
- [ ] Abrir 2x el shortcut del escritorio → no duplica el server (re-foco
  la ventana existente)

### G. Uninstall

- [ ] Desinstalar desde Add/Remove Programs
- [ ] Tray icon desaparece (`taskkill /F /IM MaxEditorCompanion.exe`
  ejecutado por el `[UninstallRun]` del .iss)
- [ ] **Verificar que NO se borró el workspace del usuario**
  (`%LOCALAPPDATA%\MaxEditor\workspace\` debe seguir existiendo)
- [ ] `%LOCALAPPDATA%\MaxEditor\logs\` y `\cache\` SÍ se eliminan

## Troubleshooting

### El `.exe` instalado abre pero no carga el editor (pantalla en blanco)

Causas probables:
- Django local no está corriendo en `http://127.0.0.1:8000`
- `frontend/dist/index.html` no existe (rebuild con `npm run build`)
- `staticfiles/` no fue poblado (re-correr `collectstatic`)

Verificar manualmente abriendo `http://127.0.0.1:8000/` en Chrome — debería
servir el `index.html` del SPA (configurado vía catch-all en
`backend/config/urls.py`).

### El companion apunta a producción aunque corrí el script local

Verificar que `_build_target.py` tenía las URLs locales **al momento
del build de PyInstaller**. El script las inyecta y restaura, pero si
PyInstaller falla podés haber instalado un `.exe` cacheado. Limpiar:

```powershell
Remove-Item -Recurse -Force companion\dist, companion\build
.\tools\build_local_distribution.ps1
```

### Tray icon no aparece tras instalar

Verificar logs en `%LOCALAPPDATA%\MaxEditor\logs\companion.log`. Causas
comunes: puerto 7497 ocupado, cert SSL no se pudo instalar en
`CurrentUser\Root`, tkinter/pystray no se incluyeron en el bundle.

## Cuando todo esté verde

Recién entonces avanzar a Fase 3.3 (deploy a HawkHost):
1. Restaurar `_build_target.py` con URLs de producción (ya lo hace el
   script al terminar)
2. Rebuild sin el flag local: `python companion/build.py`
3. Subir backend + frontend al servidor
4. Smoke contra `https://altoque.tv/maxeditor`
