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

@@ -2,6 +2,7 @@ package core
import (
"context"
"fmt"
"strings"
"github.com/kamelion/ratatoskr-go/internal/storage"
@@ -301,7 +302,7 @@ func (c *Core) runDecide(ctx context.Context, task *storage.Task, force bool) (R
decision, err := c.Decide.Decide(ctx, msgs, *task, force)
if err != nil {
return Result{}, err
return Result{}, fmt.Errorf("%w: %v", ErrDecideFailed, err)
}
switch decision.Phase {