fix(dedup): Intra-Run-Sibling-Dedup (Befund D)#64
Merged
Conversation
cross_reference setzt bei dup_risk=high action=extend + extend_path=<Sibling-Titel>. Zeigt das auf einen Draft DESSELBEN Laufs (keine Vault-Datei), verpufft das Signal beim Writer (write_note routet nur ueber find_existing_in_vault, nicht ueber extend_path) und beide Near-Dups werden als Vollnoten geschrieben. Neue Stage resolve_sibling_dups() wertet das vorhandene Signal aus und kollabiert Geschwister eines Laufs deterministisch zu EINER Note - ohne Eingriff ins Title-Blocking von entity_resolution (kein False-Positive-Risiko). - Union-Find-Cluster ueber Intra-Run-extend-Kanten; Survivor = hoechster critic_score (Tie: laengerer Body, dann norm-Titel -> ordnungsunabhaengig deterministisch) - verlustarm: related + source_anchors + gedroppte Titel als Aliase in den Survivor - Vault-Erhalt: Survivor erbt eine reale Vault-Dublette eines Cluster-Members - 10 Tests: Paar/Kette/Zyklus/Vault-Propagation/Slash-Titel/Tiebreak/Heading/No-FP Cross-Model-Review: Codex (HIGH#2 Vault-Loss, MED#4 Slash-Match, LOW Tiebreak/Heading) + Mistral (Survivor-Vault-Vorrang) - alle adressiert + TDD-abgesichert.
Zwei Near-Dup-Drafts mit dem realen cross_reference-Signal (B.action=extend, extend_path=<A-Titel>) ergeben nach resolve_sibling_dups + write_note GENAU eine Note-Datei (ohne Fix zwei verschiedene Slugs). Deterministische Akzeptanz-Evidenz, da der reale Ebner-Lauf das Near-Dup-Paar stochastisch nicht reproduzierte.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem (Befund D)
Zwei Near-Dup atomic Notes aus EINEM Lauf werden nicht gemergt.
cross_referenceerkennt das Dup bereits (dup_risk=high) und setztaction=extend+extend_path=<Sibling-Titel>— aber der Sibling ist eine Draft desselben Laufs, keine Vault-Datei.write_noteroutet Merge-vs-Vollnote ausschließlich überfind_existing_in_vault(title, aliases, …)und liestextend_pathgar nicht → das Signal verpufft, beide Notes werden als Vollnoten geschrieben.Die drei bestehenden Dedup-Schichten verfehlen es:
dedup_exact(nur exakte Titel),entity_resolutionStage-1-Blocking (filtert disjunkt-betitelte Near-Dups bewusst raus, um echte Geschwister zu schützen),cross_reference(läuft ins Leere, s.o.).Fix
Neue deterministische Stage
resolve_sibling_dups(drafts, existing_concepts)nach den per-Draft-Calls und vor dem Writer. Wertet das vorhandeneextend-Signal aus — kein Eingriff ins Title-Blocking, kein neuer Body-Cosine-Pass, kein zusätzlicher LLM-Call.extend-Kanten (Paare/Ketten/Zyklen)critic_score, Tie → längerer Body → norm-Titel (ordnungsunabhängig)related+source_anchors+ gedroppte Titel als Aliase wandern in den Survivor (gedroppte[[…]]-Links lösen via Alias auf, kein Dead-Link)Tests (TDD)
10 Tests in
test_sibling_dedup.py: Paar / Kette A→B→C / Zyklus A↔B / Vault-Propagation / bare-Titel-mit-Slash / ordnungsunabhängiger Tiebreak / Heading-Self-Link / kein-False-Positive-bei-Vault-Extend / Noop. Volle Suite: 603 passed.Cross-Model-Review