spec: separar responsabilidades feat: agregra pipeline de construccion en gitea
28 lines
1.9 KiB
Markdown
28 lines
1.9 KiB
Markdown
## ADDED Requirements
|
|
|
|
### Requirement: Organización del código fuente por archivos
|
|
El código fuente del proyecto SHALL estar distribuido en múltiples archivos dentro del paquete único `main`, agrupando cada archivo una única responsabilidad: entrypoint (`main.go`), cliente HTTP de Outline (`client.go`), handlers de tools MCP (`tools.go`) y auto-update (`updater.go`).
|
|
|
|
#### Scenario: Distribución de archivos
|
|
- **WHEN** se revisa la raíz del módulo `outline-mcp`
|
|
- **THEN** existen los archivos `main.go`, `client.go`, `tools.go` y `updater.go`, todos declarando `package main`
|
|
|
|
#### Scenario: Contenido del entrypoint
|
|
- **WHEN** se revisa `main.go`
|
|
- **THEN** contiene únicamente la función `main()`, las variables de build inyectadas por `-ldflags` (`Version`, `GiteaURL`, `RepoOwner`, `RepoName`) y el registro de tools en el servidor MCP
|
|
|
|
#### Scenario: Aislamiento del auto-update
|
|
- **WHEN** se revisa `updater.go`
|
|
- **THEN** contiene `giteaRelease`, `parseVersion`, `versionNewer` y `doUpdate`, sin referencias al cliente de Outline ni a los handlers de tools MCP
|
|
|
|
### Requirement: Refactor sin cambio de comportamiento
|
|
La distribución del código en archivos SHALL preservar íntegramente el comportamiento observable del servidor: nombres y esquemas de las tools MCP, manejo de errores de configuración, protocolo MCP y lógica de auto-update.
|
|
|
|
#### Scenario: El servidor funciona tras el refactor
|
|
- **WHEN** se compila el binario resultante y se ejecuta el handshake MCP por stdio seguido de una petición `tools/list`
|
|
- **THEN** el servidor responde correctamente y lista las mismas tools con los mismos esquemas que antes del refactor
|
|
|
|
#### Scenario: Sin cambios en dependencias ni pipeline
|
|
- **WHEN** se compara el estado del repositorio antes y después del refactor
|
|
- **THEN** `go.mod`, `go.sum`, `.gitea/workflows/release.yml` y el contrato de nombres de assets (`outline-mcp_{GOOS}_{GOARCH}`) permanecen inalterados
|