В карточке списка и шапке /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>
3.0 KiB
3.0 KiB
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 не покрывается дельта-операциями).