You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Per-case model override — case YAML .model field. Resolution: case YAML > EVAL_MODEL > OPENCODE_MODEL > built-in default. Recorded in env-manifest so MODEL_CHANGED attribution fires correctly. (PR #1)
Project-config layer — .opencode/eval-harness.yaml walked up from cwd. Settings: model, budget_usd, max_seconds, skills_root, llm_judge.model. Env vars win when explicitly set. (PR #2)
opencode Stop hook scaffold — scripts/eval/hooks/opencode-stop.sh parses OPENCODE_CHANGED_FILES and re-runs evals for touched skills. Gated on opencode >= 1.16 (no-op until plugin API stabilizes). (PR #3)
Per-repo opt-in registry — scripts/eval/lib/registry.sh manages ~/.config/opencode/eval-harness/registry.yaml. Automated triggers (pre-push, sync-publish, stop-hook) skip when current repo isn't enabled. Required for 43-repo workspace support. (PR #4)
pricing.json + dollar cost reporting — curated rates for haiku-3-5, sonnet-4-6, opus-4-7. Per-case cost.usd in results.json. Total at summary.total_cost_usd. Staleness warning (default 60 days); EVAL_FAIL_ON_STALE_PRICING=1 to gate. (PR #6)
3-sample stability on critical path — --stability-samples=N flag + EVAL_STABILITY_SAMPLES env. On FAIL, runs N-1 more samples. Records byte-identicity. Tags attribution flaky:true when samples diverge. (PR #7)
Changed
lib/yq-shim.sh (_yq.py) now handles -o=json argv form, []? iteration suffix, and // [] fallback for empty lists.