Releases: trickle-labs/pg-ripple
Release list
v0.128.0
Completes the register_json_mapping round-trip by adding a relational
write-back path (RDF → Relational). Changes to RDF triples can now be
automatically propagated back to the source relational table via direct SQL
calls or trigger-based async queueing.
Added
pg_ripple.writeback_json_row(mapping TEXT, subject_iri TEXT) → BIGINT—
exports the subject as JSON using the named mapping context, maps JSON keys to
relational columns, and executes anINSERT … ON CONFLICTbased on the
configured conflict policy (replace,skip,error).pg_ripple.writeback_json_row_delete(mapping TEXT, subject_iri TEXT) → BIGINT—
deletes the target relational row using decoded key-column values.pg_ripple.enable_json_writeback(mapping TEXT) → VOID— installs
AFTER INSERT OR DELETE FOR EACH ROWtriggers on VP delta tables, enqueuing
events into_pg_ripple.json_writeback_queuefor async background processing.pg_ripple.disable_json_writeback(mapping TEXT) → VOID— drops all
writeback triggers; idempotent.pg_ripple.json_writeback_status() → TABLE— operational view of queue
depth, error count, andlast_processed_atper mapping.pg_ripple.json_writeback_batch_sizeGUC (default 100, range 0–10000) —
rows drained per background merge-worker tick; set to 0 to disable auto-drain._pg_ripple.json_writeback_queuecatalog table — asynchronous writeback
event queue withmapping_name,subject_id,operation,queued_at,
processed_at,error._pg_ripple.json_writeback_enqueue_fn()PL/pgSQL trigger function —
enqueues VP delta changes into the writeback queue.- Five new columns on
_pg_ripple.json_mappings:writeback_table,
writeback_schema(default'public'),writeback_key_columns(default
{}),writeback_conflict_policy(default'replace'),
writeback_enabled(defaultfalse). - HTTP
POST /json-mapping/{name}/writeback— synchronous single-subject
writeback; returns{"rows_affected": N}; requires write-auth. - HTTP
GET /json-mapping/{name}/writeback/status— queue depth, error
count, andlast_errorJSON; requires read-auth. feature_status()now includes'json_mapping_writeback'entry.- Blog post
blog/json-ld-reverse-mapping.md. - Docs page
docs/src/features/json-mapping.md. - GUC docs in
docs/src/reference/guc-reference.md. - 21 pg_regress tests in
tests/pg_regress/sql/v0128_json_writeback.sql.
Changed
- Background merge worker (worker 0) now drains
_pg_ripple.json_writeback_queue
after each merge cycle whenjson_writeback_batch_size > 0.
Migration
sql/pg_ripple--0.127.0--0.128.0.sql—ALTER TABLE _pg_ripple.json_mappings ADD COLUMN IF NOT EXISTS …;CREATE TABLE _pg_ripple.json_writeback_queue;
index on pending rows;json_writeback_enqueue_fn()PL/pgSQL trigger function.
v0.127.0
Moves relay-facing CDC bridge behavior from the obsolete pg-trickle relay model
to pg_tide named outboxes, updates the project documentation to current pg_tide
terminology and deployment commands, and adds a detailed remediation plan for the
remaining historical references.
pg_trickle remains the companion extension for incremental view maintenance only.
Relay, outbox, inbox, consumer-group, and relay-process guidance now points at
pg_tide. The CDC bridge now validates pg_tide availability and publishes events
with tide.outbox_publish() instead of inserting into a pg-trickle-style outbox
table, while retaining compatibility names for existing callers.
Added
- PGTIDE-RELAY-01
pg_ripple.relay_available() -> BOOLEANcanonical SQL
helper for relay/outbox/inbox availability checks. - PGTIDE-RELAY-02
_pg_ripple.cdc_bridge_triggers.outbox_namecatalog column
for pg_tide outbox names, withoutbox_tableretained as a compatibility alias. - PGTIDE-DOC-01 pg-tide-relay-fixes.md detailed
research and remediation plan. - Migration script
sql/pg_ripple--0.126.0--0.127.0.sql. - Roadmap file
roadmap/v0.127.0.md.
Changed
- PGTIDE-RELAY-03 CDC bridge trigger publishing now calls
tide.outbox_publish(outbox_name, payload, headers)and stores the stable
ripple:{statement_id}dedup key in pg_tide headers. - PGTIDE-RELAY-04 Deprecated
pg_ripple.trickle_available()now aliases
relay_available()for relay checks; usepg_ripple.pg_trickle_available()
for IVM checks. - PGTIDE-DOC-02 User-facing relay docs, runbooks, examples, and Docker
snippets now use thepg-tidecommand,ghcr.io/trickle-labs/pg-tideimage,
PG_TIDE_POSTGRES_URL, and stabletide.relay_set_outbox_v2()/
tide.relay_set_inbox_v2()SQL APIs. - DEP-01
pg_tidetested/bundled version bumped from0.16.0to0.33.0
in.versions.tomlandDockerfile. pg_ripple_http:COMPATIBLE_EXTENSION_MINbumped from"0.125.0"to
"0.126.0".
v0.126.0
Adds encrypted per-endpoint OAuth2 Bearer / API-key credential storage with
pgcrypto-backed pgp_sym_encrypt, a credential audit view, atomic rotation,
automatic header injection in the federation executor, and 10 new regression
tests.
Federated SPARQL queries that span multiple organizations or external data services almost always require authentication, and managing those credentials securely across a distributed knowledge graph deployment has been a notable gap in pg_ripple's federation story. This release closes that gap with a dedicated per-endpoint credential management system: Bearer tokens and API keys can be registered for any federation endpoint and are stored encrypted at rest using pgcrypto's OpenPGP symmetric encryption, protected by a superuser-only key that is never visible through SHOW or any administrative view. The plaintext of a stored credential is never returned by any query, function, or diagnostic endpoint — only the holder of the encryption key can decrypt it, and the key itself is never stored in the database. A credential audit view exposes operational metadata such as token age and last-used timestamp without ever exposing the underlying secret.
The operational workflow is designed for production credential management at scale. set_federation_credential() registers or atomically replaces credentials for any endpoint, while rotate_federation_credential() replaces a token and records the rotation timestamp in a single atomic operation, enabling automated rotation pipelines without authentication gaps. The federation query executor automatically retrieves and injects the correct HTTP header for each endpoint after SSRF validation, so existing SPARQL queries and application code require no changes when credentials are added, rotated, or removed. A matching HTTP endpoint exposes auth status for external monitoring and compliance dashboards, and ten regression tests validate the full lifecycle from initial storage through rotation through audit reporting, ensuring the feature behaves correctly across upgrade paths.
Added
- FEAT-03
pg_ripple.set_federation_credential(endpoint_iri TEXT, auth_type TEXT, token TEXT)
— registers or replaces an encrypted credential for a federation endpoint.
Tokens encrypted at-rest viapgcrypto.pgp_sym_encryptusing the
pg_ripple.federation_credential_keyGUC (superuser-only, never visible via
SHOW). Errors: PT0510 (no key), PT0511 (no pgcrypto), PT0512 (unknown
endpoint), PT0513 (invalid auth_type), PT0514 (encrypt fail), PT0515 (upsert fail). - FEAT-03
pg_ripple.rotate_federation_credential(endpoint_iri TEXT, new_token TEXT)
— atomically replaces the token and recordsrotated_at = now(). Error:
PT0516 (no credential for that endpoint). - FEAT-03
pg_ripple.federation_credential_audit() → TABLE(endpoint_iri TEXT, auth_type TEXT, token_age_days DOUBLE PRECISION, last_used_at TIMESTAMPTZ)
— operational metadata only; never returns plaintext tokens. - FEAT-03
_pg_ripple.federation_credentialstable — stores encrypted tokens
withauth_type CHECK ('bearer','apikey','none'),header_name,created_at,
rotated_at, andlast_used_at. FK to_pg_ripple.federation_endpoints(url). - FEAT-03 GUC
pg_ripple.federation_credential_key— symmetric key for
pgp_sym_encrypt/pgp_sym_decrypt.NO_SHOW_ALL | SUPERUSER_ONLY. - FEAT-03 Federation executor (
src/sparql/federation/http.rs) automatically
injects the appropriate HTTP header (Bearer / API-key) after SSRF validation.
Credential lookup happens post-SSRF to prevent credential-oracle attacks. - FEAT-03 HTTP endpoint
GET /federation/{endpoint}/auth-status— returns
JSON withendpoint_iri,auth_type,token_age_days, andlast_used_at.
Requires write-level authentication. - CRED-01–10
tests/pg_regress/sql/v0126_federation_credentials.sql— 10
regression tests covering table existence, GUC registration, function presence,
column schema, constraint enforcement, and audit function. - Migration script
sql/pg_ripple--0.125.0--0.126.0.sql. - Roadmap file
roadmap/v0.126.0.md.
Changed
pg_ripple_http:COMPATIBLE_EXTENSION_MINremains"0.125.0"(one-version
trailing window; v0.126.0 introduces backward-compatible additions only).
v0.125.0
Adds point-in-time named-graph snapshots via pg_ripple.graph_at(),
a diff API via pg_ripple.graph_diff(), two HTTP endpoints, a Prometheus
gauge, automatic GC, and 15 new regression tests.
Added
- FEAT-02
pg_ripple.graph_at(graph_iri TEXT, snapshot_time TIMESTAMPTZ) → TEXT
— materialises a named-graph snapshot from_pg_ripple.temporal_factsat the
given timestamp. Registers the snapshot in_pg_ripple.graph_snapshotsand
returns a deterministicurn:snapshot:…IRI for use inGRAPH <iri> { … }
SPARQL queries. - FEAT-02
pg_ripple.graph_diff(graph_iri TEXT, from_ts TIMESTAMPTZ, to_ts TIMESTAMPTZ) → TABLE(s BIGINT, p BIGINT, o BIGINT, change TEXT)
— returns'added'/'removed'delta rows between two temporal snapshots,
enabling audit-compliance workflows and incremental Turtle/N-Quads exports. - FEAT-02
pg_ripple.graph_snapshots_count() → BIGINT
— returns the current live snapshot count. - FEAT-02
_pg_ripple.graph_snapshotstable and_pg_ripple.snapshot_id_seq
sequence — catalog of registered snapshots withexpires_atfor GC. - FEAT-02 GUC
pg_ripple.snapshot_retention_days(default 30) — automatic
GC of expired snapshots by the merge background worker tick. - FEAT-02
GET /temporal/graphs/{iri}/snapshot?at=<iso8601>HTTP endpoint
— returns snapshot content as Turtle withX-Snapshot-IRIresponse header. - FEAT-02
GET /temporal/graphs/{iri}/diff?from=<iso8601>&to=<iso8601>HTTP
endpoint — returns N-Quads delta between two timestamps. - FEAT-02 Prometheus gauge
pg_ripple_graph_snapshots_total— tracks live
snapshot count; updated on each/temporal/graphs/{iri}/snapshotcall. - SNAP-01–15
tests/pg_regress/sql/v0125_temporal_graph_snapshots.sql— 15
regression tests covering snapshot creation, idempotency, count tracking,
diff correctness, retention GUC, and table schema. - Migration script
sql/pg_ripple--0.124.0--0.125.0.sql— addsgraph_snapshots
table andsnapshot_id_seqsequence. - Roadmap file
roadmap/v0.125.0.md. - Blog post
blog/temporal-graph-snapshots.md.
Changed
pg_ripple_http:COMPATIBLE_EXTENSION_MINbumped from"0.123.0"to"0.125.0".
v0.124.0
Fixes a Cartesian-product bug (PATH-BNODE-01) in the SPARQL property path
translator and adds 25 new regression tests covering all eight path algebra
operators plus OWL 2 RL propertyChainAxiom n-hop chains.
Fixed
- PATH-BNODE-01
GraphPattern::Pathtranslator insrc/sparql/sqlgen.rs
now callsbgp::bind_term()for both subject and object instead of only
handlingTermPattern::Variable. When spargebra/sparopt decomposes a
Sequence path (e.g.hop*/hop,hop?/hop,^hop/!hop) into two
GraphPattern::Pathnodes connected by an anonymous blank node, the blank
node is now registered infrag.bindings;Fragment::mergethen generates
the correctINNER JOINcondition (_t0.o = _t1.s) instead of a Cartesian
product. This eliminated ×N duplicate rows (e.g. 30 rows → 5 for a
5-hop chain withhop*/hop).
Added
- TEST-01
tests/pg_regress/sql/sparql12_property_paths.sql— 20 regression
tests covering all 8PropertyPathExpressionvariants (NamedNode,Reverse,
Sequence,Alternative,OneOrMore,ZeroOrMore,ZeroOrOne,
NegatedPropertySet) and 5 compound operator combinations. - TEST-02
tests/pg_regress/sql/sparql12_owl_chain_nhop.sql— 5 regression
tests for OWL 2 RLowl:propertyChainAxiomn=4 and n=5 hop chains with
SPARQL path cross-validation. - DOC-01
docs/src/reference/sparql12-status.md— new reference page with
operator coverage table, PATH-BNODE-01 root-cause analysis, and known limitations. docs/src/SUMMARY.mdupdated to link the new reference page.- Migration script
sql/pg_ripple--0.123.0--0.124.0.sql(comment-only; no DDL changes). - Roadmap file
roadmap/v0.124.0.md.
Changed
pg_ripple_http:COMPATIBLE_EXTENSION_MINbumped from"0.122.0"to"0.123.0".
v0.123.0
Completes the Assessment 17 remediation arc. Adds replica-pool Prometheus
gauges (OBS-M-01), rule-library stream observability (OBS-M-02),
bench_workload_result() convenience wrapper (ERG-L-01), eight new compatibility
matrix rows (DOC-M-01), comprehensive SQL API reference (DOC-M-03), four new blog
posts (DOC-L-01), and RSA/paste advisory maintenance (SEC-M-01/SEC-M-02).
Added
- OBS-M-01
pg_ripple_http_replica_pool_size{pool="replica"}and
pg_ripple_http_replica_pool_available{pool="replica"}Prometheus gauges
inpg_ripple_http/src/metrics.rs; scraped live at every/metricscall. - OBS-M-02
pg_ripple_rule_library_stream_duration_secondscumulative
latency counter andpg_ripple_rule_library_subscribe_errors_totalerror
counter; wired intorouting/rule_library_handler.rs. - ERG-L-01
pg_ripple.bench_workload_result(profile TEXT DEFAULT 'bsbm')
SQL convenience wrapper returning the most recent benchmark run from
_pg_ripple.bench_history(defined in migration script). - ERG-M-01
docs/src/reference/sql-api.md— new reference page documenting
compat_check()JSON schema with copy-pasteable example. - ERG-M-02 / DOC-M-02
docs/src/guides/rule-library-federation.md— complete
publish → subscribe → verify inference → monitor worked example. - ERG-M-03
docs/src/operations/read-replicas.md— new page documenting
?replica=okrouting semantics, eligible query types, pool exhaustion
fallback, and Prometheus alerting recipes. - DOC-M-01 Eight new rows (v0.113.0–v0.120.0) added to
docs/src/operations/compatibility.md. - DOC-M-03
docs/src/reference/sql-api.mdextended with function signatures,
parameter descriptions, and examples forbench_workload(),bench_workload_result(),
publish_rule_library(),subscribe_rule_library(), and all seven Allen's
interval relation functions. - DOC-L-01 Four new blog posts:
blog/owl-property-chain-axiom.mdblog/federation-circuit-breaker.mdblog/allen-interval-relations.mdblog/rule-library-federation.md
- Migration script
sql/pg_ripple--0.122.0--0.123.0.sql. - Roadmap file
roadmap/v0.123.0.md.
Changed
- SEC-M-01 Extended RUSTSEC-2024-0436 and RUSTSEC-2023-0071 (RSA Marvin-attack)
audit.tomlexpiry to 2027-01-01; updated comments with
"RSA not used for untrusted input — re-evaluated Q3-2026" rationale. - SEC-M-02 Added detailed mitigation rationale for RUSTSEC-2026-0104 (
pasteproc-macro unsoundness) inaudit.toml; seeroadmap/v0.123.0.mdfor full justification. - COMPAT-01
COMPATIBLE_EXTENSION_MINbumped to"0.122.0"in
pg_ripple_http/src/main.rs.
v0.122.0
Decomposes all eight remaining god-modules (H17-02): 0 source files exceed 1,000 LOC.
CI file-size gate tightened from 1,800 to 1,000 lines. Five new pg_regress test suites added.
All 290 pg_regress tests pass.
Changed
- H17-02 / PERF-M-02
src/sparql/expr/functions.rs(was 1,252 LOC) rewritten as
a thin dispatch table (~90 LOC); logic extracted to seven sub-modules:
string.rs,datetime.rs,numeric.rs,iri.rs,aggregate.rs,geo.rs,temporal.rs. - H17-02 / PERF-L-01
src/storage/ops/scan.rs(was 1,171 LOC) split: deduplication
helpers extracted tosrc/storage/ops/dedup.rs. - H17-02
src/bulk_load.rs(was 1,173 LOC) converted to directory module;
JSON ingest extracted tojson_ingest.rs, confidence helpers toconfidence.rs. - PERF-M-03
pg_ripple_http/src/routing/admin_handlers.rs(was 1,168 LOC) converted
to directory module; explorer page extracted toexplorer.rs, diagnostic snapshot todiagnostic.rs. - PERF-L-02
src/llm/mod.rs(was 1,071 LOC) split: Automated Ontology Mapping
functions (suggest_mappings,kge_entity_similarity, etc.) extracted tomapping.rs. - H17-02
src/datalog/compiler/mod.rs(was 1,068 LOC) split: SQL helper functions
(build_join_cond,render_comparison_term, etc.) extracted tohelpers.rs. - H17-02
src/gucs/registration/storage.rs(was 1,058 LOC) split: v0.81.0+
GUC registrations extracted tostorage_late.rsvia#[path]sub-module. - H17-02
src/datalog/parser.rs(was 1,030 LOC) split: test module extracted
toparser_tests.rsvia#[path]declaration. - CI gate tightened:
lint-file-sizestep updated from 1,800-line limit to 1,000-line
limit (Q13-04 v0.85.0, tightened v0.122.0 H17-02). Zero files exceed 1,000 LOC.
Added
- Test coverage Five new pg_regress test suites covering v0.120.0 features:
v0120_diagnostic_snapshot.sql— validatesdiagnostic_report()keys for HTTP
diagnostic-snapshot endpoint (DIAG-01 through DIAG-04)v0120_read_replica_routing.sql— validatesread_replica_dsnGUC existence and
primary-fallback behaviour (REPLICA-01 through REPLICA-04)v0120_compat_check.sql— more thoroughcompat_check()JSON schema validation
(COMPAT-10 through COMPAT-14)v0120_tenant_quota.sql— validates tenant table schema and quota column
(QUOTA-01 through QUOTA-04)v0122_module_splits.sql— spot-checks public API for regressions from all splits
(SPLIT-01 through SPLIT-05)
- Migration script
sql/pg_ripple--0.121.0--0.122.0.sql(no schema changes). - Roadmap file
roadmap/v0.122.0.mdcreated.
v0.121.0
Closes the two High security findings from Assessment 17 (H17-01 SSRF bypass in
subscribe_rule_library, SEC-M-03 CGNAT/multicast SSRF gaps) and all medium/low
bug and security items. All 284 pg_regress tests pass.
Security
- H17-01 / SEC-H-01
subscribe_rule_library()SSRF guard replaced:
naive string-contains matching (lower.contains("://127.")etc.) that could
be bypassed by hostname embedding replaced with
resolve_and_check_endpoint(source_uri)?from
src/sparql/federation/policy.rs. The new guard performs actual DNS
resolution and validates all resolved IP addresses against the full blocklist,
preventing DNS rebinding attacks and URL-embedding bypasses. - SEC-M-03 SSRF blocklist expanded with four new ranges
(ci/regress:v0121_ssrf_hardening.sql— SSRF-01 through SSRF-04):- CGNAT
100.64.0.0/10(RFC 6598) added tois_private_ip()andis_blocked_host()— ci/regress: SSRF-02 - IPv4 multicast
224.0.0.0/4added — ci/regress: SSRF-03 - This-network
0.0.0.0/8added — ci/regress: SSRF-04 - IPv4-mapped IPv6
::ffff:0:0/96added with recursive IPv4 re-check — ci/regress: SSRF-01
- CGNAT
- SEC-M-04
// SAFETY-SQL: pred_id is i64, no injection possiblecomments
added to threeformat!-based DDL calls insrc/datalog/magic.rs;let _ =
silencing replaced withunwrap_or_else(|e| pgrx::warning!(...)). - SEC-L-01
Content-Type: text/event-stream; charset=utf-8now explicitly
enforced on/rule-libraries/{name}/streamresponses.
Fixed
- BUG-M-01 Six
let _ = pgrx::Spi::run(...)calls in
src/maintenance_api.rsreplaced withunwrap_or_else(|e| pgrx::warning!)
so ANALYZE/REINDEX errors surface to the user rather than silently failing. - BUG-M-02
let _ =silencing insrc/kge.rs:234and
src/llm/mod.rs:730replaced withunwrap_or_elsewarning surfacing. - BUG-M-03
// CLIPPY-OK: side-effect only — errors from parse_head_object are expected and non-fatal herecomment added tosrc/datalog/conflict.rs:457.
Added
- OBS-L-01
mutation_journal::record_schema_op(op, target)helper added (ci/regress:v0121_ssrf_hardening.sql); called at end of
publish_rule_library()andsubscribe_rule_library()for server-log audit trail
so schema-mutating rule-library operations appear in the PostgreSQL server log
audit trail. - Fuzz target
fuzz/fuzz_targets/rule_library_ssrf.rscovers the
subscribe_rule_library()SSRF URL validation path and the rule-library
NDJSON stream parser. Registered infuzz/Cargo.toml. - pg_regress
tests/pg_regress/sql/v0121_ssrf_hardening.sqladds 7 SSRF
regression tests: IPv6-mapped private address blocked (SSRF-01), CGNAT range
blocked (SSRF-02), IPv4 multicast blocked (SSRF-03), this-network blocked
(SSRF-04), loopback regression guard (SSRF-05), public URI passes check
(SSRF-06), and version check (SSRF-07). - Migration
sql/pg_ripple--0.120.0--0.121.0.sql— comment-only, no
schema changes. COMPATIBLE_EXTENSION_MINbumped to"0.120.0"inpg_ripple_http/src/main.rs
(release.yml compat-check gate requires ≤1 minor version lag).
v0.120.0
Nine features across the HTTP companion and Helm chart: improved PageRank explain
with URL-decoding and score lookup; admin diagnostic snapshot; tenant quota HTTP
endpoints; Rule-Library Federation (publish/subscribe); read-replica routing via
?replica=ok; per-tenant Helm values recipe; Helm PodDisruptionBudget; and
compatibility minimum bump to v0.119.0.
Added
-
Feature 7
GET /pagerank/explain/{node_iri}: URL-decodes the node IRI,
looks up the current PageRank score from_pg_ripple.pagerank_scores, and
returns a richer JSON response{"node": "...", "score": 0.xx, "top_contributors": [...], "method": "datalog_pagerank"}withdepth,
contributor,contribution, andpathfields per contributor. -
Feature 8
GET /admin/diagnostic-snapshot(requires write auth): collects
all_pg_ripple.*table row counts, non-sensitive GUC values, extension and
HTTP companion versions, and a Prometheus metrics snapshot into a single JSON. -
Tenant Quota HTTP Endpoints:
GET /tenants/{name}/quotareturns current
usage and remaining capacity;POST /tenants/{name}/quotaupdates
quota_triples. -
Feature 11 — Rule-Library Federation: SQL functions
pg_ripple.publish_rule_library(name, endpoint_uri)and
pg_ripple.subscribe_rule_library(source_uri, name). HTTP:
GET /rule-libraries/{name}/streamandPOST /rule-libraries/{name}/subscribe. -
Feature 12 — Read-Replica Routing:
?replica=okon SPARQL GET/POST routes
read-only queries to a standby pool (PG_RIPPLE_HTTP_REPLICA_DSN). -
just generate-helm-values TENANT=<name>recipe for per-tenant Helm fragments. -
Helm PodDisruptionBudget (
charts/pg_ripple/templates/pdb.yaml): enabled
by default withminAvailable: 1.
Changed
COMPATIBLE_EXTENSION_MINbumped to"0.119.0"inpg_ripple_http.
Fixed
sparql_posthandler:?replica=oknow honoured on POST requests.
v0.119.0
Three new features: owl:propertyChainAxiom support in OWL-RL built-ins (Feature 5);
persistent federation SERVICE circuit-breaker state with Prometheus gauge (Feature 6);
schema-aware NL→SPARQL with vocabulary bundle injection (Feature 10). Also fixes
property-path queries that coexist with RDF-star quoted triple patterns.
Added
-
Feature 5
owl:propertyChainAxiomrule in OWL-RL Datalog built-ins
(src/datalog/builtins.rs). A two-step chain(p1 ∘ p2 → p)is now inferred
correctly bySELECT pg_ripple.infer('owl-rl'). Cycle-safe via PG 18WITH RECURSIVE … CYCLEclause. Ten canonical pg_regress tests cover FOAF, SKOS,
PROV-O, family-chain, concurrent axioms,owl:inverseOf, 3-hop acquaintance,
rdfs:subPropertyOf, and LUBMindirectAdvisorchain. -
Feature 6
_pg_ripple.federation_circuit_statetable
(endpoint_iri TEXT PRIMARY KEY, state TEXT CHECK (state IN ('closed','open','half_open')), last_failure_at TIMESTAMPTZ, failure_count INT)persists SERVICE circuit-breaker
state across backend restarts. State transitions are UPSERTED on every open/close/
half-open event. A newpg_ripple_federation_circuit_state{endpoint="..."}Prometheus
gauge (0 = closed, 1 = open, 2 = half_open) is exposed at/metrics. -
Feature 10
pg_ripple.nl_sparql_include_bundlesGUC (boolean, defaulton).
When enabled,sparql_from_nl()automatically injects vocabulary bundle metadata
(predicate labels fromskos:prefLabel,dcterms:title,schema:name,
foaf:name) into the LLM prompt, improving NL→SPARQL accuracy for ontology-rich
datasets.
Fixed
- Property-path queries (
+,*,/,?) now execute without error when the
same SPARQL query also contains RDF-star quoted triple patterns (<< s p o >>).
The gap was in the property-path SQL generator ignoring the RDF-star graph
overlay; now the correct triple source is selected in all cases.
Migrations
sql/pg_ripple--0.118.0--0.119.0.sql— creates_pg_ripple.federation_circuit_state.