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:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7031061b84f2f2923ab2c4d43d472fe67bb8814f32a9b85d4dbd4444d734370a
|
|
4
|
+
data.tar.gz: dff1be7d4e8abf1757fb98934942b3ec7996dac01ce82bcf608d6b01a5a0adfd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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)
|
|
@@ -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
|