Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions apps/web/src/content/docs/docs/evaluation/rubrics.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,7 @@ score = sum(criterion_score / 10 * weight) / sum(total_weights)
| Verdict | Score |
|---------|-------|
| `pass` | ≥ 0.8 |
| `borderline` | ≥ 0.6 |
| `fail` | < 0.6 |
| `fail` | < 0.8 |

## Authoring Rubrics

Expand Down
2 changes: 1 addition & 1 deletion apps/web/src/content/docs/docs/guides/human-review.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ The `feedback.json` file is a structured annotation of a single eval run. It rec
{
"test_id": "test-feature-alpha",
"verdict": "acceptable",
"notes": "Score is borderline (0.72) but behavior is correct — the grader penalized for different phrasing."
"notes": "Score is low (0.72) but behavior is correct — the grader penalized for different phrasing."
},
{
"test_id": "test-retrieval-basic",
Expand Down
2 changes: 0 additions & 2 deletions examples/features/composite/scripts/safety-gate-aggregator.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,6 @@ try {

if (finalScore >= 0.8) {
verdict = 'pass';
} else if (finalScore >= 0.6) {
verdict = 'borderline';
} else {
verdict = 'fail';
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{"timestamp":"2026-02-20T21:38:57.573Z","test_id":"metrics-001","dataset":"dataset-confusion-metrics","score":1,"target":"mock_extractor","scores":[{"name":"header_confusion","type":"code-grader","score":1,"weight":1,"verdict":"pass","details":{"metrics":{"invoice_number":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"invoice_date":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"currency":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"supplier.name":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"importer.name":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"gross_total":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1}},"summary":{"total_tp":6,"total_tn":0,"total_fp":0,"total_fn":0,"macro_precision":1,"macro_recall":1,"macro_f1":1}},"assertions":[{"text":"invoice_number: TP (correct non-empty)","passed":true,"evidence":"TP=6 TN=0 FP=0 FN=0, macro-F1=1.000"},{"text":"invoice_date: TP (correct non-empty)","passed":true},{"text":"currency: TP (correct non-empty)","passed":true},{"text":"supplier.name: TP (correct non-empty)","passed":true},{"text":"importer.name: TP (correct non-empty)","passed":true},{"text":"gross_total: TP (correct non-empty)","passed":true}]}],"assertions":[{"text":"invoice_number: TP (correct non-empty)","passed":true,"evidence":"header_confusion: TP=6 TN=0 FP=0 FN=0, macro-F1=1.000"},{"text":"invoice_date: TP (correct non-empty)","passed":true},{"text":"currency: TP (correct non-empty)","passed":true},{"text":"supplier.name: TP (correct non-empty)","passed":true},{"text":"importer.name: TP (correct non-empty)","passed":true},{"text":"gross_total: TP (correct non-empty)","passed":true}]}
{"timestamp":"2026-02-20T21:38:57.582Z","test_id":"metrics-003","dataset":"dataset-confusion-metrics","score":0.6666666666666666,"target":"mock_extractor","scores":[{"name":"header_confusion","type":"code-grader","score":0.6666666666666666,"weight":1,"verdict":"borderline","details":{"metrics":{"invoice_number":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"invoice_date":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"currency":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"supplier.name":{"tp":0,"tn":0,"fp":1,"fn":1,"precision":0,"recall":0},"importer.name":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"gross_total":{"tp":0,"tn":0,"fp":1,"fn":1,"precision":0,"recall":0}},"summary":{"total_tp":4,"total_tn":0,"total_fp":2,"total_fn":2,"macro_precision":0.6666666666666666,"macro_recall":0.6666666666666666,"macro_f1":0.6666666666666666}},"assertions":[{"text":"invoice_number: TP (correct non-empty)","passed":true,"evidence":"TP=4 TN=0 FP=2 FN=2, macro-F1=0.667"},{"text":"invoice_date: TP (correct non-empty)","passed":true},{"text":"currency: TP (correct non-empty)","passed":true},{"text":"importer.name: TP (correct non-empty)","passed":true},{"text":"supplier.name: FP+FN (wrong value)","passed":false},{"text":"gross_total: FP+FN (wrong value)","passed":false}]}],"assertions":[{"text":"invoice_number: TP (correct non-empty)","passed":true,"evidence":"header_confusion: TP=4 TN=0 FP=2 FN=2, macro-F1=0.667"},{"text":"invoice_date: TP (correct non-empty)","passed":true},{"text":"currency: TP (correct non-empty)","passed":true},{"text":"importer.name: TP (correct non-empty)","passed":true},{"text":"supplier.name: FP+FN (wrong value)","passed":false},{"text":"gross_total: FP+FN (wrong value)","passed":false}]}
{"timestamp":"2026-02-20T21:38:57.582Z","test_id":"metrics-003","dataset":"dataset-confusion-metrics","score":0.6666666666666666,"target":"mock_extractor","scores":[{"name":"header_confusion","type":"code-grader","score":0.6666666666666666,"weight":1,"verdict":"fail","details":{"metrics":{"invoice_number":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"invoice_date":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"currency":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"supplier.name":{"tp":0,"tn":0,"fp":1,"fn":1,"precision":0,"recall":0},"importer.name":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"gross_total":{"tp":0,"tn":0,"fp":1,"fn":1,"precision":0,"recall":0}},"summary":{"total_tp":4,"total_tn":0,"total_fp":2,"total_fn":2,"macro_precision":0.6666666666666666,"macro_recall":0.6666666666666666,"macro_f1":0.6666666666666666}},"assertions":[{"text":"invoice_number: TP (correct non-empty)","passed":true,"evidence":"TP=4 TN=0 FP=2 FN=2, macro-F1=0.667"},{"text":"invoice_date: TP (correct non-empty)","passed":true},{"text":"currency: TP (correct non-empty)","passed":true},{"text":"importer.name: TP (correct non-empty)","passed":true},{"text":"supplier.name: FP+FN (wrong value)","passed":false},{"text":"gross_total: FP+FN (wrong value)","passed":false}]}],"assertions":[{"text":"invoice_number: TP (correct non-empty)","passed":true,"evidence":"header_confusion: TP=4 TN=0 FP=2 FN=2, macro-F1=0.667"},{"text":"invoice_date: TP (correct non-empty)","passed":true},{"text":"currency: TP (correct non-empty)","passed":true},{"text":"importer.name: TP (correct non-empty)","passed":true},{"text":"supplier.name: FP+FN (wrong value)","passed":false},{"text":"gross_total: FP+FN (wrong value)","passed":false}]}
{"timestamp":"2026-02-20T21:38:57.588Z","test_id":"metrics-002","dataset":"dataset-confusion-metrics","score":0.8333333333333334,"target":"mock_extractor","scores":[{"name":"header_confusion","type":"code-grader","score":0.8333333333333334,"weight":1,"verdict":"pass","details":{"metrics":{"invoice_number":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"invoice_date":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"currency":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"supplier.name":{"tp":0,"tn":0,"fp":1,"fn":1,"precision":0,"recall":0},"importer.name":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"gross_total":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1}},"summary":{"total_tp":5,"total_tn":0,"total_fp":1,"total_fn":1,"macro_precision":0.8333333333333334,"macro_recall":0.8333333333333334,"macro_f1":0.8333333333333334}},"assertions":[{"text":"invoice_number: TP (correct non-empty)","passed":true,"evidence":"TP=5 TN=0 FP=1 FN=1, macro-F1=0.833"},{"text":"invoice_date: TP (correct non-empty)","passed":true},{"text":"currency: TP (correct non-empty)","passed":true},{"text":"importer.name: TP (correct non-empty)","passed":true},{"text":"gross_total: TP (correct non-empty)","passed":true},{"text":"supplier.name: FP+FN (wrong value)","passed":false}]}],"assertions":[{"text":"invoice_number: TP (correct non-empty)","passed":true,"evidence":"header_confusion: TP=5 TN=0 FP=1 FN=1, macro-F1=0.833"},{"text":"invoice_date: TP (correct non-empty)","passed":true},{"text":"currency: TP (correct non-empty)","passed":true},{"text":"importer.name: TP (correct non-empty)","passed":true},{"text":"gross_total: TP (correct non-empty)","passed":true},{"text":"supplier.name: FP+FN (wrong value)","passed":false}]}
{"timestamp":"2026-02-20T21:38:57.641Z","test_id":"metrics-004","dataset":"dataset-confusion-metrics","score":0.6666666666666666,"target":"mock_extractor","scores":[{"name":"header_confusion","type":"code-grader","score":0.6666666666666666,"weight":1,"verdict":"borderline","details":{"metrics":{"invoice_number":{"tp":0,"tn":0,"fp":0,"fn":1,"recall":0},"invoice_date":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"currency":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"supplier.name":{"tp":0,"tn":0,"fp":1,"fn":1,"precision":0,"recall":0},"importer.name":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"gross_total":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1}},"summary":{"total_tp":4,"total_tn":0,"total_fp":1,"total_fn":2,"macro_precision":0.8,"macro_recall":0.6666666666666666,"macro_f1":0.6666666666666666}},"assertions":[{"text":"invoice_date: TP (correct non-empty)","passed":true,"evidence":"TP=4 TN=0 FP=1 FN=2, macro-F1=0.667"},{"text":"currency: TP (correct non-empty)","passed":true},{"text":"importer.name: TP (correct non-empty)","passed":true},{"text":"gross_total: TP (correct non-empty)","passed":true},{"text":"invoice_number: FN (missing)","passed":false},{"text":"supplier.name: FP+FN (wrong value)","passed":false}]}],"assertions":[{"text":"invoice_date: TP (correct non-empty)","passed":true,"evidence":"header_confusion: TP=4 TN=0 FP=1 FN=2, macro-F1=0.667"},{"text":"currency: TP (correct non-empty)","passed":true},{"text":"importer.name: TP (correct non-empty)","passed":true},{"text":"gross_total: TP (correct non-empty)","passed":true},{"text":"invoice_number: FN (missing)","passed":false},{"text":"supplier.name: FP+FN (wrong value)","passed":false}]}
{"timestamp":"2026-02-20T21:38:57.641Z","test_id":"metrics-004","dataset":"dataset-confusion-metrics","score":0.6666666666666666,"target":"mock_extractor","scores":[{"name":"header_confusion","type":"code-grader","score":0.6666666666666666,"weight":1,"verdict":"fail","details":{"metrics":{"invoice_number":{"tp":0,"tn":0,"fp":0,"fn":1,"recall":0},"invoice_date":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"currency":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"supplier.name":{"tp":0,"tn":0,"fp":1,"fn":1,"precision":0,"recall":0},"importer.name":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"gross_total":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1}},"summary":{"total_tp":4,"total_tn":0,"total_fp":1,"total_fn":2,"macro_precision":0.8,"macro_recall":0.6666666666666666,"macro_f1":0.6666666666666666}},"assertions":[{"text":"invoice_date: TP (correct non-empty)","passed":true,"evidence":"TP=4 TN=0 FP=1 FN=2, macro-F1=0.667"},{"text":"currency: TP (correct non-empty)","passed":true},{"text":"importer.name: TP (correct non-empty)","passed":true},{"text":"gross_total: TP (correct non-empty)","passed":true},{"text":"invoice_number: FN (missing)","passed":false},{"text":"supplier.name: FP+FN (wrong value)","passed":false}]}],"assertions":[{"text":"invoice_date: TP (correct non-empty)","passed":true,"evidence":"header_confusion: TP=4 TN=0 FP=1 FN=2, macro-F1=0.667"},{"text":"currency: TP (correct non-empty)","passed":true},{"text":"importer.name: TP (correct non-empty)","passed":true},{"text":"gross_total: TP (correct non-empty)","passed":true},{"text":"invoice_number: FN (missing)","passed":false},{"text":"supplier.name: FP+FN (wrong value)","passed":false}]}
{"timestamp":"2026-02-20T21:38:57.649Z","test_id":"metrics-005","dataset":"dataset-confusion-metrics","score":0.5,"target":"mock_extractor","scores":[{"name":"header_confusion","type":"code-grader","score":0.5,"weight":1,"verdict":"fail","details":{"metrics":{"invoice_number":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"invoice_date":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"currency":{"tp":0,"tn":0,"fp":1,"fn":1,"precision":0,"recall":0},"supplier.name":{"tp":0,"tn":0,"fp":1,"fn":1,"precision":0,"recall":0},"importer.name":{"tp":1,"tn":0,"fp":0,"fn":0,"precision":1,"recall":1,"f1":1},"gross_total":{"tp":0,"tn":0,"fp":0,"fn":1,"recall":0}},"summary":{"total_tp":3,"total_tn":0,"total_fp":2,"total_fn":3,"macro_precision":0.6,"macro_recall":0.5,"macro_f1":0.5}},"assertions":[{"text":"invoice_number: TP (correct non-empty)","passed":true,"evidence":"TP=3 TN=0 FP=2 FN=3, macro-F1=0.500"},{"text":"invoice_date: TP (correct non-empty)","passed":true},{"text":"importer.name: TP (correct non-empty)","passed":true},{"text":"currency: FP+FN (wrong value)","passed":false},{"text":"supplier.name: FP+FN (wrong value)","passed":false},{"text":"gross_total: FN (missing)","passed":false}]}],"assertions":[{"text":"invoice_number: TP (correct non-empty)","passed":true,"evidence":"header_confusion: TP=3 TN=0 FP=2 FN=3, macro-F1=0.500"},{"text":"invoice_date: TP (correct non-empty)","passed":true},{"text":"importer.name: TP (correct non-empty)","passed":true},{"text":"currency: FP+FN (wrong value)","passed":false},{"text":"supplier.name: FP+FN (wrong value)","passed":false},{"text":"gross_total: FN (missing)","passed":false}]}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
{"timestamp":"2026-02-20T21:40:23.520Z","test_id":"exact-auth-flow","dataset":"dataset","score":1,"target":"mock_agent","scores":[{"name":"auth-sequence-exact","type":"tool-trajectory","score":1,"weight":1,"verdict":"pass","assertions":[{"text":"Position 0: checkCredentials","passed":true},{"text":"Position 1: generateToken","passed":true},{"text":"Position 2: auditLog","passed":true}]}],"assertions":[{"text":"Position 0: checkCredentials","passed":true},{"text":"Position 1: generateToken","passed":true},{"text":"Position 2: auditLog","passed":true}]}
{"timestamp":"2026-02-20T21:40:23.526Z","test_id":"in-order-pass","dataset":"dataset","score":1,"target":"mock_agent","scores":[{"name":"workflow-sequence","type":"tool-trajectory","score":1,"weight":1,"verdict":"pass","assertions":[{"text":"Found fetchData at position 0","passed":true},{"text":"Found validateSchema at position 1","passed":true},{"text":"Found transformData at position 2","passed":true},{"text":"Found saveResults at position 3","passed":true}]}],"assertions":[{"text":"Found fetchData at position 0","passed":true},{"text":"Found validateSchema at position 1","passed":true},{"text":"Found transformData at position 2","passed":true},{"text":"Found saveResults at position 3","passed":true}]}
{"timestamp":"2026-02-20T21:40:23.569Z","test_id":"metrics-check","dataset":"dataset","score":1,"target":"mock_agent","scores":[{"name":"metrics-tools","type":"tool-trajectory","score":1,"weight":1,"verdict":"pass","assertions":[{"text":"getCpuMetrics: called 1 times (required \u22651)","passed":true},{"text":"getMemoryMetrics: called 1 times (required \u22651)","passed":true}]}],"assertions":[{"text":"getCpuMetrics: called 1 times (required \u22651)","passed":true},{"text":"getMemoryMetrics: called 1 times (required \u22651)","passed":true}]}
{"timestamp":"2026-02-20T21:40:23.579Z","test_id":"partial-match","dataset":"dataset","score":0.6666666666666666,"target":"mock_agent","scores":[{"name":"tool-check","type":"tool-trajectory","score":0.6666666666666666,"weight":1,"verdict":"borderline","assertions":[{"text":"knowledgeSearch: called 2 times (required \u22651)","passed":true},{"text":"documentRetrieve: called 1 times (required \u22651)","passed":true},{"text":"generateReport: called 0 times (required \u22651)","passed":false}]}],"assertions":[{"text":"knowledgeSearch: called 2 times (required \u22651)","passed":true},{"text":"documentRetrieve: called 1 times (required \u22651)","passed":true},{"text":"generateReport: called 0 times (required \u22651)","passed":false}]}
{"timestamp":"2026-02-20T21:40:23.579Z","test_id":"partial-match","dataset":"dataset","score":0.6666666666666666,"target":"mock_agent","scores":[{"name":"tool-check","type":"tool-trajectory","score":0.6666666666666666,"weight":1,"verdict":"fail","assertions":[{"text":"knowledgeSearch: called 2 times (required \u22651)","passed":true},{"text":"documentRetrieve: called 1 times (required \u22651)","passed":true},{"text":"generateReport: called 0 times (required \u22651)","passed":false}]}],"assertions":[{"text":"knowledgeSearch: called 2 times (required \u22651)","passed":true},{"text":"documentRetrieve: called 1 times (required \u22651)","passed":true},{"text":"generateReport: called 0 times (required \u22651)","passed":false}]}
{"timestamp":"2026-02-20T21:40:23.599Z","test_id":"exact-args-match","dataset":"dataset","score":1,"target":"mock_agent","scores":[{"name":"arg-validation","type":"tool-trajectory","score":1,"weight":1,"verdict":"pass","assertions":[{"text":"Found search at position 0","passed":true},{"text":"Found get_weather at position 1","passed":true}]}],"assertions":[{"text":"Found search at position 0","passed":true},{"text":"Found get_weather at position 1","passed":true}]}
{"timestamp":"2026-02-20T21:40:23.624Z","test_id":"skip-args-validation","dataset":"dataset","score":1,"target":"mock_agent","scores":[{"name":"workflow-sequence-only","type":"tool-trajectory","score":1,"weight":1,"verdict":"pass","assertions":[{"text":"Found load_data at position 0","passed":true},{"text":"Found transform at position 1","passed":true},{"text":"Found save_data at position 2","passed":true}]}],"assertions":[{"text":"Found load_data at position 0","passed":true},{"text":"Found transform at position 1","passed":true},{"text":"Found save_data at position 2","passed":true}]}
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ index fcc60ea..e183d5c 100644
+| `evalId` | `string` | Test ID |
| `dataset` | `string` | EVAL name |
| `score` | `number` | Final score (0-1) |
| `verdict` | `string` | pass / borderline / fail |
| `verdict` | `string` | pass / fail |
@@ -135,7 +135,7 @@ cat results.jsonl | jq -s 'group_by(.verdict) | map({verdict: .[0].verdict, coun
# Average score
cat results.jsonl | jq -s 'map(.score) | add / length'
Expand Down Expand Up @@ -1045,7 +1045,7 @@ index b5737e7..0791c70 100644
-| [Case Schema](/specification/evalcase-schema/) | Within EVAL.yaml | Individual test case definition |
+| [Test Schema](/specification/case-schema/) | Within EVAL.yaml | Individual test definition |
| [Evaluators](/specification/evaluators/) | Referenced | Assessment components |
| [Verdicts](/specification/verdicts/) | Results | Pass/borderline/fail determination |
| [Verdicts](/specification/verdicts/) | Results | Pass/fail determination |
| [Organization](/specification/organization/) | Directory | File organization patterns |
@@ -46,7 +46,7 @@ execution:
type: llm_judge
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -521,7 +521,7 @@ index 10e7a1c..fcc60ea 100644
+| `evalId` | `string` | Case ID |
| `dataset` | `string` | EVAL name |
| `score` | `number` | Final score (0-1) |
| `verdict` | `string` | pass / borderline / fail |
| `verdict` | `string` | pass / fail |
diff --git a/docs/src/content/docs/integration/targets.mdx b/docs/src/content/docs/integration/targets.mdx
index 68218db..9699aeb 100644
--- a/docs/src/content/docs/integration/targets.mdx
Expand Down Expand Up @@ -1172,7 +1172,7 @@ index 1ae8b33..b5737e7 100644
-| [Evalcase Schema](/specification/evalcase-schema/) | Within EVAL.yaml | Individual test case definition |
+| [Case Schema](/specification/evalcase-schema/) | Within EVAL.yaml | Individual test case definition |
| [Evaluators](/specification/evaluators/) | Referenced | Assessment components |
| [Verdicts](/specification/verdicts/) | Results | Pass/borderline/fail determination |
| [Verdicts](/specification/verdicts/) | Results | Pass/fail determination |
| [Organization](/specification/organization/) | Directory | File organization patterns |
@@ -46,9 +46,9 @@ execution:
type: llm_judge
Expand Down
2 changes: 1 addition & 1 deletion examples/showcase/evaluator-conformance/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ The harness runs an evaluator N times against a labeled fixture dataset:

It then computes per-fixture metrics:

- **Flip rate** — fraction of runs where the verdict (pass/borderline/fail) differs from the first run
- **Flip rate** — fraction of runs where the verdict (pass/fail) differs from the first run
- **Mean / Variance** — statistical summary of scores across runs
- **Bound violations** — scores outside the expected range for ambiguous fixtures

Expand Down
Loading
Loading