# T16 Izveštaj: SSE auto-refresh dashboarda **Agent:** coder **Model:** Opus **Datum:** 2026-02-20 --- ## Šta je urađeno Dashboard se automatski ažurira kad se stanje taskova promeni putem SSE. ### Novi fajlovi | Fajl | Opis | |------|------| | `internal/server/events.go` | EventBroker, polling (2s), hashTaskState, SSE handler | ### Izmenjeni fajlovi | Fajl | Izmena | |------|--------| | `internal/server/server.go` | events field, GET /events ruta, startPolling u Run() | | `internal/server/render.go` | renderBoardFragment() za SSE updates | | `internal/server/server_test.go` | 4 nova testa | | `web/templates/layout.html` | initSSE(), isDragging flag, onStart handler | | `web/templates/partials/column.html` | Uklonjen hx-trigger="every 5s" (zamenjeno SSE-om) | ### Kako radi 1. Server poluje TASKS/ svake 2s 2. Računa SHA-256 hash svih task ID:status parova 3. Ako se hash promenio → broadcast SSE event svim klijentima 4. Browser EventSource prima event → zameni board HTML 5. Tokom drag & drop — SSE update se ignoruje (isDragging flag) ### Endpoint | Ruta | Opis | |------|------| | `GET /events` | SSE stream — event `taskUpdate` sa board HTML | ### Novi testovi — 4 PASS ``` TestSSE_EventsEndpoint PASS — proverava Content-Type text/event-stream TestHashTaskState PASS — hash se menja kad se status menja, stabilan za isti set TestSSE_BroadcastOnChange PASS — premesti fajl → broadcast event TestSSE_NoBroadcastWithoutChange PASS — bez promene → bez eventa ``` ### Ukupno projekat: 129 testova, svi prolaze - `go vet ./...` — čist - `go build ./...` — prolazi