Skip to content

GoldenMatch

v1.11.0 Breaking

This release includes breaking changes for platform teams planning a safe upgrade.

Published 2mo 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

Adds MatchkeyConfig.negative_evidence field and related infrastructure for negative‑evidence scoring.

Full changelog

Highlights

v1.11.0 ships the negative-evidence + clustered-identity-guard infrastructure as the foundation for v1.12's T3 recovery. DQbench composite essentially unchanged at 66.99 (v1.10 was 66.91) — the indicator-driven demote rule cannot fire on real DQbench T3 because of two structural findings (collision-signal not discriminative; iteration budget exhausted). v1.12.0 (released alongside) reverses v1.11's spec §Non-goals to deliver Path Y, where T3 finally moves.

What shipped

  • MatchkeyConfig.negative_evidence: list[NegativeEvidenceField] | None field. Each entry: field, transforms, scorer, threshold, penalty. Default-None for v1.10 cache compat.
  • _apply_negative_evidence in core/scorer.py subtracts NE penalties from weighted-matchkey positive score.
  • promote_negative_evidence eager rule populates NE on weighted matchkeys for high-identity-prior columns (gated on identity_score >= 0.75 + cardinality_ratio >= 0.5 + col not in matchkey.fields + col not in blocking + col has exact-matchkey counterpart).
  • compute_identity_collision_signal lazy indicator (8s budget) + IndicatorContext.identity_collision_signal method.
  • rule_demote_clustered_identity at position 7 in DEFAULT_RULES. Threshold 0.75 (raised from 0.5 after T2 false-fire analysis).

Benchmarks (zero-config, no LLM)

| Dataset | v1.10.0 | v1.11.0 |
|---|---|---|
| DBLP-ACM | 0.9641 | 0.9641 |
| Febrl3 | 0.9443 | 0.9443 |
| NCVR | 0.9719 | 0.9719 |
| DQbench composite | 66.91 | 66.99 |

Honest framing

Shipped at parity with v1.10 — the demote rule never executes on real T3 due to iteration budget exhaustion (rule_blocking_too_coarse oscillates), and the collision_rate metric isn't discriminative (T3 = 0.59, T2 = 0.62). v1.12.0 (released alongside) addresses this via Path Y.

Breaking changes

None. Adds optional fields with default-None for v1.10 cache compat.

Full diff: https://github.com/benzsevern/goldenmatch/compare/v1.10.0...v1.11.0

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]