Skip to content

GoldenMatch

v3.4.0 Feature

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

Published 10d 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

Summary

AI summary

Embeddings are now first-class Fellegi‑Sunter scorers, fixing scalar/vector inconsistency and improving distributed/chunked lane scoring.

Changes in this release

Feature Medium

Embeddings become first-class Fellegi‑Sunter scorers for `embedding` and `record_embedding`.

Embeddings become first-class Fellegi‑Sunter scorers for `embedding` and `record_embedding`.

Source: llm_adapter@2026-07-16

Confidence: high

Feature Low

Per‑field blocking transform chains supported via `BlockingKeyConfig.field_transforms`.

Per‑field blocking transform chains supported via `BlockingKeyConfig.field_transforms`.

Source: llm_adapter@2026-07-16

Confidence: high

Performance Low

Memory‑bounded FS scoring processes one block at a time for strategy‑generated blocks.

Memory‑bounded FS scoring processes one block at a time for strategy‑generated blocks.

Source: llm_adapter@2026-07-16

Confidence: high

Bugfix Medium

Term‑frequency (`tf_adjustment`) now applies consistently on scalar FS path.

Term‑frequency (`tf_adjustment`) now applies consistently on scalar FS path.

Source: llm_adapter@2026-07-16

Confidence: high

Bugfix Medium

Distributed and chunked lanes correctly score probabilistic matchkeys using a shared `EMResult`.

Distributed and chunked lanes correctly score probabilistic matchkeys using a shared `EMResult`.

Source: llm_adapter@2026-07-16

Confidence: high

Bugfix Low

Columnar pipeline no longer demotes FS to the batched path.

Columnar pipeline no longer demotes FS to the batched path.

Source: llm_adapter@2026-07-16

Confidence: high

Bugfix Low

FS bucket lane auto‑splits oversized blocks instead of scoring them whole.

FS bucket lane auto‑splits oversized blocks instead of scoring them whole.

Source: llm_adapter@2026-07-16

Confidence: high

Bugfix Low

Missing values are treated as unobserved evidence in FS scoring.

Missing values are treated as unobserved evidence in FS scoring.

Source: llm_adapter@2026-07-16

Confidence: high

Bugfix Low

Multi‑pass EM maintains the fixed prior per pair and blocking fields.

Multi‑pass EM maintains the fixed prior per pair and blocking fields.

Source: llm_adapter@2026-07-16

Confidence: high

Bugfix Low

Splink converter maps mixed SUBSTR blocking rules exactly.

Splink converter maps mixed SUBSTR blocking rules exactly.

Source: llm_adapter@2026-07-16

Confidence: high

Full changelog

Added

  • Embeddings as first-class Fellegi-Sunter scorers. embedding /
    record_embedding fields train and score on the FS path (vectorized EM
    E-step + block scoring); they were unusable before (both EM training and the
    scalar scorer raised Unknown scorer). Model-backed scorers always run
    vectorized — GOLDENMATCH_FS_VECTORIZED=0 only affects string scorers. The
    TUI engine now routes probabilistic matchkeys through the block-scorer
    selector, so it gets native/vectorized FS too.

Fixed

  • Term-frequency (tf_adjustment) now applies on the scalar FS path, matching
    the vectorized path — the same config no longer scores differently depending on
    route (a model-backed scorer or GOLDENMATCH_FS_VECTORIZED=0 forces scalar).
  • Distributed and chunked lanes score probabilistic matchkeys. They
    previously dropped FS pairs silently, then (mid-cycle) failed loudly. Both
    lanes now score FS against ONE shared EMResult: the distributed driver
    trains once before dispatch (or loads mk.model_path driver-side;
    GOLDENMATCH_DISTRIBUTED_FS_TRAIN_ROWS bounds the training sample), and the
    chunked lane trains once on the first chunk. The loud
    NotImplementedError remains only for the bare scoring kernel invoked with
    no model source.
  • Memory-bounded FS scoring for strategy-generated blocks. Probabilistic
    matchkeys with lsh / ann / learned / canopy / sorted_neighborhood
    blocking now score through score_probabilistic_external_blocks (one block
    resident at a time, exclude-set Arc handle built once, oversized auto-split,
    native/vectorized selection) instead of the batched scorer's all-units
    accumulation. GOLDENMATCH_FS_DEFAULT_BUCKET=0 still selects the legacy
    batched scorer and now logs a warning (documented in tuning).
  • The columnar opt-in no longer demotes FS to the batched path. The
    columnar branch is structurally weighted-only, so probabilistic matchkeys
    keep the memory-bounded bucket route under GOLDENMATCH_COLUMNAR_PIPELINE=1.
  • FS bucket lane auto-splits oversized blocks (default
    skip_oversized=False path) instead of scoring them whole, and the
    vectorized scorer refuses impossible dense allocations with an actionable
    error (GOLDENMATCH_FS_VEC_MAX_ELEMS).
  • Missing values are unobserved evidence in FS scoring (null field values
    carry no likelihood contribution instead of folding into total disagreement);
    persisted v1 models without a training manifest are rejected on reuse.
  • Multi-pass EM conditions per pair and blocking fields keep the fixed
    prior
    (repairs a recall collapse on near-unique blocking fields).
  • Per-field blocking transform chains (BlockingKeyConfig.field_transforms);
    the Splink converter maps mixed SUBSTR blocking rules exactly.

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]