Skip to content

v3.0.0 — The region field

Choose a tag to compare

@sanlee-ys sanlee-ys released this 18 Jul 14:13
· 122 commits to main since this release
d5ccb7c

Milestone: the region field (ADR-014). The roadmap's planned breaking change: output becomes {category, operational_domain, region} — six labels (indo-pacific, europe, middle-east, africa, americas, global), with global as the single catch-all for no-anchor and multi-region stories, mirroring multi on the domain axis.

The numbers (n=54, human answer key — evals/gold_eval_v3.txt)

Axis Accuracy Judge vs human
Category 92.6% 92.6%
Operational domain 92.6% 98.1%
Region 87.0% 100.0%

The 100.0% judge-vs-human region agreement clears ADR-014's gate for the scaled (n=300) region eval in a future v3.1.0. The region misses are one named cluster: all seven are gold=global rows the model pulled to a specific region — it infers a theater from the US actor where the rubric's no-guessing rule says no anchor (evals/gold_confusion_v3.md names every row).

How the gold labels earned trust

The 54-row gold set gained a hand-labeled region column, owner-reviewed row by row — and then every label on all three axes was adversarially verified against each snippet's source article (one verifier per row, adversarial skeptics on challenges, a cross-row consistency audit). Category and domain survived 108/108; region took two review corrections before anything was measured against it. The labeling conventions are recorded in data/gold/README.md.

Also in this release

  • Measured CI floors for regionregion_accuracy 0.78, judge_region_agreement 0.93, both derived from the live run (never aspirational); the gate now grades all eight floors against the committed v3 snapshot. Deliberately no region macro-F1 floor (europe support is n=1).
  • Frozen v2 records — all v3 eval outputs use new _v3 filenames; the v2 snapshots behind the published two-axis numbers are never regenerated.
  • Live-pass hardening — the strict-mode guarantee blipped three times in the wild (the API returned a tool input missing required fields despite strict: true; identical replays were clean), so the eval harness retries transient InvalidLabelErrors with bounded backoff, and interrupted runs now print a PARTIAL RUN banner instead of clean-looking fractional results.

Breaking-change note for integrators: the /classify response now carries a required region field, and the SYS-004 contract literals moved with it.

Full detail: CHANGELOG 3.0.0