lex-synapse 0.3.0 → 0.3.2

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: 60a95b064e889f6594f48ea66c0c12e8360b4679ef9daf572e31560e304ea277
4
- data.tar.gz: a96ea18996d7b3d87ee309cbba68f2258b34f40fa9a0a61068562f81f347177d
3
+ metadata.gz: 4373abd3a8ec4e508cd8d276b77fc185b667c51e7a54f389313c8b2aa3f353c4
4
+ data.tar.gz: 97df6f4f7fbef9db59155ef5aeea11636ad0c58fb82bc30a38c1f71207db39bf
5
5
  SHA512:
6
- metadata.gz: 9faa202ea887493c0ab6b3b9df9323757ca00e1fca347b0669876241ef4733aa4f333c5153c8b0a46d59fd28d6ba5e5286f5e7d541dc47d21e65ea4a9b6f554a
7
- data.tar.gz: 85411a3ec047e7d9e944b61d08c03ab3ee3868f58887b6e13c3e6ab46d1fcad3ef5a56ddf73d12cc8a32a77b4d1c2d34386caa9d2711950c464a818229fdb495
6
+ metadata.gz: e36c0ef72aa48a0315c12868ec48602ca0b91adf46c842e75da5279799daaefb49b4c80bf2d28f6af8c4ef8b6db334d491e98bf33c9877f32809bafdf0b97c56
7
+ data.tar.gz: 8570e52cee80e41d5dfc0a1c2de4a642210c471d8a4f59386e87d687815804fc22e7d73c8de1d43c31a58263876d8f44f3e3515c12e4861b6dfd1447d4414eec
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.2] - 2026-03-21
4
+
5
+ ### Fixed
6
+ - Homeostasis actor converted to self-contained pattern — was referencing non-existent `Runners::Homeostasis` and `check_homeostasis` method, now implements `action` directly using `Helpers::Homeostasis` spike/drought checks
7
+
8
+ ## [0.3.1] - 2026-03-20
9
+
10
+ ### Added
11
+ - Emit `synapse.confidence_update` event on confidence adjustment for safety metrics
12
+
3
13
  ## [0.3.0] - 2026-03-19
4
14
 
5
15
  ### Added
data/CLAUDE.md CHANGED
@@ -110,11 +110,11 @@ Legion::Extensions::Synapse
110
110
 
111
111
  ```bash
112
112
  bundle install
113
- bundle exec rspec # 366 specs, 0 failures
113
+ bundle exec rspec # 353 specs, 0 failures
114
114
  bundle exec rubocop # 0 offenses
115
115
  ```
116
116
 
117
- 366 specs, 95%+ coverage. Uses in-memory SQLite for model/runner tests.
117
+ 353 specs, 95%+ coverage. Uses in-memory SQLite for model/runner tests.
118
118
 
119
119
  ---
120
120
 
data/README.md CHANGED
@@ -146,7 +146,7 @@ Three tables: `synapses` (core routing definition + confidence + status), `synap
146
146
  ## Dependencies
147
147
 
148
148
  - `lex-conditioner` >= 0.3.0
149
- - `lex-transformer` >= 0.2.0
149
+ - `lex-transformer` >= 0.3.0
150
150
  - Ruby >= 3.4
151
151
  - [LegionIO](https://github.com/LegionIO/LegionIO) framework (for AMQP actor mode)
152
152
  - Standalone Client works without the framework (requires Sequel + database)
@@ -5,24 +5,38 @@ module Legion
5
5
  module Synapse
6
6
  module Actor
7
7
  class Homeostasis < Legion::Extensions::Actors::Every
8
- def runner_function
9
- 'check_homeostasis'
10
- end
8
+ def runner_class = self.class
9
+ def time = 30
10
+ def use_runner? = false
11
+ def check_subtask? = false
12
+ def generate_task? = false
11
13
 
12
- def time
13
- 30
14
- end
14
+ def action(**_opts)
15
+ return { status: :skipped, reason: :no_data } unless defined?(Legion::Data)
15
16
 
16
- def use_runner?
17
- false
18
- end
17
+ results = { spikes: 0, droughts: 0, updated: 0 }
18
+ return results unless defined?(Legion::Extensions::Synapse::Data::Model::Synapse)
19
19
 
20
- def check_subtask?
21
- false
22
- end
20
+ Legion::Extensions::Synapse::Data::Model::Synapse
21
+ .where(status: 'active')
22
+ .where { baseline_throughput > 0 } # rubocop:disable Style/NumericPredicate
23
+ .each do |synapse|
24
+ baseline = synapse.baseline_throughput
25
+ signals = synapse.signals_dataset.where { created_at > (Time.now - 60) }.count
26
+ current = signals.to_f
27
+
28
+ if Helpers::Homeostasis.spike?(current, baseline, duration_seconds: 60)
29
+ results[:spikes] += 1
30
+ elsif Helpers::Homeostasis.drought?(current, baseline, silent_seconds: 60)
31
+ results[:droughts] += 1
32
+ end
33
+
34
+ new_baseline = Helpers::Homeostasis.update_baseline(baseline, current)
35
+ synapse.update(baseline_throughput: new_baseline)
36
+ results[:updated] += 1
37
+ end
23
38
 
24
- def generate_task?
25
- false
39
+ results
26
40
  end
27
41
  end
28
42
  end
@@ -36,7 +36,9 @@ module Legion
36
36
  delta = ADJUSTMENTS.fetch(event, 0)
37
37
  result = confidence + delta
38
38
  result += ADJUSTMENTS[:consecutive_bonus] if event == :success && consecutive_successes > CONSECUTIVE_BONUS_THRESHOLD
39
- clamp(result)
39
+ new_confidence = clamp(result)
40
+ Legion::Events.emit('synapse.confidence_update', delta: delta, event: event, new_confidence: new_confidence) if defined?(Legion::Events)
41
+ new_confidence
40
42
  end
41
43
 
42
44
  def decay(confidence, hours: 1)
@@ -3,7 +3,7 @@
3
3
  module Legion
4
4
  module Extensions
5
5
  module Synapse
6
- VERSION = '0.3.0'
6
+ VERSION = '0.3.2'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-synapse
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity