Files
jellybit/docs/backlog/gate-confidence-spec-vs-code.md
T
avandClaude Opus 4.8 2ed42b3e18 Беклог: решение по 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>
2026-07-08 15:31:05 +03:00

3.9 KiB
Raw Blame History

Confidence-гейт авто-раскладки: узаконить в спеке + сделать выключаемым (дефолт 0.7)

Приоритет: средний

Аудит спек↔код (2026-07-03) нашёл расхождение: спека recognition считает confidence вспомогательным сигналом (условия авто — только матч в базе + чистая валидация + согласованность), а код (internal/recognize/validate.go:102) добавляет confidence < threshold (дефолт 0.85) четвёртым блокирующим условием.

Решение (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-харнес распознавания (сейчас гейтим по неизмеренному сигналу).

Оформить как OpenSpec-change (дельта recognition + правки validate.go/recognize.go/config).

Связано: openspec/specs/recognition, ADR-2026-06-13-auto-link-requires-db-match, eval-харнес, пакет recognize.