docs: канон поднят с версии 7 до 12

- каталог задач переехал в tasks/ в корне, спринт упразднён — приоритет
  теперь порядок строк в BACKLOG.md, четыре задачи набора вернулись в беклог
- гейт: путь docs.py переведён на av-dev-docs вместо снесённого av-dev-pm,
  добавлены шаги tasks.py check и openspec.py check
- относительные ссылки внутри задач и ссылки из docs/ на задачи починены
This commit is contained in:
av
2026-08-09 19:09:53 +03:00
parent 9a624d4e13
commit c5d62d76ee
54 changed files with 109 additions and 79 deletions
+81
View File
@@ -0,0 +1,81 @@
# ✨ Узаконить 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 остаётся
законным условием — но его надо честно оформить.
Что сделать:
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) и поправить значение в таблице «Настройки с
числовым значением» [docs/database.md](../../docs/database.md) — дом числа там, и
при смене дефолта оно разъедется первым. Формулировки инварианта в
`CLAUDE.md` и ложноположительного в `docs/review.md` уже приведены к
«единственным гейтом не является» (канон 4, 2026-08-06) — переписывать их
задача не должна.
5. **Тесты:** `decide` с `threshold=0` (гейт выключен, авто при чистых 1–3);
confidence ниже/выше порога при выполненных 1–3.
6. Точное число порога откалибровать позже по рабочему потоку — сколько раздач
ушло в ревью и сколько из них пришлось поправить. Размеченный корпус, по
которому порог можно было бы подобрать заранее, решено не собирать
(`../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.