Repository navigation
v0.8.0a1
Pre-release
Pre-release
[0.8.0a1] - 2026-09-13
First release since 0.7.9. This is a breaking release: it changes the default
Brick version and the default SHACL engine, and removes the Allegrograph
reasoner along with several pieces of long-broken surface area.
(0.7.10a1 was published from an intermediate state and is superseded by this
release.)
Removed
- The Allegrograph OWL-RL backend, along with the
[allegro]extra and the
dockerdependency. It ranagtool materializeinside a
franzinc/agraph:v7.1.0container to provide a third implementation of a
profile the two in-process reasoners already cover.
expand("owlrl", backend="allegrograph")now raisesValueError. brickschema.topquadrant_shacland the bundled TopQuadrant CLI (49 MB of
Java, including two 9 MB fat jars). Nothing imported the module;
brick-tq-shaclships its own copy of the engine. The wheel drops from
8.2 MB to 1.3 MB as a result.- The
brick_validatecommand. It imported abrickschema.validatemodule
that does not exist, and declared no console-script entry point, so it could
neither be installed nor run. docs/requirements.txt, which was committeduv exportoutput. Docs
dependencies now come from thedocsdependency group.
Changed
- The default Brick version is now 1.5 (was 1.4).
Graph()and
GraphCollection()load Brick 1.5 unless givenbrick_version=. - The default SHACL engine is now
shifty, falling back totopquadrant
thenpyshacl. Previously the order puttopquadrantfirst. Inference and
validation results may differ. Select explicitly with
validate(engine=...)/compile(engine=...). validate()no longer modifies the graph. It previously rancompile()
as a side effect, and only for the pyshacl engine.validate()andcompile()raiseValueErrorfor an unknown engine
instead of returningNone.compile(extra_graphs=[...])no longer merges those graphs into the
model. They drive inference; only inferred triples are added.expand()always returnsself. It previously returnedNonefor the
rdfsprofile and for+-joined profiles, which broke chaining.reasonableandpyshiftyare now base dependencies, so the default
OWL-RL backend and SHACL engine work on a plainpip install brickschema.
The[reasonable]and[shifty]extras remain as empty aliases so existing
install commands keep resolving.- Dependency cleanup: dropped
requests(never imported), moved
pyontoenvto the dev group (used only by the test suite) and
importlib-resourcesto[brickify]; droppedalembicandsixfrom
[persistence], where they were already transitive. __version__is read from package metadata. It was hardcoded"0.2.0".- Importing
brickschemano longer callslogging.basicConfig()or prints
to stdout, so it no longer reconfigures the root logger of the importing
application. - Minimum Python is 3.11. The README and docs previously claimed 3.6, 3.7 and
3.8 in various places.
Added
brickschema.shacl— the SHACL engine dispatch layer, exposing
available_engines(),resolve(),infer()andvalidate().infer()
returns only newly inferred triples and never mutates its inputs.- The
brickifyconsole script. It was documented in the README and
docs/brickify/but no entry point was ever declared, so
pip install brickschema[brickify]provided no command. - The
brickschema[all]extra. It was referenced by the README and three
documentation pages but never existed, sopip install brickschema[all]
installed nothing extra. - Package metadata: project URLs, trove classifiers and keywords.
homepage
had been declared using a Poetry key that hatchling silently ignores, so the
published package carried no links, classifiers or keywords at all.
Fixed
compile(engine="shifty")corrupted the graph. shifty round-trips its
result through N-Triples, which relabels every blank node, so the diff
against the input reported every blank-node triple as new and grafted a
relabeled duplicate into the graph on each call. Brick is full of blank
nodes, so a 77-triple graph grew to 126, 216 then 396 across three compiles.
The graph is skolemized before inference, as the other engines already did,
andcompile()is now idempotent and matches pyshacl exactly.GraphCollection.remove_graph()recursed infinitely — it called itself.get_extensions()usedstr.strip(".ttl"), which strips a set of
characters rather than a suffix, and emitted a spurious empty entry.Graph.load_file(source=...)could only ever try one format. rdflib
closes the stream on a failed parse, so the ttl/n3/xml fallback failed with
"I/O operation on closed file".expand("vbis")raisedFileNotFoundErroron any 1.4 or 1.5 graph, and
TagInferenceSessionfailed for 1.4.vbis-masterlist.csvand
taglookup.pickleare not packaged for every Brick version; both now fall
back to the newest packaged copy.TagInferenceSession(rebuild_tag_lookup=True)wrotetaglookup.pickle
into the caller's working directory from its constructor. Use the new
save_tag_lookup()to regenerate it deliberately.VBISTagInferenceSession.expand()raisedKeyErrorfor equipment whose
class has no VBIS pattern.orm.pycalledsys.exit(1)at import time, and setpointson generated
classes so every instance of a Brick class shared one list.merge.pyraisedUnboundLocalErrorwhenever every entity linked, and
discarded itsmerge_typesargument.persistent.pylogged around tenprint()calls from the commit path, and
version_before()crashed when there was no earlier version.- The Read the Docs build. It pinned Python 3.10 against
requires-python >=3.11, so it could not install the package.