This release includes 1 breaking change for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+14 more
ReleasePort's take
Light signalResult frames now return pyarrow.Table instead of Polars DataFrame, breaking existing codepaths.
Why it matters: Affects DedupeResult and MatchResult accessors; update any downstream processing to handle pyarrow.Table before upgrading to v3.0.0.
Summary
AI summaryResult frames now return pyarrow.Table instead of Polars DataFrames, breaking existing codepaths.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Breaking | High |
Result frames now return pyarrow.Table instead of Polars DataFrame. Result frames now return pyarrow.Table instead of Polars DataFrame. Source: llm_adapter@2026-07-15 Confidence: high |
— |
| Feature | Medium |
Experimental GOLDENMATCH_FRAME=arrow ingest lane added with Polars-parity reader corpus. Experimental GOLDENMATCH_FRAME=arrow ingest lane added with Polars-parity reader corpus. Source: llm_adapter@2026-07-15 Confidence: high |
— |
| Feature | Medium |
Fused auto‑routing at golden and match seams introduced (controller‑driven). Fused auto‑routing at golden and match seams introduced (controller‑driven). Source: llm_adapter@2026-07-15 Confidence: high |
— |
| Feature | Medium |
Standalone fused golden‑record kernel (`golden_fused`) shipped as Arrow‑native, ~2x lower peak RSS. Standalone fused golden‑record kernel (`golden_fused`) shipped as Arrow‑native, ~2x lower peak RSS. Source: llm_adapter@2026-07-15 Confidence: high |
— |
| Feature | Low |
MCP naming aliases for cross‑language parity added (Python and TypeScript servers). MCP naming aliases for cross‑language parity added (Python and TypeScript servers). Source: llm_adapter@2026-07-15 Confidence: high |
— |
Full changelog
Changed
- BREAKING: result frames are now
pyarrow.Table.DedupeResult.golden/
.dupes/.uniqueandMatchResult.matched/.unmatchedreturn
pa.Tableinstead ofpl.DataFrame(Polars-eviction W5, spec
docs/superpowers/specs/2026-07-09-goldenmatch-polars-eviction-design.md).
Migration is a one-liner:pl.from_arrow(result.golden). Inputs are
unchanged (polars/pandas/arrow all accepted).to_csvand the notebook
_repr_html_render from Arrow natively. - The arrow ingest lane runs the expression stages (row-ids, standardize,
exact matchkeys) eagerly on the Frame seam; validation rules and auto-fix
are seam-routed with probed arrow twins (RE2 regex owned contract).
Added
- Experimental GOLDENMATCH_FRAME=arrow lane: file ingest via pyarrow with a polars-parity reader corpus and a frame-backend differential harness (Polars-eviction W1).
- Fused auto-routing at the golden + match seams (controller-driven). The pipeline now auto-routes covered slow-path runs to the fused Arrow-native kernels, byte-identically, with no config change and per-surface kill-switches. Golden routing is the broad, LIVE win: at the golden seam the pipeline tries
golden_fused.run_golden_fused_arrowby default on every covered slow-path config and reaches golden output at roughly 2x lower peak RSS; it declines to the classic builder (unchanged output) when the config is uncovered, the native kernel is absent, fullClusterProvenancelineage is requested, or the run is fast-path-eligible. Surfaced onDedupeResult.golden_fused_used; kill-switchGOLDENMATCH_GOLDEN_FUSED=0. Match routing is a documented DORMANT capacity-survival scaffold, not a live default. A controller post-step (maybe_route_fused_match) can short-circuit the match stage to the fused match kernel under an estimated-peak-RSS pressure gate, but the gate is deliberately narrow (auto_split=False, no identity/adaptive/memory/llm_boost/confidence_majority/full-provenance, not across-files-only, a covered weighted matchkey, and real memory pressure). Because zero-config auto-config commitsauto_split=Trueand explicit configs bypass the controller, it effectively never fires by default. When it does fire it is a capacity mode that shedsscored_pairs, cluster-confidence, and lineage to survive; markedDedupeResult.match_fused_capacity_modeand controller-telemetryrule_name+fused_match_post_step. Kill-switchGOLDENMATCH_MATCH_FUSED=0; the wake-up path (a postflight-threshold fast-follow, or an explicit opt-in) is a follow-up. New env knobs (core/fused_routing.py,ExecutionPlan.use_fused_match):GOLDENMATCH_GOLDEN_FUSED,GOLDENMATCH_MATCH_FUSED,GOLDENMATCH_FUSED_PRESSURE_FRACTION(default 0.65), and the est-RSS calibration coefficientsGOLDENMATCH_FUSED_RSS_SCALE/_BYTES_PER_PAIR/_BYTES_PER_CELL/_BLOCK_CONCURRENCY. No new native symbols (reuses thegolden_fused/match_fusedkernels), no new MCP tools / CLI commands / A2A skills. - Fused golden-record kernel (
golden_fused) - standalone, Arrow-native. A new one-FFI-call survivorship kernel (goldenmatch.core.golden_fused.run_golden_fused_arrow, gated bygolden_fused_ready) builds golden records byte-identically to the classicbuild_golden_records_batchpath at ~2x lower peak RSS (measured viascripts/bench_golden_fused_memcap.py+ thebench-golden-fused-memcapworkflow). It covers every Rust-portable survivorship rule in a single native call: scalar strategies (majority / unanimous / first_non_null / longest / source_priority / most_recent / most_complete), quality-weight tie-breaks,field_groupscorrelated survivorship, conditionalfield_rules(predicate AST lowered to a kernel RPN IR viagolden_fused_predicate.lower_predicate/predicate_lowerable),cluster_overrides, andconfidence_majority, plus per-fieldsource_row_idprovenance. Configs that need row-level validators, Python plugins, or LLM survivorship are declined (golden_fused_readyreturns False) and fall through to the classic path unchanged. Not yet wired into the pipeline - this ships as a standalone, benched kernel (composability + peak-RSS win), so no existing user-facing behavior changes. Requiresgoldenmatch-native0.1.13 (the depended-ongolden_fusedsymbol ships in that wheel); without a republished wheel,pip install goldenmatch[native]users transparently degrade to the classic golden path (not a correctness bug - byte-identical output either way). - MCP naming aliases for cross-language parity. The Python and TypeScript MCP servers previously exposed the same operations under different names (
find_duplicates/dedupe,match_record/match,explain_match/explain_pair,profile_data/profile, plus TS'sexplain_cluster). Both servers now answer to both names via non-breaking aliases, so an agent trained against either server can call the other. The Python server gainsdedupe/match/explain_pair/profile/explain_cluster; the TypeScript server gainsfind_duplicates/match_record/explain_match/profile_data. The API-parity gate enforces the nine names staysharedinparity/goldenmatch.yaml. Aliases are excluded from thegoldensuite-mcpaggregated surface so the suite'sprofilestill resolves to goldencheck's file-profiler.
Breaking Changes
- DedupeResult.golden / .dupes / .unique and MatchResult.matched / .unmatched now return pyarrow.Table instead of polars.DataFrame (Polars-eviction W5). Migration requires a one‑liner conversion e.g., pl.from_arrow(result.golden).
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
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.
- vgoldencheck-v2.0.0 Polars moved from base dependency to optional `[polars]` extra.
Beta — feedback welcome: [email protected]