Semantica v0.6.7
Released: 2026-08-28
Tag: v0.6.7 · Compare: v0.6.6...v0.6.7 · PyPI: semantica 0.6.7
Highlights
Feature release, plus one SSRF hardening fix and a large batch of correctness fixes across the RDF/ontology export pipeline.
Ships: first-class LangChain integration (semantica[langchain]), a SAP OData ingestor (semantica[ingest-sap]), ContextGraph Markdown round-trip persistence, a reasoning Action layer (rule-driven Assert/Retract/Call/EmitEvent with optional provenance), a public run_shacl_validation API, and a read-only Explorer Markdown content viewer.
Also fixes: Agno/OpenClaw SSRF hardening, PipelineBuilder.set_parallelism() now actually parallelizes independent steps, flatten_dict() no longer drops data on a key collision, Config.get() honors boolean environment overrides, the MCP server's export_graph tool works again on every format, and a dozen ontology/RDF export correctness bugs (OWL property/class export, SHACL target namespace, one canonical confidence datatype, reachable OWL-Time reification, JSON-LD default-graph and content-derived document identity, full metadata passthrough — see CHANGELOG.md for the full breakdown).
What's Changed
- #1071 ·
54c274e0· test(ingest): track relationship provenance via ProvenanceManager · @dex0shubham - #897 ·
c5d382ee· test(visualization): isolate optional dependency mocks · @luantaraschi - #1045 ·
4801ff34· security(deps): bump anthropic from 0.121.0 to 0.122.0 · @dependabot - #1078 ·
96f60e61· feat(explorer): add markdown content preview and source view · @sakshi04-ui - #1115 ·
a3074ec4· fix(kg): keep relationship endpoint aliases in sync · @T1mn - #1123 ·
e3405ebc· Read the ontology shape the generator actually emits, and stop minting empty class IRIs (#1103) · @fabio-rovai - #1124 ·
cbb0a6dd· Target the namespace the data uses, and stop attaching domain-less properties to every class (#1104, #1105) · @fabio-rovai - #1125 ·
0dc26350· Write confidence as one typed decimal on every serialization path (#1100, #1102) · @fabio-rovai - #1126 ·
a279e744· Give the OWL-Time interval a subject the graph can reach (#1106) · @fabio-rovai - #1127 ·
46451ae2· Let a registered custom method refuse (#1108) · @fabio-rovai - #1145 ·
1b21fc4c· Keep JSON-LD payloads in the default graph (#1144) · @fabio-rovai - #1116 ·
5c6b40f3· fix(kg): validate entity_id aliases · @T1mn - #1172 ·
729f4fe9· fix(docker): use Python 3.13 for gensim compatibility · @DwitiThaker - #939 ·
d4fdc1f0· fix(normalize): accept unit aliases during conversion · @Mr-Neutr0n - #1088 ·
8e9f7c55· fix(utils): bound caller-controlled keys in validation error messages · @ALDRIN121 - #1087 ·
394ce5fe· fix(reasoning): refuse SPARQL query execution instead of returning empty results · @ALDRIN121 - #1149 ·
58125a0a· fix(dedup): never merge entities with different explicit types (closes #1137) · @pkupt - #1143 ·
14091d21· fix(kg): compute real relationship duration for temporal stability metric · @cxzg007 - #1183 ·
483f53aa· fix(tests): clear CodeQL false-positive on URL substring check (#4001) · @KaifAhmad1 - #1182 ·
3c99f447· docs(shacl): document that rdfs:range + RDFS entailment makes sh:class unfalsifiable · @ALDRIN121 - #1188 ·
d3f37f79· Fix HuggingFace NER kwargs handling · @shahzaib-ahmadcs - #1181 ·
9123dcc0· fix(export): JSON-LD document @id is now content-derived, not wall-clock · @reddynitish - #1189 ·
ba3737c8· feat(ontology): expose public SHACL validation API · @mikemikimike - #1047 ·
727b0383· security(deps): bump botocore from 1.43.69 to 1.43.73 · @dependabot - #1050 ·
331c8576· security(deps): bump agno from 2.8.7 to 2.9.0 · @dependabot - #1163 ·
48f219cd· deps(deps): bump google-genai from 2.17.0 to 2.18.1 · @dependabot - #1187 ·
1ee2ae88· fix(context): accept analyzer vocabulary in causal edges · @ALDRIN121 - #996 ·
7e1d2550· fix: prevent fallback recursion and write proper Parquet in embed generate command (fixes #994) · @varunsahni18 - #851 ·
f6b31925· fix(context): reject Markdown import symlinks · @SaurabhScripts - #852 ·
a4bcfade· feat(context): add ContextGraph Markdown round-trip · @SaurabhScripts - #885 ·
abe1bc8f· fix(semantic_extract): reset vector similarity state when scoring fails · @ArmanGrewal007 - #899 ·
d79f2cfb· Add graph storage backend compatibility matrix · @yulinlina - #902 ·
ea9b1f5d· test(conflicts): add coverage for 4 resolution strategies and 3 conflict types · @Devansh070 - #1112 ·
6c2ccfd3· fix(export): normalize Turtle resource IRIs · @mikemikimike - #1192 ·
f4c6be15· fix(triplet_store): honor RDF4J repository id · @Freakz2z - #1193 ·
0468a603· fix(utils): write console progress only to an interactive stdout · @ALDRIN121 - #1057 ·
58ec7639· docs: fix broken star history chart in README · @OctoBored - #1165 ·
703b40a1· Carry metadata through every RDF serialization (#1154) · @fabio-rovai - #1210 ·
c415d57d· docs: add citation section and fix stale org references · @KaifAhmad1 - #1197 ·
93281859· security(deps): bump lxml from 6.1.1 to 6.1.2 · @dependabot - #1201 ·
7da3519c· security(deps): bump charset-normalizer from 3.5.0 to 3.5.1 · @dependabot - #1212 ·
58aad80d· fix: guard Agno and OpenClaw integration requests against SSRF · @Sameer6305 - #1176 ·
2f63896f· Remove unreachable dead code · @Vinv-AI - #972 ·
4217f23d· refactor(seed): remove obsolete requests import handling in load_from_api · @pravit-amp - #1213 ·
2075eca0· fix: preserve generation kwargs in relation extraction · @Sameer6305 - #970 ·
a1a72cdd· fix(triplet_store): OxigraphStore silently ignores storage_path; add_triplets skips flush · @logan-jl-cc - #1151 ·
06a4b2c9· fix(mcp): export_graph failed on every format — convert kg dict, disable progress · @Arasz - #1156 ·
5e8caadc· Read JSON-LD named graphs in OntologyIngestor (#1129) · @13g4d0 - #1194 ·
c7d60857· refactor(explorer): move isSafeUrl out of MarkdownContentViewer (#1119) · @pravit-amp - #1195 ·
50468f9c· perf(explorer): stop re-parsing markdown on every viewer re-render (#1118) · @pravit-amp - #1148 ·
551b94c5· fix(export): escape Turtle/N-Triples string literals (closes #1098) · @pkupt - #1217 ·
97f71542· fix(pipeline): preserve serializer round trips · @cxzg007 - #925 ·
fa6d645e· Add tests for max_tokens propagation in LLM methods · @saiganesh47 - #937 ·
599729f2· fix(explorer): /api/decisions returns 422 — coerce decision timestamp to str · @logan-jl-cc - #967 ·
92b8aa69· fix: decision persistence/query bugs, CJK similarity, and MCP graph query/update tools · @toratto - #1203 ·
8a990c8b· security(deps): bump pypickle from 2.0.1 to 2.0.2 · @dependabot - #1155 ·
f0aa5813· feat(integrations): add LangChain integration — retriever, vectorstor… · @drod331 - #1221 ·
d76bff9a· refactor(export): consolidate duplicate Turtle/N-Triples literal escapers · @pkupt - #1004 ·
8cc5d364· fix(cli): write embed generate output in the format embed index reads · @yzxcj797 - #989 ·
f4692eea· docs(cookbook): add provenance tracking tutorial (PROV-O lineage, invalidation, checksums) · @LeonSGP43 - #1170 ·
59af0234· fix(ontology): resolve relationship endpoint types for domain and range · @T1mn - #1084 ·
af3308ad· fix(ontology): preserve #-terminated namespaces in SHACLGenerator base_uri (#1082) · @changshenhan - #1017 ·
c49e77d0· fix(ingest): import sqlalchemy text where DBIngestor and DataExporter use it · @pravit-amp - #1205 ·
8e79c655· security(deps): bump google-genai from 2.18.1 to 2.19.0 · @dependabot - #1005 ·
f187d4b5· fix(embeddings): stop the registry dispatch from calling wrappers back into themselves · @yzxcj797 - #990 ·
b13cc1cc· docs(cookbook): add Reasoning module notebook · @LeonSGP43 - #991 ·
3d0ce55f· docs(cookbook): add Change Management module notebook · @LeonSGP43 - #992 ·
9cec305a· docs(cookbook): add Seed Data module notebook · @LeonSGP43 - #1215 ·
c9c77799· fix(pipeline): wire registered step handlers · @cxzg007 - #1096 ·
5d549198· feat(reasoning): rule-driven actions with provenance · @cxzg007 - #1171 ·
23baf21d· fix(ontology): retain data properties for normalized class names · @T1mn - #1012 ·
8db95f00· fix(utils): raise on key collision in flatten_dict instead of silently dropping values · @yzxcj797 - #1225 ·
36ced4e8· docs(cookbook): add index entries for notebooks 22-25 · @LeonSGP43 - #1173 ·
13b287b9· fix(graph_store): resolve application ids to internal ids when creating relationships · @yzxcj797 - #1113 ·
f4c30645· fix(export): normalize entity name to label on all RDF paths · @cxzg007 - #1132 ·
0775b011· test(provenance): assert stored records in KG provenance suites (#946) · @pravit-amp - #1061 ·
65e6dcfe· fix(worker): remove unused sys import and organize imports · @aoright - #1021 ·
7f928f9f· fix(parse): warn when PDF parse yields no text layer (scanned PDFs) · @shanyu910 - #1038 ·
4da27c38· fix(config): honor boolean env overrides in Config.get() · @Kyou12138 - #1220 ·
e12eec40· refactor(ner): remove dead _extract_with_spacy method and unused self.nlp · @yunaremaia - #1226 ·
cce5ea17· fix(pipeline): set_parallelism now enables dependency-layer parallel execution (closes #1223) · @cxzg007 - #1234 ·
100e95a0· feat(ingest): add SAP OData ingestor (#1228) · @pkupt
82 pull requests merged from 37 contributors.
Contributors
Returning contributors who shipped changes in this release:
@KaifAhmad1, @Kyou12138, @Mr-Neutr0n, @Sameer6305, @SaurabhScripts, @T1mn, @aoright, @cxzg007, @dex0shubham, @fabio-rovai, @mikemikimike, @pravit-amp, @shahzaib-ahmadcs, @yunaremaia, @yzxcj797
New Contributors
Welcome, and thank you for your first contribution to Semantica:
- @luantaraschi first contribution in #897
- @sakshi04-ui first contribution in #1078
- @DwitiThaker first contribution in #1172
- @ALDRIN121 first contribution in #1088
- @pkupt first contribution in #1149
- @shahzaib-ahmadcs first contribution in #1188
- @reddynitish first contribution in #1181
- @varunsahni18 first contribution in #996
- @SaurabhScripts first contribution in #851
- @ArmanGrewal007 first contribution in #885
- @yulinlina first contribution in #899
- @Devansh070 first contribution in #902
- @Freakz2z first contribution in #1192
- @OctoBored first contribution in #1057
- @Vinv-AI first contribution in #1176
- @logan-jl-cc first contribution in #970
- @Arasz first contribution in #1151
- @13g4d0 first contribution in #1156
- @saiganesh47 first contribution in #925
- @toratto first contribution in #967
- @drod331 first contribution in #1155
- @LeonSGP43 first contribution in #989
- @changshenhan first contribution in #1084
- @shanyu910 first contribution in #1021
Full Changelog: v0.6.6...v0.6.7