Skip to content

v0.7.0

Choose a tag to compare

@ajaysurya1221 ajaysurya1221 released this 05 Oct 06:54
· 265 commits to main since this release
a3e1625

v0.7.0 (2026-10-05)

  • Calibration audit of the decision model (2026-10-03): bench/jev_calibration/ is a
    pre-registered audit of jev-1.13.0 on CLINC150 (4,500 in-scope + 1,000 out-of-scope) and
    Banking77 (3,080), three passes each plus a bundling check, 26,140 requests, about USD 4.6
    at list price. PROTOCOL.md (hash posted on PR #2 before the first request) fixes the
    questions, passes, measures and seven expectations; run.py seals every answer in a
    hash-chained store; metrics.py (exact binomial intervals, ECE/MCE/Brier/log loss,
    tie-aware AUROC and average precision, bootstrap, agreement) is unit tested; analyze.py
    verifies the chains and writes metrics.json, report.md, reliability diagrams and a
    self-verifying compact store from which every number re-derives. All seven expectations
    met: zero-shot accuracy 0.921 [0.912, 0.928] on CLINC150 (a supervised TF-IDF+LR trained on
    15,000 examples: 0.925) with ECE 0.024; 0.801 on Banking77 with ECE 0.084 and mid-range
    over-confidence; 0.970 accuracy at confidence >= 0.9 on 83% coverage; out-of-scope AUROC
    0.977 (yes/no question) against 0.911 from 1 - p_max; 99.4% repeat agreement; p50 322 ms.
    Write-up: docs/results/jev-calibration/README.md.
  • Added: examples/jev_triage_agent/experiment.py builds live manifests
    (live_manifest, decisions.upstream = "http", pinned model, paced trial starts, prior
    runs) and writes them from the command line
    (python -m examples.jev_triage_agent.experiment --out manifest.json), so the day-one
    sequence in docs/design/0004-day-one.md runs from files. examples/jev_triage_agent/day_one.sh
    drives it end to end: preflight, the clean pair, the N=50 trio, the Node agent through the
    official SDK, the pre-registered N=200 run, and a minimised, replayed failure, with a gate
    report per run and a refusal to finish if the key appears in any output. Results:
    docs/results/jev/.
  • Run against Jev (2026-10-03): the pre-registered day one ran end to end against
    https://api.typesafe.ai with jev-1.13.0 pinned. A vs B under decision_low_confidence at
    N=200: 200/200 vs 0/200, bounds [-1.000, -0.957], BLOCK; A vs A and A vs C PASS at N=50; the
    Node agent through the unchanged official SDK BLOCK; the minimised failure replays REPRODUCED;
    an exploratory clean run at N=50 routed all 100 decisions correctly at confidence 1.0. 902
    recorded decisions, about USD 0.018 at list price. Sealed stores, the preflight receipt, the
    invalid first attempt and one write-up per run: docs/results/jev/; every decision.json
    re-derives from its committed trials.jsonl. Findings: docs/DECISIONS.md, "What day one
    found".
  • Added: arci preflight --allow-unlisted-model. The account's GET /v1/models lists only
    the aliases jev-latest and jev-preview, so the pre-registered preflight exits 2 on a pinned
    versioned id. With the flag, preflight prints the listed names, sends the smoke request, and
    exits 0 only if the validated response reports exactly the pinned id (3 otherwise). Without the
    flag nothing changes except a hint after the exit-2 message. Tests:
    tests/unit/cli/test_preflight_unlisted_model.py.
  • Added: ARCI_HTTPS_PROXY=http://host:port makes the decision upstream sender tunnel through
    an HTTP CONNECT proxy, for environments whose only egress is such a proxy; unset, the direct
    connection is unchanged, and a malformed value is a transport error. Tests:
    tests/unit/decisions/test_upstream_proxy.py.
  • Fixed: the three preflight smoke questions carry instructions; the vendor rejects a
    question with neither instructions nor criteria (400), so the pre-registered smoke request
    could not be accepted as written.
  • Fixed: examples/jev_triage_agent/day_one.sh puts the repository root on PYTHONPATH
    (the manifests name examples.jev_triage_agent.* modules, invisible to the arci console
    script), insists on running from the repository root, and stops with exit 4 unless both arms of
    the N=1 clean pair PASS, so a harness fault that breaks both arms equally cannot be mistaken
    for a measurement.
  • Fixed: two reader threads, the grader's response reader and the MCP boundary's frame
    reader, could end a read on a "not ready" poll verdict computed before the child wrote and
    before the parent asked them to stop. On a loaded machine the thread was descheduled across
    the child's exit, the stale verdict dropped the whole response, and the trial ended ERROR
    (grader returned invalid output, or boundary exited before returning for command agents)
    at about 1 trial in 400 with 8 workers on 4 cores, which is enough to turn a 200-per-arm
    experiment into an ERROR verdict on a busy CI runner. The worker reader already followed
    the correct rule; both readers now snapshot the stop flag before polling, and only a poll
    made after the stop was observed may end the read. Regression tests:
    tests/unit/runner/test_reader_stop_race.py.