0.1.0 said the contradiction check was SMT-backed. 0.1.1 is the release where that became true.
Today we released OxigenAI 0.1.1 — the release that replaces a discriminant-based contradiction heuristic with genuine OxiZ SMT satisfiability checking, extends the platform from one jurisdiction to three, and ships two entirely new capabilities: judgment prediction and offline translation verification.
No C. No C++. No Fortran. No Z3. OxigenAI’s contradiction detector runs on OxiZ, COOLJAPAN’s Pure Rust SMT solver, reached through legalis-verifier’s smt-solver feature — and as of 0.1.1, verifier/contradiction.rs actually calls SmtVerifier::is_satisfiable instead of approximating the answer with a discriminant-based heuristic. It still compiles to one static oxigenai binary serving both the HTTP API and the full CLI, and now it speaks for Japan, the United States, and the European Union instead of Japan alone.
Why OxigenAI 0.1.1 is a game changer
The Digital Agency’s GenAI (源内) — the Python / Vertex AI / BigQuery system OxigenAI reimplements — is built for one jurisdiction and one mode of trust:
- Its reports are fluent, but nothing in the pipeline formally checks a “no contradiction” claim — it’s the LLM’s word.
- It’s Japan-only: there’s no notion of a US or EU statute anywhere in the system.
- It cannot predict how a court is likely to rule — that’s outside its scope entirely.
- It has no way to check that a statute and its official translation preserve the same legal meaning.
OxigenAI 0.1.1 ends all of that.
- Contradiction detection is now real SMT, not a proxy for it.
SmtVerifier::is_satisfiablereplaces the old discriminant-based heuristic incontradiction.rs, and restored ID-collision, jurisdictional-overlap, and temporal-conflict checks (faithfully ported fromlegalis-verifier’s own heuristics) run alongside it. - Three jurisdictions, one API. A new
MultiJurisdictionMatcherregistry adds EU (GDPR Art. 6/7/15/17/33) and US (FLSA §§206–207, ADA §12112, FMLA §2612) statute sets next to Japan’s.-j/--jurisdiction(defaultJP) selects it on five CLI subcommands,POST /accepts ajurisdictionfield, andGET /jurisdictionslists what’s registered. POST /predict-ruling— Generative Jurisprudence. Searches a curated corpus of 8 real Japanese landmark precedents across labor, constitutional, and civil/privacy law, ranks them by relevance × precedent authority, then combines Gemini web-grounded retrieval with a temperature-0 deterministic synthesis pass to produce a predicted holding and precedent-grounded reasoning — always classifiedLegalResult::JudicialDiscretion, never dressed up as certainty.POST /translate-check— offline and language-agnostic. Compiles a statute and its translation to Legalis DSL from their respective e-Gov XML and structurally compares the resulting statute sets (effect-type multiset, recursive precondition-kind multiset, weighted Sørensen–Dice score) — no machine translation, no network call, no GCP dependency at all.- Two real correctness bugs fixed, not just features added.
/formalizepreviously reported everyCustom-conditioned precondition as triviallyDeterministicregardless of the submitted facts; it now runsCondition::evaluateper precondition and reportsJudicialDiscretionwhen a condition is genuinely qualitative./simulate’sprofilefield was accepted but silently ignored — every simulation ran on the Japanese demographic profile no matter what was requested. - JP statute coverage broadened well past labor law — Civil Code general and tort provisions (公序良俗 Art. 90, 債務不履行 Art. 415, 解除 Art. 541), the Companies Act, the Constitution, the Copyright and Patent Acts, environmental law, the Administrative Procedure Act, and Construction Business/Real Estate Brokerage Law are now instantly resolved by
JpDomainMatcherwith no Gemini call.
Technical Deep Dive: four layers, three jurisdictions
- Verification core (
verifier/contradiction.rs,verifier/jurisdiction.rs). Selected provisions go throughSmtVerifier::is_satisfiable(OxiZ, vialegalis-verifier’ssmt-solverfeature) for genuine joint-satisfiability checking, alongside the restored ID-collision, jurisdictional-overlap, and temporal-conflict heuristics.verifier/jp_statutes.rs,verifier/eu_statutes.rs, andverifier/us_statutes.rshold the seed statute sets that theMultiJurisdictionMatcherregistry dispatches across — and this release converted their numeric and categorical preconditions from free-textCondition::Customto structured, SMT-visibleThreshold/Duration/AttributeEquals/SetMembershipvariants, since an SMT solver can only reason about what it can actually parse. Genuinely open-textured standards (constitutional balancing, fair use, public-policy clauses) were deliberately left asCustom. - Generative Jurisprudence (
verifier/jurisprudence.rs,handlers/predict.rs). The 8-precedent curated corpus is searched and ranked by relevance × precedent authority, then handed to a two-call Gemini pipeline — web-grounded retrieval, then temperature-0 synthesis — before the result is classified throughlegalis-core::LegalResult<T>. - Translation verification (
verifier/translate_check.rs,handlers/translate.rs). Both XML documents compile to Legalis DSL independently, and the comparison — statute count, effect-type multiset, recursive precondition-kind multiset, combined into a weighted Sørensen–Dice score — runs entirely offline, with no LLM or network call anywhere in the path. - Pipeline & handlers (
services/pipeline.rs,handlers/report.rs,handlers/simulate.rs,handlers/formalize.rs,handlers/jurisdictions.rs). The existing law-name-inference → BigQuery-retrieval → verification →LegalResult<T>classification → report-generation pipeline now threads an optionaljurisdictionfield end to end onPOST /, and the newhandlers/jurisdictions.rsbacks theGET /jurisdictionsdiscovery endpoint.
Five new criterion benchmarks (benches/domain_matching.rs, dsl_compile.rs, contradiction_smt.rs, simulation.rs, jurisprudence.rs) now cover these hot paths directly, run via cargo bench.
Getting Started
cargo install oxigenai
Query a new jurisdiction directly from the CLI:
# EU query — pulls from the new GDPR statute set instead of Japanese law
oxigenai "What is the lawful basis for processing personal data under GDPR?" -j EU
# predicted ruling (Generative Jurisprudence)
oxigenai predict "5年勤続の有期社員を経営不振で解雇できるか" --facts "解雇回避努力なし"
# statute vs. translation consistency check — fully offline, no GCP needed
oxigenai translate-check --source ja.xml --target en.xml
Or hit the HTTP API directly:
PORT=8080 oxigenai serve
curl -s -X POST http://localhost:8080/ \
-H 'Content-Type: application/json' \
-d '{"inputs":{"input_text":"What counts as overtime under the FLSA?"},"jurisdiction":"US"}'
curl -s http://localhost:8080/jurisdictions
What’s New in 0.1.1
- Real OxiZ SMT-backed contradiction detection (
SmtVerifier::is_satisfiable) replaces the old discriminant-based heuristic, alongside restored ID-collision, jurisdictional-overlap, and temporal-conflict detection. - Multi-jurisdiction support:
MultiJurisdictionMatcherregistry, EU and US seed statute sets,-j/--jurisdictionCLI flag across five subcommands, an optionaljurisdictionfield onPOST /, and a newGET /jurisdictionsdiscovery endpoint. - New
POST /predict-ruling/oxigenai predict(aliaspred) — Generative Jurisprudence over 8 real landmark precedents. - New
POST /translate-check/oxigenai translate-check(aliastxcheck) — fully offline structural translation verification. /simulategains selectable demographic profiles (jp_2024/us_2024/eu_2024); all three now sample aweekly_hoursattribute, enabling hours-based preconditions like FLSA overtime to simulate correctly.- Expanded JP statute coverage: Civil Code, Companies Act, the Constitution, Copyright/Patent Acts, environmental law, the Administrative Procedure Act, and Construction Business/Real Estate Brokerage Law.
- New self-contained WebUI (
static/index.html, embedded at compile time) atGET //GET /ui— no external CDN, works air-gapped. - New criterion benchmark suite covering domain matching, DSL compilation, SMT contradiction detection, simulation, and precedent ranking.
- Fixed:
/formalizeno longer misreportsCustom-conditioned or evaluation-error preconditions asDeterministic/Void. - Fixed:
/simulate’sprofileparameter is no longer silently ignored. - Dependencies: Legalis-RS crates (
legalis-core/legalis-verifier/legalis-sim/legalis-dsl/legalis-jp) 0.1.5 → 0.1.6,tower-http→ 0.7,google-cloud-auth→ 1.13,reqwest→ 0.13 (rustls-platform-verifiernow handles OS-native certificate verification); unusedmockall/tokio-testdev-dependencies removed —criterionis now the only one;Cargo.lockis tracked in git for the first time. - Security:
cargo auditflags two HIGH-severity RUSTSEC advisories in transitive dependencyquick-xml 0.40.1(pulled in vialegalis-core/legalis-jp0.1.6). A[patch.crates-io]override was attempted and confirmed not to work under Cargo’s SemVer contract enforcement; the real fix needs upstream Legalis-RS 0.1.7, which already contains it, unpublished — tracked openly rather than hidden.
Tips
- Add
-j EUor-j USto any of the five CLI subcommands (query,compile,simulate,formalize,predict) to switch jurisdictions — it defaults toJPif you omit it. On the HTTP side, onlyPOST /currently accepts ajurisdictionfield;/compile,/simulate,/formalize, and/predict-rulingremain JP-only for now. - Call
GET /jurisdictionsbefore assuming a jurisdiction is populated. It returns the registered codes, display names, and whether each is populated, plus the default — cheaper than guessing wrong and getting an empty result set. - Pass
--profile us_2024or--profile eu_2024tooxigenai simulateto run policy simulations against US or EU demographic models instead of Japan’s census-based one; unknown profile names are now rejected outright instead of silently falling back to Japan. - Prefer structured conditions over
Customwhen authoring new seed statutes. OnlyThreshold/Duration/AttributeEquals/SetMembershipconditions are visible to the OxiZ SMT solver (enabled by buildinglegalis-verifierwith itssmt-solverfeature) — reserveCustomfor genuinely open-textured standards like constitutional balancing or fair use, the way this release’s own US/EU/JP seed-statute conversion did. - Treat
/predict-rulingoutput asJudicialDiscretion, always. It’s classified that way by design — a predicted holding is precedent-grounded reasoning, not a deterministic legal conclusion, and the API never claims otherwise. - Run
oxigenai translate-checkbefore trusting a bilingual statute pair. It needs no GCP credentials and no network access — just two e-Gov XML files — so it’s safe to run in CI or fully air-gapped environments to catch translation drift early.
This is the foundation
OxigenAI 0.1.1 goes deeper into the Legalis-RS stack it was already built on — legalis-core, legalis-verifier, legalis-dsl, legalis-sim, and legalis-jp, all now at 0.1.6 — and turns what 0.1.0 described as SMT-backed verification into code that genuinely performs it. The new EU and US statute registries are a first step toward a Legalis-RS that speaks more than one legal system, and /predict-ruling’s precedent-ranking and /translate-check’s structural DSL comparison are both built entirely on primitives — LegalResult<T>, the DSL compiler, the SMT verifier — that already existed elsewhere in the ecosystem. OxiZ, COOLJAPAN’s Pure Rust SMT solver, is what makes the contradiction claim provable rather than merely asserted; every jurisdiction OxigenAI adds from here just gives that same solver more law to prove things about.
Repository: https://github.com/cool-japan/oxigenai
Star the repo if you think a legal-tech platform’s contradiction claims should be provable, not just plausible.
The era of “trust the LLM” government legal AI is over. Pure Rust computational law — verified, multi-jurisdictional, and sovereign — is here.
— KitaSan at COOLJAPAN OÜ July 2, 2026