From 841cfe035b3bc8078381cb7a2fe0268ce1624cd3 Mon Sep 17 00:00:00 2001 From: ProofOfConcept Date: Fri, 6 Mar 2026 23:43:34 -0500 Subject: [PATCH] enrich: backfill filename dedup key on content-hash hit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Transcripts mined before the filename-key feature was added had content-hash keys (#h-) but no filename keys (#f-). The daemon's fast-path check only looks at filename keys, so these sessions were re-queued every tick, hitting the content-hash dedup (0.0s) but returning early before writing the filename key — a self-perpetuating loop burning Sonnet quota on ~560 phantom re-mines per minute. Fix: when the content-hash dedup fires and no filename key exists, backfill it before returning. --- src/enrich.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/enrich.rs b/src/enrich.rs index 782fd2c..23a6bc3 100644 --- a/src/enrich.rs +++ b/src/enrich.rs @@ -274,6 +274,15 @@ pub fn experience_mine( let dedup_key = format!("_mined-transcripts.md#h-{:016x}", hash); if store.nodes.contains_key(&dedup_key) { + // Backfill filename key if missing (transcripts mined before this key existed) + let fname_key = transcript_filename_key(jsonl_path); + if !store.nodes.contains_key(&fname_key) { + let mut node = new_node(&fname_key, &format!("Backfilled from {}", dedup_key)); + node.category = store::Category::Task; + node.provenance = store::Provenance::AgentExperienceMine; + let _ = store.upsert_node(node); + store.save()?; + } println!(" Already mined this transcript ({}), skipping.", &dedup_key[24..]); return Ok(0); }