lex-agentic-memory 0.1.40 → 0.1.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d111b8e5f52156c7060509c6d50d9c4ffe3f7d02108e7f1fcb6a5ba03f1982d8
4
- data.tar.gz: 52db96d9807a927c29a097c7a0a47b50d63c43069e657bc7fdad57119a09152a
3
+ metadata.gz: 7031061b84f2f2923ab2c4d43d472fe67bb8814f32a9b85d4dbd4444d734370a
4
+ data.tar.gz: dff1be7d4e8abf1757fb98934942b3ec7996dac01ce82bcf608d6b01a5a0adfd
5
5
  SHA512:
6
- metadata.gz: a538816df808c0bb5da844ababdbb8dca9f02516803c4ec8791b7228f4c70c96269be9232fe69be56e107ac6a08b4d82e57bb3a7931074742420dccae8f22c56
7
- data.tar.gz: a8c41f78835e8e044ce289c0298727b1e4381598366882715836a2bafd591c8bf88223a388ca4f26cd1be2e9fac2a96a34b6a64f3a3b03c3d2501357928d5211
6
+ metadata.gz: b7c7d56ceca01dd24ec41483d78c325ae46641efbba2a1e2d25a34ca79361c5ccd983691436d705e2ae5ce6dceacdd56e5d02ee82579424126b3594cfbfdd467
7
+ data.tar.gz: 11dc7a02ab36704d3d67ffde18045dda343e7bbb7308e357cfb0d6b60092432be51568f156ae614c5daa2be0da479d889689db76bbd5b486d786b1d9ee11d34b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.41] - 2026-07-22
4
+ ### Added
5
+ - `Runners::Traces#erase_partner!(identity:)` — deletes all traces tagged `partner:<identity>` and `owner:<identity>`; returns `{ erased: true, identity:, count: }`. Prep for H8 death protocol cascade (Phase 4.5 contract gate gap).
6
+
3
7
  ## [0.1.40] - 2026-06-17
4
8
  ### Fixed
5
9
  - **Critical performance fix:** Trace store `snapshot_dirty_state` no longer serializes ALL traces to JSON on every flush — replaced boolean `@traces_dirty` flag with per-trace `@dirty_trace_ids` Set so only modified traces are serialized (O(changed) instead of O(total))
@@ -74,6 +74,20 @@ module Legion
74
74
  { deleted: true, trace_id: trace_id }
75
75
  end
76
76
 
77
+ def erase_partner!(identity:, store: nil, **)
78
+ store ||= default_store
79
+ partner_result = store.retrieve_by_domain("partner:#{identity}", min_strength: 0.0, limit: 10_000)
80
+ owner_result = store.retrieve_by_domain("owner:#{identity}", min_strength: 0.0, limit: 10_000)
81
+ traces_to_erase = Array(partner_result) + Array(owner_result)
82
+
83
+ traces_to_erase.each { |t| store.delete(t[:trace_id]) }
84
+ persist_store(store) unless traces_to_erase.empty?
85
+
86
+ count = traces_to_erase.size
87
+ log.info("[memory] erase_partner! identity=#{identity} erased=#{count}")
88
+ { erased: true, identity: identity, count: count }
89
+ end
90
+
77
91
  def retrieve_and_reinforce(limit: 10, store: nil, **)
78
92
  store ||= default_store
79
93
  all = store.all_traces(min_strength: 0.1)
@@ -4,7 +4,7 @@ module Legion
4
4
  module Extensions
5
5
  module Agentic
6
6
  module Memory
7
- VERSION = '0.1.40'
7
+ VERSION = '0.1.41'
8
8
  end
9
9
  end
10
10
  end
@@ -66,4 +66,50 @@ RSpec.describe Legion::Extensions::Agentic::Memory::Trace::Runners::Traces do
66
66
  expect(result[:found]).to be false
67
67
  end
68
68
  end
69
+
70
+ describe '#erase_partner!' do
71
+ it 'erases all partner-tagged traces for the given identity' do
72
+ 3.times { client.store_trace(type: :semantic, content_payload: {}, domain_tags: ['partner:alice']) }
73
+ 2.times { client.store_trace(type: :semantic, content_payload: {}, domain_tags: ['partner:bob']) }
74
+
75
+ result = client.erase_partner!(identity: 'alice')
76
+
77
+ expect(result[:erased]).to be true
78
+ expect(result[:identity]).to eq('alice')
79
+ expect(result[:count]).to eq(3)
80
+
81
+ expect(client.retrieve_by_domain(domain_tag: 'partner:alice')[:count]).to eq(0)
82
+ expect(client.retrieve_by_domain(domain_tag: 'partner:bob')[:count]).to eq(2)
83
+ end
84
+
85
+ it 'erases owner-tagged traces for the given identity' do
86
+ 2.times { client.store_trace(type: :semantic, content_payload: {}, domain_tags: ['owner:alice']) }
87
+ client.store_trace(type: :semantic, content_payload: {}, domain_tags: ['partner:alice'])
88
+
89
+ result = client.erase_partner!(identity: 'alice')
90
+
91
+ expect(result[:count]).to eq(3)
92
+ expect(client.retrieve_by_domain(domain_tag: 'owner:alice')[:count]).to eq(0)
93
+ expect(client.retrieve_by_domain(domain_tag: 'partner:alice')[:count]).to eq(0)
94
+ end
95
+
96
+ it 'returns count: 0 when no traces exist for the identity' do
97
+ result = client.erase_partner!(identity: 'ghost')
98
+
99
+ expect(result[:erased]).to be true
100
+ expect(result[:identity]).to eq('ghost')
101
+ expect(result[:count]).to eq(0)
102
+ end
103
+
104
+ it 'does not erase traces belonging to other identities' do
105
+ client.store_trace(type: :semantic, content_payload: {}, domain_tags: ['partner:alice'])
106
+ client.store_trace(type: :semantic, content_payload: {}, domain_tags: ['partner:bob'])
107
+ client.store_trace(type: :semantic, content_payload: {}, domain_tags: ['owner:carol'])
108
+
109
+ client.erase_partner!(identity: 'alice')
110
+
111
+ expect(client.retrieve_by_domain(domain_tag: 'partner:bob')[:count]).to eq(1)
112
+ expect(client.retrieve_by_domain(domain_tag: 'owner:carol')[:count]).to eq(1)
113
+ end
114
+ end
69
115
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-agentic-memory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.40
4
+ version: 0.1.41
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity