Беклог: решение по confidence-гейту (вариант B, дефолт 0.7)
Обсудили расхождение спека↔код по авто-раскладке. Решение: гейт по confidence оставляем — низкий confidence служит доп. проверкой на ревью (LLM могла ошибиться так, что под ошибку нашёлся самосогласованный матч в базе). Задача gate-confidence-spec-vs-code переоформлена из «определиться» в конкретную: сделать порог реально выключаемым (0 = выкл, сейчас 0 молча возвращается к дефолту), понизить дефолт 0.85→0.7, узаконить confidence в спеке recognition как конфигурируемое четвёртое условие, дока + тесты. Реализовать как OpenSpec-change. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -39,7 +39,7 @@ Tududi (проект `jellybit`) больше **не** держит беклог
|
||||
- [Глубокий healthcheck и статус зависимостей](healthcheck-zavisimosti.md) — /healthz проверяет только сам сервис
|
||||
- [НФТ: масштаб до 100 одновременных загрузок (потолок — 1000)](masshtab-100-zagruzok.md) — Зафиксировать в НФТ ориентир 100/1000 загрузок + аудит узких мест (SQLite, воркер, поллинг)
|
||||
- [Обучение на правках человека (few-shot из прошлых ревью)](obuchenie-na-pravkah.md) — Когда человек поправил матч, тип или нумерацию — сохранять это как пример и подмешивать…
|
||||
- [Гейт авто-раскладки по confidence: спека vs код](gate-confidence-spec-vs-code.md) — Расхождение спека↔код: код делает confidence жёстким гейтом вопреки спеке — нужно решение
|
||||
- [Confidence-гейт авто-раскладки: узаконить в спеке + сделать выключаемым (дефолт 0.7)](gate-confidence-spec-vs-code.md) — Решено (B): гейт оставляем как доп. проверку на ревью — выключаемый порог, дефолт 0.85→0.7, записать в спеку
|
||||
- [Внешние субтитры: пары VobSub и языковой суффикс](vneshnie-subtitry.md) — Привязка субтитр→серия уже работает; остались пары VobSub .idx+.sub и потеря Lang/Flags
|
||||
- [Sweep застрявших linking при рестарте + фикс persist-failure (MAJOR-4)](review-major4-sweep-linking.md) — задачи застревают в linking при рестарте; заодно фикс persist-failure _(ревью 2026-07-08)_
|
||||
- [Defer из catched → лимбо → необратимый deleted (MAJOR-6)](review-major6-defer-catched.md) — Defer из ещё-не-добавленного catched уводит задачу в необратимый deleted _(ревью 2026-07-08)_
|
||||
|
||||
@@ -1,7 +1,47 @@
|
||||
# Гейт авто-раскладки по confidence: спека vs код
|
||||
# Confidence-гейт авто-раскладки: узаконить в спеке + сделать выключаемым (дефолт 0.7)
|
||||
|
||||
**Приоритет:** средний
|
||||
|
||||
Аудит спек↔код (2026-07-03) нашёл расхождение в модели уверенности. Спека recognition утверждает, что самооценка LLM confidence — вспомогательный сигнал, НЕ единственный гейт: при подтверждённом матче + чистой валидации + согласованности сигналов авто-раскладка допускается. Код же (internal/recognize/validate.go, confidence < AutoThreshold, дефолт 0.85) делает confidence жёстким блокирующим условием: план с матчем и чистой валидацией, но confidence 0.5 уйдёт в review вопреки спеке. Определиться: признать порог AutoThreshold в спеке как легитимный гейт (скорее так — код его осознанно ввёл конфигом) либо ослабить код. Заодно AutoThreshold как конфигурируемый гейт спекой не описан.
|
||||
Аудит спек↔код (2026-07-03) нашёл расхождение: спека recognition считает
|
||||
`confidence` вспомогательным сигналом (условия авто — только матч в базе +
|
||||
чистая валидация + согласованность), а код (`internal/recognize/validate.go:102`)
|
||||
добавляет `confidence < threshold` (дефолт 0.85) четвёртым **блокирующим**
|
||||
условием.
|
||||
|
||||
Связано: openspec/specs/recognition, ADR-2026-06-13-auto-link-requires-db-match, пакет recognize.
|
||||
**Решение (2026-07-08): оставляем гейт (вариант B).** Низкий confidence — это
|
||||
полезная доп. проверка на ревью: LLM могла ошибиться так, что под ошибочные
|
||||
данные в базе нашёлся «такой же» фильм/сериал (ложный, но самосогласованный
|
||||
матч — матч и валидация чисты, а модель при этом не уверена). Такой случай ловит
|
||||
именно порог, уводя задачу в review, а не в авто. Значит confidence остаётся
|
||||
законным условием — но его надо честно оформить.
|
||||
|
||||
Что сделать:
|
||||
|
||||
1. **Сделать гейт реально выключаемым.** Сейчас `recognize.go:173-175`
|
||||
(`if threshold <= 0 { threshold = defaultAutoThreshold }`) не даёт выключить
|
||||
порог: `0` в конфиге молча возвращается к дефолту. Убрать этот фолбэк — дефолт
|
||||
задаётся один раз при загрузке конфига; значение `0` → гейт пропускается
|
||||
(в `decide` уже `p.Confidence < 0` никогда не истинно, достаточно снять
|
||||
пере-применение дефолта).
|
||||
2. **Понизить дефолт** `recognition.auto_confidence_threshold` 0.85 → **0.7**
|
||||
(`config.go:218`, `recognize.go:144 defaultAutoThreshold`). Условия 1–3 несут
|
||||
корректность; порогу остаётся ловить только по-настоящему неуверенные планы.
|
||||
3. **Записать в спеку.** В `openspec/specs/recognition/spec.md` (Requirement
|
||||
«Модель уверенности и решение auto/review») переформулировать: confidence —
|
||||
явное **четвёртое, конфигурируемое** блокирующее условие (порог
|
||||
`recognition.auto_confidence_threshold`, `0` = выкл, дефолт 0.7), а не «лишь
|
||||
вспомогательный сигнал». Добавить сценарий: матч + чистая валидация +
|
||||
согласованность, но `confidence` ниже порога → review.
|
||||
4. **Конфиг-конвенция/дока:** описать ключ в `docs/conventions/config.md` (диапазон
|
||||
[0,1], 0 = выкл, дефолт 0.7).
|
||||
5. **Тесты:** `decide` с `threshold=0` (гейт выключен, авто при чистых 1–3);
|
||||
confidence ниже/выше порога при выполненных 1–3.
|
||||
6. Точное число порога откалибровать позже — для этого есть задача
|
||||
[eval-харнес распознавания](eval-harness-raspoznavaniya.md) (сейчас гейтим по
|
||||
неизмеренному сигналу).
|
||||
|
||||
Оформить как OpenSpec-change (дельта `recognition` + правки
|
||||
`validate.go`/`recognize.go`/`config`).
|
||||
|
||||
Связано: openspec/specs/recognition, ADR-2026-06-13-auto-link-requires-db-match,
|
||||
[eval-харнес](eval-harness-raspoznavaniya.md), пакет recognize.
|
||||
|
||||
Reference in New Issue
Block a user