Repository navigation
Full list of changes: v0.1.0...v0.2.0.
Breaking changes
-
Commands moved into groups. An old name prints the new one (
moved: dokimi docs check) and exits 2:0.1.0 0.2.0 rundocs checkcomparedocs comparerepo tasks checkeval checkpersonas discovereval personas discoverpersonas approveeval personas validatequestions generateeval questions generatequestions analyzeeval questions analyzequestions refineeval questions refinequestions panel-revieweval questions reviewtasks listeval tasks listcatalog trigger-seteval triggers generateeval scoreeval score pointwiseeval pairwiseeval score pairwiseeval panel-scoreeval score paneleval checklisteval score checklisteval groundingeval score groundingeval ragaseval score ragaseval judge-validityeval judge validateeval judge-wordingeval judge wordingeval cross-judgeeval judge agreementnovelty analyzeskill novelty analyzenovelty atomsskill novelty atomsnovelty probeskill novelty probenovelty itemsskill novelty itemsnovelty shortenskill shortencatalog scancatalog checklibrary intentscatalog intentslibrary listcatalog list --kind productlibrary showcatalog show --kind productproduct listcatalog list --kind productproduct showcatalog show --kind productsubjects listcatalog list --kind subjectsubjects showcatalog show --kind subjectcontext tracetrace inspectdataset exportdata exportingest doclingdata import doclingThe bare groups
personas,questions,context,library,product,datasetandingestpoint toeval personas,eval questions,trace,catalog,catalog,data exportanddata import. -
Exit codes: 0 success; 1 a failed check, gate or run; 2 bad input or usage, with one
Error: <message>line on stderr (✗for a failedrepo--outwrite); 3 a budget stoppedtools preference(partial output kept; other commands still exit 1 on a budget stop); 5 a crash inbackends,runsortracewith--json. Most bad-input refusals move from 1 to 2. The table, and the commands that still exit 1 on some bad input (repo run,eval check), are in docs/quickstart.md. -
These now exit 1 where they exited 2:
eval score pairwisewhen every comparison failed,eval judge agreement --judgeswhen a judge scored nothing,tools preferencewhen every call failed. -
Nothing measured is no longer a pass:
tasks run,eval check,repo run,docs check --strictandeval judge wording|agreement --strictexit 1 when a planned cell errored, went unscored or is missing. -
One same-model rule covers
baseline compare, the self-judge warning andrepo compare: the provider is not part of a model's identity and a dated id matches its alias, whichbaseline compare --strictreports as not verified. -
baseline compare --strictfails on a model or provider that is missing or "Unknown";docs check --strictfails a NaN band. -
tools preferenceexits 3 when its budget stops it;novelty routingexits 1 when it scores no query. -
catalog checkexits 1 on a root with noSKILL.md, andreport generateexits 1 on an eval with no evaluations,--format jsonincluded (both exited 0);benchmark preflightexits 2 on afile:key that is missing, unreadable or empty (it printed "Preflight OK"). -
repo scanchecks the Python versions a guidance file names against the matching workflow matrix, so a scan can fail where it passed. -
Scores and verdicts are not comparable with 0.1.0; re-run baselines before comparing. A failed call, empty reply or judge failure is an error, not a score or a pass; Harbor-backed cells are graded from Harbor's
result.json;pandrepo compareintervals come from a sign-flip test on per-question deltas; reports use unrounded values over complete pairs; the no-retrieval placeholder is no longer judged unless--judge-placeholder; dockerpythonexamples and ragas 0.3 now produce scores;repo runtoken counts include subagents and helper models; skill discovery, novelty and routing measures changed. -
Output fields changed:
arms.jsondropsp_ttest,p_wilcoxonandn_wilcoxonand addsp,n_changedandci_method(older files still validate);report model-comparereplaces its t and Wilcoxon columns andt_statwith a sign-flip p column and a changed-pairs column;repo comparerows gaindelta.method, withdelta.lo/delta.hinullat 5 or fewer tasks;delta_vs_baselineis always present (nullwhen no question has both arms scored); aneval judge validatePASS covers only the context it was measured in (--context storedadded). -
Judge, persona, question-generator and validator replies cached on Bedrock, Vertex or OpenRouter are not reused (the cache key now includes the streaming flag), so those calls are paid once more.
-
On
google/google-vertex, a model namedgemini/...goes to Google AI Studio instead of Vertex; thevertex_aiprovider readsGEMINI_API_KEY(the answerer readOPENAI_API_KEY); on Bedrock an explicitapi_keywins overAWS_BEARER_TOKEN_BEDROCK. -
An
mcp:source's;id=wins over a registered product'scontext7_idinanswers,questions,arms runandbenchmark run(the registry library was queried before). -
OpenRouter output is no longer capped at 2000 tokens.
-
Novelty calls request 16384 output tokens when
--max-tokensis not given (litellm sent 4096 on Bedrock), and a reply cut at the output ceiling is an error instead of a bad parse. -
The novelty default judge is never the model under measurement; when it would be,
--judge-provider anthropicneeds--judge-model. -
novelty analyzecost totals leave out calls replayed from the response cache (counted in a newreplayed_calls), andusdisnullwhen a call returned no usage. -
Under
--provider openai, a model litellm does not know as OpenAI goes to the configured endpoint asopenai/<model>. A bare Bedrock judge name, or a--judge2equal to the first judge, exits 2. -
--provider openai-codexis removed fromanswers generate,eval questions generate,eval personas discover,evaluateandbenchmark run|preflight|batch, which could not run it. -
repo validaterefuses a task directory name with whitespace or a comma, and a task whose grader is not adokimi:grader withoutentry_points.grade. -
A task with a
network_modeother thannone,allowlistorpublic, or withallowed_hostsbut noallowlist, errors instead of running offline. -
Host subprocess examples with limits are not run where the limits cannot be applied (any limit on Windows, a memory limit on macOS), and
docs checkexits 2: use thedockerbackend, ormem_mb: nullon macOS. Thedockerbackend refuses a missing or non-positivemem_mb. -
repo runrefuses a batch whose cells came from another execution (other--tools,--delegation, profile field or harness version) or an earlier dokimi: pass--forceor a new--batch. -
backends --jsonprints acli_output.v1object with rows underdata.rowsinstead of a list;runsandtrace--jsonuse the same document. -
Python API removed:
dokimi.utils.get_llm,dokimi.utils.bedrock_litellm_model,dokimi.utils.normalize_model_ref(usedokimi.utils.same_model),dokimi.llm.ChatOpenAIanddokimi.llm.ChatAnthropic(usedokimi.llm.Invoker(dokimi.llm.LLM(model, provider, key))),dokimi.cli_flags.CANONICALandBANNED,dokimi.eval.stats.MIN_PAIRS_FOR_TEST,HAS_SCIPYindokimi.report.model_compareanddokimi.report.eval_report, and the interaction re-exports ofdokimi.eval.stats. -
Python API moved:
sign_flip_p,min_sign_flip_p,ShiftTest,sign_flip_interval,withinandALPHAfromdokimi.repos.compare*todokimi.eval.sign_flip;diagnoser.retrieval_hittodokimi.records.Record.retrieval_hit. -
Python API changed:
diagnose(context_answer, delta)takes the contextAnswerand the delta;paired_test,arm_significance,interaction_testandinteraction_significanceraiseValueErrorfor aconfidenceother than 0.95;mean_ci,flatten,load_artifactandextract_json_objectraiseValueErroron bad input;run_solverreturnsprocess.Completed; judge and panel retry warnings log underdokimi.llm.
Added
repo inspect,repo budgetandrepo skill-reach, with reach scenarios and receipts.- Codex CLI and Copilot CLI harness profiles, and
docker-claude[-host]-skill-discover:<skill>arms (the skill installed without the treatment notice). - Task
hostrequirements intask.json(min_cpus,cpu_vendors,cpu_flags): a host that misses them runs none of the task's cells;eval check --allow-unsupportedexits 0 for that case. - Reusable
.github/workflows/repo-eval.ymlworkflow (validate, scan and tasks check on a caller's checkout). repo runarmsguidance:rev:,patch:,guidance:overlay, skill arms and--delegation none.- Built-in graders
dokimi:review_replay,dokimi:review_seeds,dokimi:typecheckanddokimi:hidden_tests. repo comparejudged recall, pass^k, headroom flags and a ledger.eval coverage,eval headroom,eval redteam,eval leak,eval import,eval native-import,eval inspectandeval score reference.eval tasks generate --from graph|replay|prs.catalog checkspec, bundle, content and token-free command checks, corpus mode and--ignore;catalog trigger-probe;skill check; skill package formats.- Novelty
provenanceblock, second judge (--judge2), reversal resistance, andnovelty routing --all-vs-all,--repeatsand--estimate-only. subjects evidenceandcatalog eval --tier static.trace consistencyandtrace prefilter(rank guidance rules as ablation candidates from session logs).baseline compareopt-in gates--max-context-drop,--max-lift-dropand--min-matched.runs list,runs show,backendsanddata schema list|show; a run envelope (run_id,dokimi_version) on run artifacts, except personas, question reviews and the report's Q&A file.claude-cliprovider and multi-turn sessions inarms run.tasks runruns terminal-bench v1 tasks natively and SWE-bench rows (--swe-bench), and--network PHASE=MODE[:hosts]sets the network per phase ofdocker-*runs.- Signed releases with build provenance.
Fixed
- Most commands refuse a missing, unreadable or wrong-shape input, a device or directory given as a file, or a mistyped source with a message instead of a traceback.
- A NaN or infinite score no longer passes a gate or crashes an aggregate, and
paired_testreturns a result for finite deltas up to about 1e300. - A guidance file whose path holds a carriage return is found, and on Linux a path that is not valid UTF-8 keeps its bytes in the
guidance:overlay,guidance:noneandpatch:arms and inschema_compat, andguidance:as-skillpackages such a file (its name shown with U+FFFD). repo scanreads a root symlink to a directory as that directory.data import doclingno longer writes through a symlink.- Skill discovery skips
.git,node_modules,site-packagesand virtualenvs, so a dependency's copy of a skill is not loaded as a catalog skill. mcp:http=doc sources work with mcp 2.x.- A
novelty routing --max-usdrun stopped by its budget saves its partial result (.partial.json,status: "partial"), also under a long--outname; it wrote nothing before.
Security
- Rotate your OpenRouter key if you ran
eval questions generate --validate --provider google-vertexwithOPENROUTER_API_KEYset: the validator sent it as the Google key. - Every
docker-*step has a budget, task containers are hardened likereposcontainers, and thedockerexample backend drops every capability. - The
devextra requires pytest 9.0.3 or later; the locks pin fixed certifi, setuptools and filelock, and drop pillow, gitpython, ragas, the langchain packages and diskcache.