## 1. Extracción de dominios a archivos nuevos - [x] 1.1 Crear `client.go` con el tipo `OutlineClient`, `newOutlineClient` y el método `post` movidos íntegros desde `main.go` (mismos nombres, firmas, comentarios y directivas `//nolint`), ajustando solo el bloque `import`. - **Given** el código del cliente en `main.go` - **When** se traslada a `client.go` y se compila en el contenedor - **Then** `go build ./...` compila sin errores y el archivo declara `package main` - [x] 1.2 Crear `updater.go` con `giteaRelease`, `parseVersion`, `versionNewer` y `doUpdate` movidos íntegros desde `main.go`, ajustando solo el bloque `import`. - **Given** el código del auto-update en `main.go` - **When** se traslada a `updater.go` y se compila en el contenedor - **Then** `go build ./...` compila sin errores y `updater.go` no contiene referencias al cliente de Outline ni a los handlers MCP - [x] 1.3 Crear `tools.go` con los cuatro handlers MCP (`handleListCollections`, `handleSearch`, `handleGetDocument`, `handleCreateDocument`) movidos íntegros desde `main.go`, ajustando solo el bloque `import`. - **Given** el código de los handlers en `main.go` - **When** se traslada a `tools.go` y se compila en el contenedor - **Then** `go build ./...` compila sin errores y los cuatro handlers conservan nombre y firma ## 2. Reducción del entrypoint - [x] 2.1 Reducir `main.go` a la función `main()`, las variables de build (`Version`, `GiteaURL`, `RepoOwner`, `RepoName`) y el registro de tools, eliminando el código ya trasladado y los imports no utilizados. - **Given** `main.go` tras las extracciones - **When** se elimina el código duplicado/movido y se limpian los imports - **Then** `main.go` contiene únicamente entrypoint + variables de build + registro de tools, y `go build ./...` compila sin errores ## 3. Verificación - [x] 3.1 Ejecutar `golangci-lint run` dentro del contenedor DevPod y corregir cualquier incidencia derivada del movimiento de código. - **Given** el refactor completado - **When** se ejecuta `golangci-lint run` en el contenedor - **Then** el linter no reporta errores nuevos respecto al estado previo al refactor - [x] 3.2 Verificar que el binario se comporta igual: compilar con `-ldflags` de prueba y ejecutar handshake MCP + `tools/list` por stdio. - **Given** el binario compilado a partir del código reorganizado - **When** se envía por stdio el handshake `initialize` y una petición `tools/list` - **THEN** el servidor responde correctamente y lista las mismas cuatro tools con los mismos esquemas que antes del refactor - [x] 3.3 Confirmar que no cambiaron `go.mod`, `go.sum`, `.gitea/workflows/release.yml` ni el contrato de nombres de assets. - **Given** el repositorio con el refactor aplicado - **When** se revisa `git diff` para esos archivos - **Then** no aparecen modificaciones en ellos