OWLGraph 1.0.2
Released: 2026-04-11 Status: available
A bug-fix release that closes three holes exposed by end-to-end verification of the 1.0.1 fiveloaves reasoning tests. 1.0.1 shipped the OWL rule implementations correctly, but the schema a fresh ontology compiled to was silently single-valued, and mutation errors came back with the wrong HTTP status. Both issues combined made it look like reasoning features were failing when they were actually working — or, worse, silently corrupting data on writes.
Bug fixes
Section titled “Bug fixes”- Non-functional properties now compile to multi-value predicates.
owl/compileremittedpred: uid @count(single-value) instead ofpred: [uid] @count(list) when serializing a non-functional object or data property to a Dgraph schema string. Dgraph silently accepted writes to the resulting single-value predicate and replaced the existing edge each time, so any property that should have multiple targets (hasChapter,hasChild,hasMember,precedesEvent, …) retained only the last-written edge. The struct fieldSchemaUpdate.Listwas already correct; only the string serializer was wrong. Fixed inCompileSchemaString, covered by new regression tests that check the serialized schema string (not just the struct field) for both functional and non-functional object and data properties. - Mutation error responses now return proper HTTP status codes.
/mutateused to return HTTP 200 with{"errors": [...], "data": null}on OWL materializer errors (like disjointness violations). Clients that check HTTP status before parsing the body — including the fiveloaves reasoning test harness and any vanillafetch()caller — saw the 200 and assumed success, silently missing the error. Addedx.SetHttpStatusWithDataand wired it into the mutation handler’s post-execute error branch so materializer errors come back as HTTP 400 Bad Request with the errors body. Unit-tested againsthttptest.Recorder. - Integration-test cluster detection is more discriminating.
clusterAvailable()inowl/materializer/integration_test.gotreated any 200 response fromlocalhost:8080/healthas a Dgraph alpha. On dev boxes where:8080is held by an unrelated service, the test would mis-detect and then fail loudly on/alter 404instead of properly skipping. The probe now verifies Dgraph’s health response shape (versionpresent,serviceabsent).
Upgrading
Section titled “Upgrading”This is a patch release on the 1.0 line. No action required for databases created on 1.0.2+. The compiler fix applies automatically to any ontology loaded or re-loaded after the upgrade.
Databases created on 1.0.0 or 1.0.1 that loaded an ontology with non-functional object or data properties may have lost edge data. Re-loading the ontology on 1.0.2 migrates the schema to the correct [uid]/[string]/etc. list types for all new writes. Any historical data that was silently clobbered on 1.0.1 must be re-ingested from the source (or rebuilt from reverse edges where available — e.g. hasChapter can be reconstructed from inBook’s reverse index).
Backwards compatibility
Section titled “Backwards compatibility”- HTTP behavior change: mutations that fail OWL validation now return HTTP 400 instead of HTTP 200. Clients that parse the response body will continue to see the same error shape. Clients that only inspect HTTP status will now correctly detect the failure.
- Schema change on ontology re-load: predicates that were
pred: uid @counton 1.0.1 will be declared aspred: [uid] @countafter the next ontology load on 1.0.2. Dgraph handles the in-place ALTER; existing data on those predicates is preserved (single-value becomes a one-element list) and new writes correctly append.