## 1. Слой метаданных — генерация URL

- [x] 1.1 Добавить поле `URL` в структуру `metadata.Candidate` (`internal/metadata/metadata.go`)
- [x] 1.2 Заполнять `URL` в `TMDB.Search`: `https://www.themoviedb.org/movie/{id}` (фильм) или `https://www.themoviedb.org/tv/{id}` (сериал)
- [x] 1.3 Заполнять `URL` в `TVDB.Search`: `https://www.thetvdb.com/dereferrer/series/{id}`
- [x] 1.4 Заполнять `URL` в `TVMaze.Search`: `https://www.tvmaze.com/shows/{id}` (нативный id, не теговый)
- [x] 1.5 Обновить тесты клиентов метаданных (tmdb_test.go, tvdb_test.go, tvmaze_test.go) — проверить наличие URL в результатах Search

## 2. БД — хранение URL

- [x] 2.1 Создать миграцию `internal/store/migrations/0004_candidate_url.sql` — добавить колонку `url TEXT` в `metadata_candidate`
- [x] 2.2 Добавить поле `URL` (`sql.NullString`) в структуру `store.MetadataCandidate`
- [x] 2.3 Обновить `CreateCandidates` — сохранять `url` в INSERT
- [x] 2.4 Обновить `docs/specs/database.md` — актуализировать ER-схему (колонка `url`)

## 3. Конвертация candidate → store

- [x] 3.1 В `worker.toStoreCandidates` пробрасывать `URL` из `metadata.Candidate` в `store.MetadataCandidate`

## 4. HTTP API и шаблон

- [x] 4.1 Добавить поле `URL` в `candidateView` (internal/httpapi/review.go)
- [x] 4.2 Пробросить `URL` из `store.MetadataCandidate` в `candidateView` при сборе данных ревью
- [x] 4.3 В шаблоне `web/templates/review.html` добавить колонку «ссылка» в таблицу кандидатов с `<a target="_blank">`

## 5. Проверка

- [x] 5.1 `task test` — все тесты проходят
- [x] 5.2 `task lint` — без ошибок
- [x] 5.3 `openspec validate --strict` — валидация спеки
