v3.0
v3.0 (2025-12-19)
This is a major release that bundles all changes since v2.0 (including the v2.1 UI improvements), with a focus on:
- An optional Automated LLM Evaluation system (multi-judge consensus, job queue, cost tracking)
- A full Arena UI overhaul (no build step; still SSR Go templates)
- Significant test suite expansion + automated coverage reporting
Highlights
Automated Evaluation (New)
- Optional Python FastAPI judge service (
python_service/) integrating LiteLLM + provider SDKs. - Multi-judge consensus scoring (Claude Opus 4.5 / GPT-5.2 / Gemini 3 Pro) with audit trail (reasoning + confidence).
- Async job queue in Go (
evaluator/) with persistence in SQLite and WebSocket progress broadcasts. - Cost estimation and budget alerting, plus cancelable evaluations from the UI.
- AES-256-GCM encrypted API key storage (configured via
ENCRYPTION_KEY; keys are masked in the UI).
UI Overhaul (Arena)
- New “Arena” layout + design system (“Neon Glass Foundry”) documented in
DESIGN_CONCEPT.mdandDESIGN_ROLLOUT.md. - Shared stylesheet
templates/arena.cssapplied across templates (no bundler/build tooling). - Results-grid UX upgrades (from
v2.1): sticky headers, row highlighting, tooltips, keyboard navigation, and a unified score color scheme. - Dynamic profile grouping and separation on the Results page, with consistent borders/colors.
Quality & Testing
- Large Go test suite across
handlers/,middleware/,evaluator/,templates/, andintegration/. - Coverage badge and auto-update scripts (
scripts/update-badge.sh,scripts/update-badge.ps1) andmake update-coverage. - Refactors for testability (e.g., handler dependency injection).
Verification
CGO_ENABLED=1 go test ./... -v -race -cover(pass)- Total statement coverage: 79.6% (
CGO_ENABLED=1 go test ./... -count=1 -coverprofile coverage.out+go tool cover -func coverage.out)
Breaking / Migration Notes
- Removed legacy JSON→SQLite migration tooling from
v2.0:--migrate-to-sqlite,--remigrate-scores,--cleanup-duplicates, and related code paths are no longer present.- If you still need to migrate old JSON state, run the migration on
v2.0to producedata/tournament.db, then upgrade tov3.0.
- If you still need to migrate old JSON state, run the migration on
- Automated evaluation now relies on an encryption key: if you enable automated evaluation, set
ENCRYPTION_KEY(32-byte hex) and run the Python judge service (python_service/main.py, default:8001).- Manual evaluation continues to work without the Python service.
Upgrade Checklist
- Ensure Go is installed and
CGO_ENABLED=1is enabled (SQLite). - Back up your existing
data/tournament.dbbefore upgrading. - Start the Go server and verify the Arena UI loads.
- Optional: start the Python judge service and configure provider keys at
/settings(seeAUTOMATED_EVALUATION_SETUP.md).
Full Changelog (v2.0 → v3.0)
Commits included
- fix: Correctly delete models from the database in WriteResults function (3206778)
- update: models (237e5c1)
- clean: old json (eafb665)
- feat: Implement dynamic profile grouping with color-coded borders (cffd009)
- refactor: Group prompts by profile for results page (a0fa661)
- fix: Correct profile order, uncategorized display, and separator lines (c27e5ea)
- fix: Remove hardcoded profile order and use database order instead (14c14bf)
- fix: Order profiles by prompt appearance and handle missing profiles (d090047)
- Refactor: Extract profile group logic to middleware/utils.go (45455b4)
- refactor: Remove unused imports from results.go (73a9ee1)
- fix: Resolve type mismatch in profile group handling (c25aa0b)
- style: Fix UI issues: cell size, column separators, column 42 size (48091bb)
- style: Fix header overflow and standardize cell size to 50px square (97c78cb)
- refactor: Remove ad-hoc fix for last column in results table (aa5d706)
- style: Constrain profile headers to prevent column stretching (6f0821c)
- fix: imports (0c591ad)
- fix: handle text overflow on header (7bbcec2)
- fix: Reduce max-width of profile headers to 50px for better display (326c8cd)
- refactor: Move CSS from results.html to style.css for better styling (4f5f864)
- fix: center the score table (6be14dc)
- refactor: Move CSS from results.html to style.css and use CSS classes (049e167)
- refactor: Improve profile styling with CSS classes and variables (9c9d693)
- refactor: Extract hardcoded header styles to style.css (7ff392c)
- style: Extract inline CSS to style.css (325c2ee)
- style: Extract hardcoded styles to CSS (a2c7063)
- fix: Remove duplicate className assignments in total score cell creation (e11a436)
- fix: ensure progress-bar-standard-width takes precedence (a15a810)
- style: synchronize score color scheme across pages and chart (a4df97e)
- style: Sync score color scheme across pages and chart (71ddd81)
- refactor: standardize score color management (daa274b)
- feat: Update totalScoresChart to use score-buttons color scheme (e1c60cd)
- feat: add score color utility functions and debugging (d904542)
- feat: centralize score colors in score-utils.js (9a96c92)
- fix: remove undefined scoreColorDefault function from evaluate.html (48b60e3)
- style: Add separator lines between profile headers (b6b898d)
- feat: enhance profile group separation with 5px borders (9fa53d7)
- refactor: Simplify profile group border styling (f9f14a5)
- fix: ensure profile-start class is applied to first cell of each profile group row (3f5e6de)
- fix: handle case sensitivity in profile ID properties (1c975cd)
- fix: handle case mismatch in profile group properties (e7833dc)
- fix: strengthen border styling for profile groups (6901431)
- refactor: Simplify border application and remove unnecessary CSS variables (622b7b31)
- style: Extract inline styles to CSS and add profile-specific classes (afe562b)
- refactor: remove hardcoded profile classes and use dynamic inline styles (02f00b24)
- style: Extract cell style manipulations to CSS (acbadd5)
- feat: apply borders directly with inline styles (eb099d3)
- fix: Ensure borders are correctly applied to header and content rows (725a4ec)
- refactor: Simplify profile border application and improve styling (b085d39)
- fix: ensure vertical profile borders appear in table data cells (2f0a4bd)
- feat: add row highlighting, sticky header, tooltips, and keyboard navigation (8c05adf)
- feat: add styles for results table (0db55c3)
- fix: profile group separator (4bf19cb)
- refactor: Clean up code, remove duplicates, extract hardcoded values, and improve maintainability (e42c25c)
- fix: Correct SEARCH block to match exact lines in templates/style.css (e227efcc)
- style: Use #333 for profile color (cb914fa)
- feat: restrict prompt moves to maintain profile group contiguity (7c3f34a)
- docs: Update CHANGELOG.md for v2.1 release (8bd272f)
- docs: update images (f507dc0)
- update: latest models (279db80)
- ai: add rule files for claude code and gemini cli (f44408a)
- feat: Add automated LLM evaluation system with multi-judge consensus (73d39b2)
- chore: ignore built artifracts (17b627d)
- chore: add Automated LLM Evaluation System - Implementation Plan (8e4463c)
- docs: Update README.md to reflect automated evaluation system (4daa24f)
- ai: enhance system prompt (72d2ae8)
- claudecode: full tdd-guard integration (c8b66ac)
- feat: full claude code intergration (e71ed3f)
- feat: enhance readme (7d06935)
- ai: custom tdd-guard (580d207)
- test: add comprehensive test suite (42% coverage) (3d9f8ae)
- test: expand test coverage to 51% (164381d)
- refactor: delete legacy migration code, add template tests (68.6% coverage) (cf31d76)
- chore: settings updated (55db0c2)
- test: expand test coverage to 71.8% (dc90a66)
- test: expand coverage to 73% with evaluator and handler tests (3fa10da)
- feat: add make update-coverage to auto-update badge (be8a785)
- test: expand coverage to 74% with handler edge case tests (fceb42e)
- qol: improve code coverage (d617beb)
- qol: improve coverage (7578b82)
- chore: ignore correctly (0190261)
- chore: drop gemini cli support (5203d1b)
- qol: add plans (1945a0a)
- update claude.md (72f3e56)
- refactor: add dependency injection to handlers for testability (5a88660)
- test: increase coverage from 74.6% to 79.1% (517b700)
- chore: ignore trash (fdb34b4)
- fix: current suite in db instead of file (8e7c8fd)
- chore: ignore (a4b2bcb)
- chore: update docs (4786f62)
- enh: improve stability (71cf0aa)
- feat: auto coverage badge (8a9e4e3)
- feat: auto update badge (8db545b)
- feat: enhance greatme (2495e51)
- claudecode: optimize setup (83ffe99)
- claudecode: update rules (5f18368)
- ai: update agents rules (075b1fc)
- ai: update rules (e7c2ff4)
- ai: update rules (7c2a058)
- ai: update rules (5dd89f1)
- docs: update architecture & development guide (545bf64)
- ui: overhaul, check DESIGN_*.md (4fb1624)