- в наборе шесть задач: локаль TVDB и confidence-гейт под цель, плюс баги и техдолг помимо неё - взятым дописаны разделы своего типа: «Затрагивает», критерии с оракулами, воспроизведение - решены развилки: оба расхождения код↔спека правятся спекой (и потому стали chore), опрос qBittorrent тормозится бэкоффом до минутного потолка
6.7 KiB
✨ Узаконить confidence-гейт авто-раскладки в спеке и сделать его выключаемым (дефолт 0.7)
- Тип: feature
- Категория: Ядро продукта
- Зачем: Решено (B): гейт оставляем как доп. проверку на ревью — выключаемый порог, дефолт 0.85→0.7, записать в спеку
- Теги: goal:recognition-accuracy
Аудит спек↔код (2026-07-03) нашёл расхождение: спека recognition считает
confidence вспомогательным сигналом (условия авто — только матч в базе +
чистая валидация + согласованность), а код (internal/recognize/validate.go:102)
добавляет confidence < threshold (дефолт 0.85) четвёртым блокирующим
условием.
Решение (2026-07-08): оставляем гейт (вариант B). Низкий confidence — это полезная доп. проверка на ревью: LLM могла ошибиться так, что под ошибочные данные в базе нашёлся «такой же» фильм/сериал (ложный, но самосогласованный матч — матч и валидация чисты, а модель при этом не уверена). Такой случай ловит именно порог, уводя задачу в review, а не в авто. Значит confidence остаётся законным условием — но его надо честно оформить.
Что сделать:
- Сделать гейт реально выключаемым. Сейчас
recognize.go:173-175(if threshold <= 0 { threshold = defaultAutoThreshold }) не даёт выключить порог:0в конфиге молча возвращается к дефолту. Убрать этот фолбэк — дефолт задаётся один раз при загрузке конфига; значение0→ гейт пропускается (вdecideужеp.Confidence < 0никогда не истинно, достаточно снять пере-применение дефолта). - Понизить дефолт
recognition.auto_confidence_threshold0.85 → 0.7 (config.go:218,recognize.go:144 defaultAutoThreshold). Условия 1–3 несут корректность; порогу остаётся ловить только по-настоящему неуверенные планы. - Записать в спеку. В
openspec/specs/recognition/spec.md(Requirement «Модель уверенности и решение auto/review») переформулировать: confidence — явное четвёртое, конфигурируемое блокирующее условие (порогrecognition.auto_confidence_threshold,0= выкл, дефолт 0.7), а не «лишь вспомогательный сигнал». Добавить сценарий: матч + чистая валидация + согласованность, ноconfidenceниже порога → review. - Конфиг-конвенция/дока: описать ключ в
docs/conventions/config.md(диапазон [0,1], 0 = выкл, дефолт 0.7) и поправить значение в таблице «Настройки с числовым значением» docs/database.md — дом числа там, и при смене дефолта оно разъедется первым. Формулировки инварианта вCLAUDE.mdи ложноположительного вdocs/review.mdуже приведены к «единственным гейтом не является» (канон 4, 2026-08-06) — переписывать их задача не должна. - Тесты:
decideсthreshold=0(гейт выключен, авто при чистых 1–3); confidence ниже/выше порога при выполненных 1–3. - Точное число порога откалибровать позже по рабочему потоку — сколько раздач
ушло в ревью и сколько из них пришлось поправить. Размеченный корпус, по
которому порог можно было бы подобрать заранее, решено не собирать
(
../REJECTED.md, 2026-08-06), так что первое значение остаётся оценкой.
Затрагивает
internal/recognize—decide/validate.go(четвёртое условие) иrecognize.go(пере-применение дефолта, из-за которого0не выключает гейт);- секция
[recognition]конфига,config.example.tomlи значение по умолчанию вinternal/config; openspec/specs/recognition/spec.md— требование «Модель уверенности и решение auto/review»;docs/database.md(дом числа) иdocs/conventions/config.md(описание ключа).
Критерии приёмки
auto_confidence_threshold = 0выключает гейт: при чистых условиях 1–3 раздача уходит в авто независимо отconfidence(оракул: тестdecideс нулевым порогом).- При
confidenceниже порога и выполненных условиях 1–3 раздача уходит в review (оракул: табличный тест на границе порога — ниже, равно, выше). - Умолчание равно 0.7 в одном месте — загрузке конфига;
recognize.goсвоего дефолта не применяет (оракул: тест, что пустой конфиг даёт 0.7, плюс отсутствиеdefaultAutoThresholdв диффе). - Спека называет
confidenceчетвёртым конфигурируемым блокирующим условием и несёт сценарий «матч чист, но уверенность ниже порога → review» (оракул:openspec validate --strict).
Оформить как OpenSpec-change (дельта recognition + правки
validate.go/recognize.go/config).
Связано: openspec/specs/recognition, ADR-2026-06-13-auto-link-requires-db-match, пакет recognize.