- review.md переведён на словарь меток: вопросы адресованы темам, триггеры
профиля стали триггерами метки в три списка, quick/standard/wide → small/
medium/large, профиль deep упразднён
- openspec/config.yaml переписан по канонической форме: адреса passport и
CLAUDE.md вместо пересказа правил ревью и конвенций
- разобраны находки doc-consistency и doc-code-drift: исключение инварианта
сверено со спеками, единая точка времени и таблица classifyErr дополнены,
MaxTorrentSize получил дом в database.md
- имя раздачи нормализуется на границе разбора: вырожденное `-`
(metainfo.NoName) даёт пустое имя, пробельное схлопывается — сентинел больше
не доходит ни до контекста распознавания, ни до source_ref, ни до подсказки
вывода имени
- контракт «на любом пути ошибки приёма результат нулевой» объявлен в ingest и
удерживается структурно; три транспорта перестали обещать идентификатор,
которого нет, и коррелируют отказ по request_id
- scoped-логгер загрузки ставится до вызова внешнего сервиса в семи командах
воркера — записи об отказе qBittorrent и метабаз получили download_id
и infohash; граница разбора bencode записана в docs/research