3bf44dee2d
Content-hash census of the live graph: 1,858 redundant copies, 44.9% of the non-ISE store, all from a June id-scheme migration that re-added nodes under fresh UUIDs instead of matching on content. Generation stopped in June; the copies did not. Being byte-identical they carry identical embeddings, so they score identically against any query. Measured over 50 real query probes against the live 3,998-vector set: 40.2% of semantic seed slots were consumed by redundant copies of content already in the seed set, 92% of retrievals affected, effective distinct seeds 4.78 of 8. Two fifths of every retrieval was spent re-reading the same page. Deleting nodes is a separate operation with its own backup discipline. This change makes the runtime immune to the condition instead: redundancy can never buy a scarce slot, whatever state the graph is in. Enforced at both scarcity points — semantic seed selection (a rejected copy does not consume one of the K slots; the loop retries for the next distinct node) and WM admission via a new Pass 3+1/2 ahead of the capacity cap, so 24 slots are contested by 24 distinct meanings rather than by however many copies of one document exist. Identity is exact content hash first, then cosine >= 0.995 for copies that differ only in insignificant characters. At 768 dimensions that admits only near-verbatim text: this suppresses redundancy, never similarity. Live after restart: ~8.8 redundant seed candidates rejected per activation. New dup_seeds/dup_wm gauges in act-stats.