# Golden conversation evals for the nomos agent.
# Run: go run ./cmd/nomos/eval -gateway http://localhost:8092 -manifest evals/*.yaml
#
# Each conversation costs real OpenRouter credits (~$0.01–0.05). The runner
# sends the prompt, waits for the turn to finish, optionally sends a followup,
# and scores assertions against the final persisted transcript.
#
# These are STRUCTURAL assertions only — tool-call sequences, plan steps,
# writeback, completion. Text quality is model-dependent and not scored.

# --- eval 1: trivial read-only task (degenerate case) ---
- name: trivial_readonly
  prompt: "What is the state of lxc:dns? One line, no plan needed."
  assertions:
    - kind: completes
    - kind: no_propose_plan       # trivial — no ceremony
    - kind: max_tool_calls
      value: 5                    # get_entity + complete_task + maybe one more
    - kind: no_run                # read-only, no `run` needed

# --- eval 2: the operator's original bug — plan + proceed ---
- name: plan_advances_on_proceed
  prompt: "Check the uptime of lxc:gitea. Plan it out, propose the plan, then wait for my approval before running anything."
  followup: "proceed with the rest"
  assertions:
    - kind: completes
    - kind: proposes_plan_once    # propose_plan called exactly once
    - kind: no_duplicate_proposal # the original bug: re-propose on "proceed"
    - kind: writes_back           # ran `run` → must update_entity_attributes (D.1)
    - kind: no_duplicate_complete # C.1 — complete_task called at most once

# --- eval 3: UI complaint should not re-execute (C.2) ---
- name: ui_complaint_no_rerun
  prompt: "Check the uptime of lxc:dns. Plan it out and wait for my approval."
  followup: "go ahead"
  assertions:
    - kind: completes
    - kind: proposes_plan_once
    - kind: writes_back
# (The followup "go ahead" is approval, not a UI complaint — we'd test the
#  complaint path separately with a second followup, but that needs the
#  session to stay open after completion, which the runner doesn't support yet.
#  For now this validates the approval-vocabulary path.)

# --- eval 4: knowledge preferred over fleet re-execution (E.1) ---
# A same-day fleet audit knowledge entry exists in the DB. The agent should
# search_knowledge first and NOT run `run` against 20 LXCs.
- name: knowledge_preferred_over_rerun
  prompt: "Give me an overview of what needs updating across the homelab, categorize by criticality. There may be a recent audit already."
  assertions:
    - kind: completes
    - kind: calls_tool
      value: search_knowledge      # E.1 — must check the knowledge base first
    - kind: max_run_calls
      value: 4                     # NOT 20+ — a targeted refresh only
