Files
jellybit/openspec/changes/archive/2026-07-04-web-ui-download-id-identifier/design.md
T
avandClaude Opus 4.8 9ed732e49e Веб-UI: основной идентификатор карточек — download.id вместо infohash
В карточке списка и шапке /download/{id} показываем и копируем download.id
(ULID) — тот же ключ, что в логах (download_id), удобно грепать. Infohash
остаётся в блоке «Информация о торренте». Поиск по списку расширен: матчит
любой идентификатор (download.id ИЛИ infohash), плюс название/контекст.
Удалены осиротевшие поля Infohash/InfohashShort и хелпер shortenHash.

Дельта web-ui влита в спеки, change заархивирован.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-04 09:47:27 +03:00

3.0 KiB
Raw Blame History

Context

Изменение презентационное и уже реализовано в коде (шаблоны, поиск, view-структуры). Дизайн-документ здесь короткий и нужен лишь как зависимость для tasks и чтобы зафиксировать одно продуктовое решение. Полноценного двухчекпоинтного ревью задача не требует (тривиальная — достаточно прохода по коду).

Goals / Non-Goals

Goals:

  • Показывать и копировать в карточках download.id — тот же ключ, что в логах (download_id), чтобы «скопировал → нашёл в логах» работало без перекодировки.
  • Поиск по списку — по любому идентификатору загрузки (download.id ИЛИ infohash).

Non-Goals:

  • Не убираем infohash из UI совсем: он остаётся в блоке «Информация о торренте».
  • Не меняем модель данных, API-DTO и формат логов.

Decisions

  • Идентификатор карточки — download.id, не infohash. В логах основной ключ связывания — download_id (см. internal/worker/*), поэтому именно его нужно копировать и грепать. Infohash второстепенен и уместен только в детальном блоке о торренте. Альтернатива (оставить infohash в шапке) отвергнута: заставляет пользователя вручную сопоставлять хэш с id при чтении логов.
  • Поиск матчит любой идентификатор. В LIKE-условие internal/store/list.go добавлен download.id рядом с уже имевшимся infohash; название/контекст сохранены. Так скопированный из карточки id находится обратным поиском.
  • Чистка мёртвого кода. Поля Infohash/InfohashShort во view-структурах и хелпер shortenHash стали не нужны — удалены, чтобы не копить неиспользуемое.

Risks / Trade-offs

  • [ULID менее узнаваем на глаз, чем hex-infohash] → показываем полностью (26 символов помещаются в строку), рядом кнопка копирования; в детальном блоке infohash остаётся для тех, кому он нужен.
  • [Проза ## Purpose в live-спеке упоминает «копирование infohash»] → правится прямой правкой live-спеки при archive (Purpose не покрывается дельта-операциями).