lex-apollo 0.4.30 → 0.4.44

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.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +92 -0
  3. data/README.md +42 -5
  4. data/lib/legion/extensions/apollo/actors/contradiction_scanner.rb +14 -11
  5. data/lib/legion/extensions/apollo/actors/gas_subscriber.rb +4 -6
  6. data/lib/legion/extensions/apollo/api.rb +19 -9
  7. data/lib/legion/extensions/apollo/helpers/capability.rb +8 -20
  8. data/lib/legion/extensions/apollo/helpers/confidence.rb +1 -1
  9. data/lib/legion/extensions/apollo/helpers/graph_query.rb +30 -46
  10. data/lib/legion/extensions/apollo/helpers/writeback.rb +9 -13
  11. data/lib/legion/extensions/apollo/runners/gas.rb +90 -20
  12. data/lib/legion/extensions/apollo/runners/knowledge.rb +152 -104
  13. data/lib/legion/extensions/apollo/runners/maintenance.rb +133 -34
  14. data/lib/legion/extensions/apollo/runners/request.rb +4 -5
  15. data/lib/legion/extensions/apollo/transport.rb +20 -0
  16. data/lib/legion/extensions/apollo/version.rb +1 -1
  17. data/spec/legion/extensions/apollo/actors/contradiction_scanner_spec.rb +38 -0
  18. data/spec/legion/extensions/apollo/actors/gas_subscriber_spec.rb +4 -14
  19. data/spec/legion/extensions/apollo/api_spec.rb +11 -21
  20. data/spec/legion/extensions/apollo/contradiction_spec.rb +0 -9
  21. data/spec/legion/extensions/apollo/helpers/capability_spec.rb +2 -2
  22. data/spec/legion/extensions/apollo/helpers/writeback_spec.rb +29 -1
  23. data/spec/legion/extensions/apollo/runners/corroboration_integration_spec.rb +191 -0
  24. data/spec/legion/extensions/apollo/runners/gas_deposit_integration_spec.rb +92 -0
  25. data/spec/legion/extensions/apollo/runners/gas_spec.rb +27 -33
  26. data/spec/legion/extensions/apollo/runners/ingest_transaction_integration_spec.rb +114 -0
  27. data/spec/legion/extensions/apollo/runners/knowledge_spec.rb +47 -57
  28. data/spec/legion/extensions/apollo/runners/lifecycle_integration_spec.rb +165 -0
  29. data/spec/legion/extensions/apollo/runners/maintenance_spec.rb +22 -108
  30. data/spec/legion/extensions/apollo/runners/request_spec.rb +43 -26
  31. metadata +34 -2
  32. data/spec/legion/extensions/apollo/helpers/graph_query_spec.rb +0 -100
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-apollo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.30
4
+ version: 0.4.44
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -149,6 +149,34 @@ dependencies:
149
149
  - - ">="
150
150
  - !ruby/object:Gem::Version
151
151
  version: '0'
152
+ - !ruby/object:Gem::Dependency
153
+ name: sinatra
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '4.0'
159
+ type: :development
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '4.0'
166
+ - !ruby/object:Gem::Dependency
167
+ name: sqlite3
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '2.0'
173
+ type: :development
174
+ prerelease: false
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '2.0'
152
180
  description: Durable shared knowledge with vector search, concept graph, and expertise
153
181
  tracking
154
182
  email:
@@ -199,6 +227,7 @@ files:
199
227
  - lib/legion/extensions/apollo/transport/queues/writeback_store.rb
200
228
  - lib/legion/extensions/apollo/transport/queues/writeback_vectorize.rb
201
229
  - lib/legion/extensions/apollo/version.rb
230
+ - spec/legion/extensions/apollo/actors/contradiction_scanner_spec.rb
202
231
  - spec/legion/extensions/apollo/actors/decay_spec.rb
203
232
  - spec/legion/extensions/apollo/actors/entity_watchdog_spec.rb
204
233
  - spec/legion/extensions/apollo/actors/expertise_aggregator_spec.rb
@@ -213,18 +242,21 @@ files:
213
242
  - spec/legion/extensions/apollo/helpers/capability_spec.rb
214
243
  - spec/legion/extensions/apollo/helpers/confidence_spec.rb
215
244
  - spec/legion/extensions/apollo/helpers/entity_watchdog_spec.rb
216
- - spec/legion/extensions/apollo/helpers/graph_query_spec.rb
217
245
  - spec/legion/extensions/apollo/helpers/similarity_spec.rb
218
246
  - spec/legion/extensions/apollo/helpers/tag_normalizer_spec.rb
219
247
  - spec/legion/extensions/apollo/helpers/writeback_spec.rb
248
+ - spec/legion/extensions/apollo/runners/corroboration_integration_spec.rb
220
249
  - spec/legion/extensions/apollo/runners/decay_cycle_spec.rb
221
250
  - spec/legion/extensions/apollo/runners/entity_extractor_spec.rb
222
251
  - spec/legion/extensions/apollo/runners/expertise_spec.rb
223
252
  - spec/legion/extensions/apollo/runners/gas_anticipate_spec.rb
253
+ - spec/legion/extensions/apollo/runners/gas_deposit_integration_spec.rb
224
254
  - spec/legion/extensions/apollo/runners/gas_relate_spec.rb
225
255
  - spec/legion/extensions/apollo/runners/gas_spec.rb
226
256
  - spec/legion/extensions/apollo/runners/gas_synthesize_spec.rb
257
+ - spec/legion/extensions/apollo/runners/ingest_transaction_integration_spec.rb
227
258
  - spec/legion/extensions/apollo/runners/knowledge_spec.rb
259
+ - spec/legion/extensions/apollo/runners/lifecycle_integration_spec.rb
228
260
  - spec/legion/extensions/apollo/runners/maintenance_spec.rb
229
261
  - spec/legion/extensions/apollo/runners/request_spec.rb
230
262
  - spec/legion/extensions/apollo/transport/messages/ingest_spec.rb
@@ -1,100 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'legion/extensions/apollo/helpers/graph_query'
5
-
6
- RSpec.describe Legion::Extensions::Apollo::Helpers::GraphQuery do
7
- describe 'constants' do
8
- it 'defines SPREAD_FACTOR' do
9
- expect(described_class::SPREAD_FACTOR).to eq(0.6)
10
- end
11
-
12
- it 'defines DEFAULT_DEPTH' do
13
- expect(described_class::DEFAULT_DEPTH).to eq(2)
14
- end
15
-
16
- it 'defines MIN_ACTIVATION' do
17
- expect(described_class::MIN_ACTIVATION).to eq(0.1)
18
- end
19
- end
20
-
21
- describe '.build_traversal_sql' do
22
- it 'returns SQL string with entry_id placeholder' do
23
- sql = described_class.build_traversal_sql(depth: 2)
24
- expect(sql).to include('apollo_entries')
25
- expect(sql).to include('apollo_relations')
26
- expect(sql).to include('WITH RECURSIVE')
27
- expect(sql).to include(':entry_id')
28
- end
29
-
30
- it 'includes relation type filter when specified' do
31
- sql = described_class.build_traversal_sql(depth: 2, relation_types: %w[causes depends_on])
32
- expect(sql).to include("'causes'")
33
- expect(sql).to include("'depends_on'")
34
- end
35
-
36
- it 'respects custom depth' do
37
- sql = described_class.build_traversal_sql(depth: 3)
38
- expect(sql).to include('g.depth < 3')
39
- end
40
-
41
- it 'applies spread factor and min activation' do
42
- sql = described_class.build_traversal_sql(depth: 2)
43
- expect(sql).to include('0.6')
44
- expect(sql).to include('0.1')
45
- end
46
- end
47
-
48
- describe '.build_semantic_search_sql' do
49
- it 'returns SQL with vector placeholder' do
50
- sql = described_class.build_semantic_search_sql(limit: 5, min_confidence: 0.3)
51
- expect(sql).to include('apollo_entries')
52
- expect(sql).to include(':embedding')
53
- expect(sql).to include('<=>')
54
- expect(sql).to include('LIMIT 5')
55
- end
56
-
57
- it 'includes status filter' do
58
- sql = described_class.build_semantic_search_sql(limit: 10, statuses: %w[confirmed])
59
- expect(sql).to include("'confirmed'")
60
- end
61
-
62
- it 'includes tag filter when specified' do
63
- sql = described_class.build_semantic_search_sql(limit: 10, tags: %w[vault dns])
64
- expect(sql).to include("'vault'")
65
- expect(sql).to include("'dns'")
66
- expect(sql).to include('&&')
67
- end
68
-
69
- context 'without requesting_principal_id' do
70
- it 'includes no access_scope filter' do
71
- sql = described_class.build_semantic_search_sql(limit: 5, min_confidence: 0.3)
72
- expect(sql).not_to include('access_scope')
73
- end
74
- end
75
-
76
- context 'with requesting_principal_id' do
77
- let(:sql) { described_class.build_semantic_search_sql(limit: 5, min_confidence: 0.3, requesting_principal_id: 42) }
78
-
79
- it 'allows global entries unconditionally' do
80
- expect(sql).to include("access_scope = 'global'")
81
- end
82
-
83
- it 'allows private entries owned by the principal via principal FK' do
84
- expect(sql).to include('e.identity_principal_id = 42')
85
- end
86
-
87
- it 'allows private entries owned by the principal via identity subquery (multi-provider auth)' do
88
- expect(sql).to include('SELECT id FROM identities WHERE principal_id = 42')
89
- end
90
-
91
- it 'allows team entries when principal shares a group with the submitter' do
92
- expect(sql).to include('identity_group_memberships')
93
- end
94
-
95
- it 'wraps the entire access_scope condition in parentheses so it does not break AND chaining' do
96
- expect(sql).to match(/AND \(.*access_scope.*\)/m)
97
- end
98
- end
99
- end
100
- end