Skip to content

GoldenMatch

v2.5.0 Feature

This release adds 2 notable features for engineering teams evaluating rollout.

Published 25d Data Pipelines & ETL
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

data-cleaning data-engineering data-matching data-quality deduplication entity-resolution
+14 more
fellegi-sunter fuzzy-matching knowledge-graph llm master-data-management mcp-server polars pprl python record-linkage rust splink typescript zero-config

Affected surfaces

auth rbac

Summary

AI summary

Added PostgreSQL backend for MemoryStore and improved auto‑config name weighting with null‑sparse blocking.

Full changelog

Added

  • MemoryStore: Postgres backend for Learning Memory (#1338). MemoryStore(backend='postgres', connection=<dsn>, table_prefix='goldenmatch_') and MemoryConfig(backend='postgres', connection, dataset=<tenant>, table_prefix) persist dedupe corrections + learned adjustments in Postgres, isolated per tenant: corrections filtered by dataset, adjustments keyed (dataset, matchkey_name), and MemoryLearner(dataset=…) so learn() never pools corrections across tenants. Adds LearnedAdjustment.dataset and MemoryConfig.table_prefix (regex-guarded). Reuses the existing postgres extra (psycopg[binary]) — no new hard deps. SQLite remains the default; every existing call path, signature default, and behavior is unchanged (the dialect refactor is behavior-preserving; full SQLite memory suite green).

Changed

  • Auto-config: name_freq_weighted_jw now downweights agreements on high-frequency name values using a per-dataset frequency table (data-driven, applied across the whole score range), so identical common surnames (e.g. two "Smith") score below identical rare surnames - a higher matchkey threshold then separates same-name strangers from true matches (#1207, PR2a). Default-on; kill-switch GOLDENMATCH_TF_NAME_WEIGHTING=0 restores the static-census behavior. Validated by the CI accuracy gates (#528/DQbench/Febrl/NCVR); this is an accuracy change, not a measured-local win.
  • Auto-config: per-identifier blocking union on null-sparse multi-source data (#1207, PR1).
    When no single exact key clears the null-rate gate, build_blocking now emits a
    per-identifier blocking union (one pass per strong identifier + name/geo) instead of a
    single high-null compound that capped recall. Default-on; no behavior change when a
    low-null single exact key exists. Strong-id passes use a non-null scale gate (the runtime
    blocker filters null block keys) with a #876 perfect-surrogate exclusion. Measured blocking
    recall 1.0 vs name-only 0.004 on a planted-dup fixture, no regression on the auto-config suite.
    Scope: auto_configure_df switches to learned blocking at total_rows >= 50_000, so the
    union applies below that threshold (or when learned blocking is off) today; the >=50k
    learned-blocking interaction is a tracked follow-up.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track GoldenMatch

Get notified when new releases ship.

Sign up free

About GoldenMatch

All releases →

Related context

Related tools

Earlier breaking changes

  • v3.1.0 `GOLDENMATCH_FRAME=polars` now requires the `[polars]` extra; raises error without it.
  • vgoldencheck-v3.0.0 `inferred_type` emits neutral dtype vocabulary (str/int/uint/float/date/datetime/bool/other) instead of raw Polars dtypes.
  • vgoldencheck-v3.0.0 'inferred_type' now emits a neutral dtype vocabulary instead of raw Polars dtype strings.
  • vgoldencheck-v3.0.0 `scan_file`, `scan_dataframe`, and CLI `check` now run without Polars, using Arrow-native pyarrow.Table.
  • v3.0.0 Result frames now return pyarrow.Table instead of Polars DataFrame.

Beta — feedback welcome: [email protected]