Repository navigation
v4.2.5
Upgrading from 4.2.4
- SHACL runs only where ledger config enables it. A ledger that holds shapes but has no
f:shaclEnabled truein its config stops validating writes;fluree infoflags affected ledgers. (#2009) - Schema writes are checked by
f:modifypolicy. A restricted identity that maintains the ontology needs a grant for the hierarchy properties and class/propertyrdf:type. (#2218) - Deleting a value deletes every list entry that holds it, in SPARQL and JSON-LD; CONSTRUCT, DESCRIBE and export write lists whole. (#2159, #2217)
- The server and Python lock their file storage directory. A second process on the same directory is refused, and a filesystem that cannot lock fails to open unless
FLUREE_STORAGE_ALLOW_UNLOCKED=true. (#2131) - Old index versions are kept by age, with a ceiling of 10, and no longer a floor of 5; the GC log's
retained_countfield is replaced. (#2168, #2167) fluree docledgers re-ingest once into the new graph shape; triples you added to chunk or relation nodes stay on their old IRIs. (#2137)
Every change to check on upgrade: Behavior changes
What's Changed
Breaking Changes
- fix: JSON-LD graph scoping, config integrity and explicit-only SHACL by @aaj3f in #2009
- fix(lists): SPARQL reads list members as values, CONSTRUCT and DESCRIBE write lists, deleting a value takes every entry by @bplatz in #2159 and #2217
- fix(policy): judge schema writes by modify policy by @bplatz in #2218
Features
- Faster datalog evaluation: dependency scheduling, semi-naive recursion, closures as paths by @bplatz in #2120
- Stratified datalog programs: evaluation time, negation, aggregates, named graphs by @bplatz in #2122
- Reasoning stops with its query and counts as its fuel; explain derived facts; compact JSON-LD graph names by @bplatz in #2126
- Bump fluree-doc-parse:
fluree docledgers move to its new graph on next ingest; addfluree doc parseby @bplatz in #2137 - feat(delta): materialize Delta sources through their change data feed by @bplatz in #2166
- feat(gc): let the age guard decide index retention, with a ceiling of 10 as backup by @bplatz in #2168
- fluree ontology check / from: see what an extraction model reads of an ontology, and rewrite or slice one by @aaj3f in #2208
Bug Fixes
- fix(api): a transaction stages a Turtle upsert as it stages the other operations by @aaj3f in #2108
- fix(query): compare terms by what they are, not how they're encoded by @aaj3f in #2010
- fix(cypher):
x AS xprojects x instead of binding it to itself by @aaj3f in #2096 - fix(nameservice): record paths come from the storage address by one rule by @aaj3f in #2097
- fix(query): top-k sorts size their buffers from what they hold by @aaj3f in #2098
- Share one engine per storage directory in a process; lock it against other processes by @bplatz in #2131
- fix(query): history scans match a bound object on indexed events by @bplatz in #2133
- fix(indexer): a fact deleted before an incremental build stays deleted in a graph new to the index by @aaj3f in #2118
- fix(transact): write fidelity, part 2 — one fact identity, microsecond temporals, value reads by @aaj3f in #2109
- fix: typed dataset and graph references: one grammar, one resolver by @aaj3f in #2007
- fix(transact): a delete of an overflow-IRI object retracts the stored fact by @bplatz in #2142
- fix(transact): net an update's facts as sets, not by row count by @bplatz in #2144
- fix(transact): an empty write document has nothing to add by @bplatz in #2154
- fix: Fluree re-inserts its own export of SPARQL UPDATE blank nodes by @bplatz in #2156
- fix(export): write stored lists in their stored order by @bplatz in #2158
- fix(iceberg): read pinned materialize scans whole; pin Delta tables the same way by @bplatz in #2165
- fix(gc): log the index versions a pass leaves, not the retention target by @bplatz in #2167
- fix(transact): a property keeps one vector length per graph by @aaj3f in #2112
- fix(import): a bulk JSON-LD import writes @graph scoping as insert does by @aaj3f in #2148
- fix: a retraction and an assertion of one fact at one t resolve the same way everywhere by @aaj3f in #2153
Performance
- perf(binary-index): time dictionary lookups only when their debug log is on by @aaj3f in #2101
- perf(binary-index): resolve a persisted subject's Sid without a reverse lookup by @bplatz in #2119
Documentation
- Python reference worker for custom reasoning stages by @bplatz in #2127
- docs(python): how query results show unbound variables and dates by @bplatz in #2155
Other Changes
- test: tracing captures and WAL flush counts that hold up under load by @aaj3f in #2149
- refactor(graph-ir): mint every reserved blank-node label through one helper by @bplatz in #2169
- release v4.2.5 by @bplatz in #2145
Full Changelog: v4.2.4...v4.2.5