Skip to content

v1.12.0 - Path Y: NE on exact matchkeys (DQbench 66.99 → 91.04)

Choose a tag to compare

@benzsevern benzsevern released this 10 May 17:38
bd09b43

Highlights

v1.12.0 ships Path Y — extending negative-evidence scoring to exact matchkeys. DQbench composite jumps from 66.99 → 91.04 (+24.05pp), the largest single-release gain in the suite's history. T3 F1 lands at 85.5% (from 53.8%), within the diagnostic's 85-90% projection. T2 F1 jumps to 97.5% (from 69.0%) as a bonus from the same mechanism.

What shipped

  • _apply_negative_evidence_to_exact_pairs in core/scorer.py: post-filter helper called from core/pipeline.py after find_exact_matches. Score formula: final = max(0, 1.0 - sum(disagreement_penalties)); emit if final >= matchkey.threshold (default 0.5 when NE set + threshold None).
  • promote_negative_evidence extended to walk all matchkey types (was weighted-only in v1.11). Selectively skips _is_exact_matchkey_field gate on the exact-matchkey iteration branch — its v1.11 rationale doesn't apply when iterating an exact matchkey for itself. Sets default threshold=0.5 on threshold-None exact matchkeys after adding NE.
  • Spec amendment documented: v1.11 spec §Non-goals explicitly excluded NE on exact matchkeys ("Path Y rejected as semantic confusion"); v1.12 reverses this on Phase 7 diagnostic evidence showing Path X (clustered-guard demote) couldn't reach T3.

Benchmarks (zero-config, no LLM)

Dataset v1.11.0 v1.12.0 Δ
DBLP-ACM 0.9641 0.9641 flat
Febrl3 0.9443 0.9443 flat
NCVR 0.9719 0.9719 flat
DQbench composite 66.99 91.04 +24.05pp
T1 F1 88.9% 89.3% +0.4pp
T2 F1 69.0% 97.5% +28.5pp
T3 F1 53.8% 85.5% +31.7pp

How Path Y works

T3's adversarial pattern: same email shared across distinct entities with divergent phone+address. v0 produces an exact_email matchkey that emits 1.0 for these collision pairs. Pre-v1.12, NE only applied to weighted matchkeys, so exact_email's output was uncorrectable. Path Y wires _apply_negative_evidence_to_exact_pairs as a post-filter: when phone OR address strongly disagree on a same-email pair, the cumulative penalty drops the final score below 0.5 → pair filtered. True duplicates (agreeing phone+address) preserved.

Backward compat

None. Exact matchkey without negative_evidence preserves today's binary 1.0/0.0 emit. v1.10 + v1.11 cache entries deserialize cleanly with negative_evidence=None.

Spec + plan

  • v1.12 spec: `docs/superpowers/specs/2026-05-09-autoconfig-path-y-design.md`
  • v1.12 plan: `docs/superpowers/plans/2026-05-09-autoconfig-path-y.md`
  • T3 diagnostic that motivated Path Y: `.profile_tmp/v111_t3_diagnostic.txt` (gitignored)

Full diff: v1.11.0...v1.12.0