[2.16.0] - 2026-06-23
Added
- OBML contract manifest (
schema/obml-contract.yml). A single, drift-checked inventory of the OBML field surface: every enum, class, and field with its camelCase alias, JSON-schema exposure, ontology property, and OSI round-trip status. CI fails if the Pydantic models, the JSON schema, or the ontology drift from it, enforcing the "OBML is the single source of truth" rule mechanically. - JSON Schema validation at the API ingestion boundary. Model-load and query endpoints (session, shortcut, and oneshot) plus the
MODEL_FILESstartup preload now validate payloads against the published JSON Schema and return a422on a violation, so the schemas are the load-bearing contract rather than just published artifacts. - Architecture quality gates in CI. Import dependency-direction enforcement, broad-except containment, RawSQL containment, compiler metamorphic invariants, and coverage floors (compiler/parser/api and the OSI converter package).
Changed
- Breaking: the query field
order_byis noworderBy. It was the only snake_case key in the query contract; it is now camelCase likeusePathNamesanddimensionsExclude. The query JSON schema (additionalProperties: false) rejectsorder_by, so update query payloads toorderBy. The Python field name staysorder_by(snake_case field names, camelCase aliases, as elsewhere), so PythonQueryObject(order_by=...)is unchanged. Docs, examples, and integration tool definitions were updated. - OBML payloads are held to the camelCase contract. The JSON schema is now camelCase-only (the duplicate snake_case
max_stalenessandintent_tagsspellings were removed). Payloads that previously relied on lenient coercion (snake_case keys, a stringversion, or uppercase enum values) are now rejected at the API; send canonical camelCase. The vendored schema in the OSI converter was refreshed to match. - Internal hardening, no SQL or endpoint behavior change. The compiler wrapper stage is now an explicit pass pipeline;
sessions.pydelegates to anapi/services/layer; the app owns its runtime explicitly with per-request isolation; and five large modules (compiler/resolution,compiler/cfl,ui/app, the OSI converter, and the Flight server) were split into focused submodules. All compiler drift snapshots are byte-identical.
Full Changelog: v2.15.0...v2.16.0