internal/analyst: Decider через opencode (A1–A4)
All checks were successful
build-test / build (push) Successful in 1m15s

- Analyst struct: строит Go-template промпт из history+draft
- opencode.Runner.Run (agent=analyst) → ExtractVerdict → ExtractJSON
- Валидация phase/полей → core.Decision
- A1 DecodeFail, A2 RunError, A3 Validation, A4 NotReady
- MockRunner в тестах (11 тестов, зелёные)
- core.runDecide оборачивает ошибки аналитика в D1 ErrDecideFailed
- allow ready→collecting (фикс для правки готового черновика)
This commit is contained in:
Hermes
2026-08-15 00:32:49 +05:00
parent 2957bf0d63
commit dfe374dd55
5 changed files with 455 additions and 1 deletions

View File

@@ -0,0 +1,18 @@
package analyst
import "errors"
// Классы ошибок A1A4.
var (
// A1 — ответ аналитика не содержит валидного JSON.
ErrDecodeFail = errors.New("A1: decode analyst response")
// A2 — ошибка запуска opencode run (включая таймаут rc=-1).
ErrRunError = errors.New("A2: analyst run error")
// A3 — JSON от аналитика есть, но поля невалидны.
ErrValidation = errors.New("A3: invalid analyst response")
// A4 — аналитик ещё не может работать (нет истории).
ErrNotReady = errors.New("A4: analyst not ready")
)