Skip to content

v4.2.5

Choose a tag to compare

@github-actions github-actions released this 01 Nov 02:35
ca682e2

Upgrading from 4.2.4

  • SHACL runs only where ledger config enables it. A ledger that holds shapes but has no f:shaclEnabled true in its config stops validating writes; fluree info flags affected ledgers. (#2009)
  • Schema writes are checked by f:modify policy. A restricted identity that maintains the ontology needs a grant for the hierarchy properties and class/property rdf: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_count field is replaced. (#2168, #2167)
  • fluree doc ledgers 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 doc ledgers move to its new graph on next ingest; add fluree doc parse by @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 x projects 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