lex-agentic-integration 0.1.0

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 (236) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +12 -0
  3. data/Gemfile +5 -0
  4. data/LICENSE +21 -0
  5. data/README.md +13 -0
  6. data/lex-agentic-integration.gemspec +30 -0
  7. data/lib/legion/extensions/agentic/integration/boundary/client.rb +15 -0
  8. data/lib/legion/extensions/agentic/integration/boundary/helpers/boundary.rb +90 -0
  9. data/lib/legion/extensions/agentic/integration/boundary/helpers/boundary_engine.rb +123 -0
  10. data/lib/legion/extensions/agentic/integration/boundary/helpers/constants.rb +44 -0
  11. data/lib/legion/extensions/agentic/integration/boundary/runners/cognitive_boundary.rb +100 -0
  12. data/lib/legion/extensions/agentic/integration/boundary/version.rb +13 -0
  13. data/lib/legion/extensions/agentic/integration/boundary.rb +19 -0
  14. data/lib/legion/extensions/agentic/integration/context/client.rb +26 -0
  15. data/lib/legion/extensions/agentic/integration/context/helpers/constants.rb +34 -0
  16. data/lib/legion/extensions/agentic/integration/context/helpers/context_manager.rb +150 -0
  17. data/lib/legion/extensions/agentic/integration/context/helpers/frame.rb +99 -0
  18. data/lib/legion/extensions/agentic/integration/context/runners/context.rb +94 -0
  19. data/lib/legion/extensions/agentic/integration/context/version.rb +13 -0
  20. data/lib/legion/extensions/agentic/integration/context.rb +19 -0
  21. data/lib/legion/extensions/agentic/integration/distributed_cognition/client.rb +19 -0
  22. data/lib/legion/extensions/agentic/integration/distributed_cognition/helpers/constants.rb +51 -0
  23. data/lib/legion/extensions/agentic/integration/distributed_cognition/helpers/distribution_engine.rb +159 -0
  24. data/lib/legion/extensions/agentic/integration/distributed_cognition/helpers/participant.rb +100 -0
  25. data/lib/legion/extensions/agentic/integration/distributed_cognition/runners/distributed_cognition.rb +107 -0
  26. data/lib/legion/extensions/agentic/integration/distributed_cognition/version.rb +13 -0
  27. data/lib/legion/extensions/agentic/integration/distributed_cognition.rb +19 -0
  28. data/lib/legion/extensions/agentic/integration/gestalt/client.rb +21 -0
  29. data/lib/legion/extensions/agentic/integration/gestalt/helpers/constants.rb +51 -0
  30. data/lib/legion/extensions/agentic/integration/gestalt/helpers/pattern.rb +90 -0
  31. data/lib/legion/extensions/agentic/integration/gestalt/helpers/pattern_store.rb +123 -0
  32. data/lib/legion/extensions/agentic/integration/gestalt/runners/gestalt.rb +82 -0
  33. data/lib/legion/extensions/agentic/integration/gestalt/version.rb +13 -0
  34. data/lib/legion/extensions/agentic/integration/gestalt.rb +19 -0
  35. data/lib/legion/extensions/agentic/integration/global_workspace/actors/competition.rb +45 -0
  36. data/lib/legion/extensions/agentic/integration/global_workspace/client.rb +29 -0
  37. data/lib/legion/extensions/agentic/integration/global_workspace/helpers/broadcast.rb +62 -0
  38. data/lib/legion/extensions/agentic/integration/global_workspace/helpers/competitor.rb +59 -0
  39. data/lib/legion/extensions/agentic/integration/global_workspace/helpers/constants.rb +65 -0
  40. data/lib/legion/extensions/agentic/integration/global_workspace/helpers/workspace.rb +188 -0
  41. data/lib/legion/extensions/agentic/integration/global_workspace/runners/global_workspace.rb +104 -0
  42. data/lib/legion/extensions/agentic/integration/global_workspace/version.rb +13 -0
  43. data/lib/legion/extensions/agentic/integration/global_workspace.rb +20 -0
  44. data/lib/legion/extensions/agentic/integration/integration/client.rb +19 -0
  45. data/lib/legion/extensions/agentic/integration/integration/helpers/constants.rb +62 -0
  46. data/lib/legion/extensions/agentic/integration/integration/helpers/integrated_representation.rb +106 -0
  47. data/lib/legion/extensions/agentic/integration/integration/helpers/integration_engine.rb +163 -0
  48. data/lib/legion/extensions/agentic/integration/integration/helpers/modal_signal.rb +62 -0
  49. data/lib/legion/extensions/agentic/integration/integration/runners/cognitive_integration.rb +105 -0
  50. data/lib/legion/extensions/agentic/integration/integration/version.rb +13 -0
  51. data/lib/legion/extensions/agentic/integration/integration.rb +20 -0
  52. data/lib/legion/extensions/agentic/integration/labyrinth/actors/thread_walker.rb +45 -0
  53. data/lib/legion/extensions/agentic/integration/labyrinth/client.rb +23 -0
  54. data/lib/legion/extensions/agentic/integration/labyrinth/helpers/constants.rb +39 -0
  55. data/lib/legion/extensions/agentic/integration/labyrinth/helpers/labyrinth.rb +138 -0
  56. data/lib/legion/extensions/agentic/integration/labyrinth/helpers/labyrinth_engine.rb +177 -0
  57. data/lib/legion/extensions/agentic/integration/labyrinth/helpers/node.rb +64 -0
  58. data/lib/legion/extensions/agentic/integration/labyrinth/runners/cognitive_labyrinth.rb +128 -0
  59. data/lib/legion/extensions/agentic/integration/labyrinth/version.rb +13 -0
  60. data/lib/legion/extensions/agentic/integration/labyrinth.rb +22 -0
  61. data/lib/legion/extensions/agentic/integration/map/actors/decay.rb +45 -0
  62. data/lib/legion/extensions/agentic/integration/map/client.rb +29 -0
  63. data/lib/legion/extensions/agentic/integration/map/helpers/cognitive_map_store.rb +179 -0
  64. data/lib/legion/extensions/agentic/integration/map/helpers/constants.rb +71 -0
  65. data/lib/legion/extensions/agentic/integration/map/helpers/graph_traversal.rb +124 -0
  66. data/lib/legion/extensions/agentic/integration/map/helpers/location.rb +71 -0
  67. data/lib/legion/extensions/agentic/integration/map/runners/cognitive_map.rb +95 -0
  68. data/lib/legion/extensions/agentic/integration/map/version.rb +13 -0
  69. data/lib/legion/extensions/agentic/integration/map.rb +20 -0
  70. data/lib/legion/extensions/agentic/integration/mosaic/client.rb +15 -0
  71. data/lib/legion/extensions/agentic/integration/mosaic/helpers/constants.rb +55 -0
  72. data/lib/legion/extensions/agentic/integration/mosaic/helpers/mosaic.rb +111 -0
  73. data/lib/legion/extensions/agentic/integration/mosaic/helpers/mosaic_engine.rb +124 -0
  74. data/lib/legion/extensions/agentic/integration/mosaic/helpers/tessera.rb +86 -0
  75. data/lib/legion/extensions/agentic/integration/mosaic/runners/cognitive_mosaic.rb +76 -0
  76. data/lib/legion/extensions/agentic/integration/mosaic/version.rb +13 -0
  77. data/lib/legion/extensions/agentic/integration/mosaic.rb +22 -0
  78. data/lib/legion/extensions/agentic/integration/mycelium/client.rb +19 -0
  79. data/lib/legion/extensions/agentic/integration/mycelium/helpers/constants.rb +52 -0
  80. data/lib/legion/extensions/agentic/integration/mycelium/helpers/fruiting_body.rb +50 -0
  81. data/lib/legion/extensions/agentic/integration/mycelium/helpers/hypha.rb +76 -0
  82. data/lib/legion/extensions/agentic/integration/mycelium/helpers/mycelial_node.rb +72 -0
  83. data/lib/legion/extensions/agentic/integration/mycelium/helpers/mycelium_engine.rb +151 -0
  84. data/lib/legion/extensions/agentic/integration/mycelium/runners/cognitive_mycelium.rb +73 -0
  85. data/lib/legion/extensions/agentic/integration/mycelium/version.rb +13 -0
  86. data/lib/legion/extensions/agentic/integration/mycelium.rb +23 -0
  87. data/lib/legion/extensions/agentic/integration/phenomenal_binding/client.rb +25 -0
  88. data/lib/legion/extensions/agentic/integration/phenomenal_binding/helpers/binding_engine.rb +156 -0
  89. data/lib/legion/extensions/agentic/integration/phenomenal_binding/helpers/binding_unit.rb +72 -0
  90. data/lib/legion/extensions/agentic/integration/phenomenal_binding/helpers/constants.rb +35 -0
  91. data/lib/legion/extensions/agentic/integration/phenomenal_binding/helpers/stream.rb +51 -0
  92. data/lib/legion/extensions/agentic/integration/phenomenal_binding/runners/phenomenal_binding.rb +110 -0
  93. data/lib/legion/extensions/agentic/integration/phenomenal_binding/version.rb +13 -0
  94. data/lib/legion/extensions/agentic/integration/phenomenal_binding.rb +20 -0
  95. data/lib/legion/extensions/agentic/integration/qualia/client.rb +19 -0
  96. data/lib/legion/extensions/agentic/integration/qualia/helpers/constants.rb +74 -0
  97. data/lib/legion/extensions/agentic/integration/qualia/helpers/quale.rb +103 -0
  98. data/lib/legion/extensions/agentic/integration/qualia/helpers/qualia_engine.rb +142 -0
  99. data/lib/legion/extensions/agentic/integration/qualia/runners/qualia.rb +67 -0
  100. data/lib/legion/extensions/agentic/integration/qualia/version.rb +13 -0
  101. data/lib/legion/extensions/agentic/integration/qualia.rb +19 -0
  102. data/lib/legion/extensions/agentic/integration/situation_model/client.rb +28 -0
  103. data/lib/legion/extensions/agentic/integration/situation_model/helpers/client.rb +23 -0
  104. data/lib/legion/extensions/agentic/integration/situation_model/helpers/constants.rb +40 -0
  105. data/lib/legion/extensions/agentic/integration/situation_model/helpers/situation_engine.rb +73 -0
  106. data/lib/legion/extensions/agentic/integration/situation_model/helpers/situation_event.rb +56 -0
  107. data/lib/legion/extensions/agentic/integration/situation_model/helpers/situation_model.rb +90 -0
  108. data/lib/legion/extensions/agentic/integration/situation_model/runners/situation_model.rb +99 -0
  109. data/lib/legion/extensions/agentic/integration/situation_model/version.rb +13 -0
  110. data/lib/legion/extensions/agentic/integration/situation_model.rb +21 -0
  111. data/lib/legion/extensions/agentic/integration/synthesis/client.rb +29 -0
  112. data/lib/legion/extensions/agentic/integration/synthesis/helpers/constants.rb +41 -0
  113. data/lib/legion/extensions/agentic/integration/synthesis/helpers/synthesis.rb +63 -0
  114. data/lib/legion/extensions/agentic/integration/synthesis/helpers/synthesis_engine.rb +213 -0
  115. data/lib/legion/extensions/agentic/integration/synthesis/helpers/synthesis_stream.rb +67 -0
  116. data/lib/legion/extensions/agentic/integration/synthesis/runners/cognitive_synthesis.rb +82 -0
  117. data/lib/legion/extensions/agentic/integration/synthesis/version.rb +13 -0
  118. data/lib/legion/extensions/agentic/integration/synthesis.rb +20 -0
  119. data/lib/legion/extensions/agentic/integration/tapestry/client.rb +15 -0
  120. data/lib/legion/extensions/agentic/integration/tapestry/helpers/constants.rb +46 -0
  121. data/lib/legion/extensions/agentic/integration/tapestry/helpers/loom_engine.rb +125 -0
  122. data/lib/legion/extensions/agentic/integration/tapestry/helpers/tapestry.rb +144 -0
  123. data/lib/legion/extensions/agentic/integration/tapestry/helpers/thread.rb +112 -0
  124. data/lib/legion/extensions/agentic/integration/tapestry/runners/cognitive_tapestry.rb +81 -0
  125. data/lib/legion/extensions/agentic/integration/tapestry/version.rb +13 -0
  126. data/lib/legion/extensions/agentic/integration/tapestry.rb +22 -0
  127. data/lib/legion/extensions/agentic/integration/tessellation/client.rb +19 -0
  128. data/lib/legion/extensions/agentic/integration/tessellation/helpers/constants.rb +72 -0
  129. data/lib/legion/extensions/agentic/integration/tessellation/helpers/mosaic.rb +99 -0
  130. data/lib/legion/extensions/agentic/integration/tessellation/helpers/tessellation_engine.rb +141 -0
  131. data/lib/legion/extensions/agentic/integration/tessellation/helpers/tile.rb +76 -0
  132. data/lib/legion/extensions/agentic/integration/tessellation/runners/cognitive_tessellation.rb +58 -0
  133. data/lib/legion/extensions/agentic/integration/tessellation/version.rb +13 -0
  134. data/lib/legion/extensions/agentic/integration/tessellation.rb +22 -0
  135. data/lib/legion/extensions/agentic/integration/version.rb +11 -0
  136. data/lib/legion/extensions/agentic/integration/zeitgeist/helpers/client.rb +17 -0
  137. data/lib/legion/extensions/agentic/integration/zeitgeist/helpers/cognitive_signal.rb +38 -0
  138. data/lib/legion/extensions/agentic/integration/zeitgeist/helpers/constants.rb +64 -0
  139. data/lib/legion/extensions/agentic/integration/zeitgeist/helpers/trend_window.rb +80 -0
  140. data/lib/legion/extensions/agentic/integration/zeitgeist/helpers/zeitgeist_engine.rb +157 -0
  141. data/lib/legion/extensions/agentic/integration/zeitgeist/runners/cognitive_zeitgeist.rb +99 -0
  142. data/lib/legion/extensions/agentic/integration/zeitgeist/version.rb +13 -0
  143. data/lib/legion/extensions/agentic/integration/zeitgeist.rb +22 -0
  144. data/lib/legion/extensions/agentic/integration.rb +34 -0
  145. data/spec/legion/extensions/agentic/integration/boundary/helpers/boundary_engine_spec.rb +165 -0
  146. data/spec/legion/extensions/agentic/integration/boundary/helpers/boundary_spec.rb +168 -0
  147. data/spec/legion/extensions/agentic/integration/boundary/helpers/constants_spec.rb +65 -0
  148. data/spec/legion/extensions/agentic/integration/boundary/runners/cognitive_boundary_spec.rb +111 -0
  149. data/spec/legion/extensions/agentic/integration/context/client_spec.rb +58 -0
  150. data/spec/legion/extensions/agentic/integration/context/helpers/constants_spec.rb +32 -0
  151. data/spec/legion/extensions/agentic/integration/context/helpers/context_manager_spec.rb +190 -0
  152. data/spec/legion/extensions/agentic/integration/context/helpers/frame_spec.rb +164 -0
  153. data/spec/legion/extensions/agentic/integration/context/runners/context_spec.rb +142 -0
  154. data/spec/legion/extensions/agentic/integration/distributed_cognition/client_spec.rb +21 -0
  155. data/spec/legion/extensions/agentic/integration/distributed_cognition/helpers/distribution_engine_spec.rb +149 -0
  156. data/spec/legion/extensions/agentic/integration/distributed_cognition/helpers/participant_spec.rb +116 -0
  157. data/spec/legion/extensions/agentic/integration/distributed_cognition/runners/distributed_cognition_spec.rb +102 -0
  158. data/spec/legion/extensions/agentic/integration/gestalt/client_spec.rb +53 -0
  159. data/spec/legion/extensions/agentic/integration/gestalt/helpers/constants_spec.rb +27 -0
  160. data/spec/legion/extensions/agentic/integration/gestalt/helpers/pattern_spec.rb +128 -0
  161. data/spec/legion/extensions/agentic/integration/gestalt/helpers/pattern_store_spec.rb +155 -0
  162. data/spec/legion/extensions/agentic/integration/gestalt/runners/gestalt_spec.rb +114 -0
  163. data/spec/legion/extensions/agentic/integration/global_workspace/client_spec.rb +49 -0
  164. data/spec/legion/extensions/agentic/integration/global_workspace/helpers/broadcast_spec.rb +83 -0
  165. data/spec/legion/extensions/agentic/integration/global_workspace/helpers/competitor_spec.rb +84 -0
  166. data/spec/legion/extensions/agentic/integration/global_workspace/helpers/workspace_spec.rb +174 -0
  167. data/spec/legion/extensions/agentic/integration/global_workspace/runners/global_workspace_spec.rb +118 -0
  168. data/spec/legion/extensions/agentic/integration/integration/cognitive_integration_spec.rb +7 -0
  169. data/spec/legion/extensions/agentic/integration/integration/helpers/integrated_representation_spec.rb +149 -0
  170. data/spec/legion/extensions/agentic/integration/integration/helpers/integration_engine_spec.rb +191 -0
  171. data/spec/legion/extensions/agentic/integration/integration/helpers/modal_signal_spec.rb +81 -0
  172. data/spec/legion/extensions/agentic/integration/labyrinth/client_spec.rb +122 -0
  173. data/spec/legion/extensions/agentic/integration/labyrinth/cognitive_labyrinth_spec.rb +19 -0
  174. data/spec/legion/extensions/agentic/integration/labyrinth/helpers/constants_spec.rb +72 -0
  175. data/spec/legion/extensions/agentic/integration/labyrinth/helpers/labyrinth_engine_spec.rb +222 -0
  176. data/spec/legion/extensions/agentic/integration/labyrinth/helpers/labyrinth_spec.rb +235 -0
  177. data/spec/legion/extensions/agentic/integration/labyrinth/helpers/node_spec.rb +157 -0
  178. data/spec/legion/extensions/agentic/integration/labyrinth/runners/cognitive_labyrinth_spec.rb +209 -0
  179. data/spec/legion/extensions/agentic/integration/map/client_spec.rb +89 -0
  180. data/spec/legion/extensions/agentic/integration/map/helpers/cognitive_map_store_spec.rb +321 -0
  181. data/spec/legion/extensions/agentic/integration/map/helpers/location_spec.rb +165 -0
  182. data/spec/legion/extensions/agentic/integration/map/runners/cognitive_map_spec.rb +190 -0
  183. data/spec/legion/extensions/agentic/integration/mosaic/client_spec.rb +16 -0
  184. data/spec/legion/extensions/agentic/integration/mosaic/helpers/constants_spec.rb +37 -0
  185. data/spec/legion/extensions/agentic/integration/mosaic/helpers/mosaic_engine_spec.rb +108 -0
  186. data/spec/legion/extensions/agentic/integration/mosaic/helpers/mosaic_spec.rb +120 -0
  187. data/spec/legion/extensions/agentic/integration/mosaic/helpers/tessera_spec.rb +92 -0
  188. data/spec/legion/extensions/agentic/integration/mosaic/runners/cognitive_mosaic_spec.rb +88 -0
  189. data/spec/legion/extensions/agentic/integration/mycelium/client_spec.rb +25 -0
  190. data/spec/legion/extensions/agentic/integration/mycelium/cognitive_mycelium_spec.rb +7 -0
  191. data/spec/legion/extensions/agentic/integration/mycelium/helpers/constants_spec.rb +28 -0
  192. data/spec/legion/extensions/agentic/integration/mycelium/helpers/fruiting_body_spec.rb +33 -0
  193. data/spec/legion/extensions/agentic/integration/mycelium/helpers/hypha_spec.rb +69 -0
  194. data/spec/legion/extensions/agentic/integration/mycelium/helpers/mycelial_node_spec.rb +79 -0
  195. data/spec/legion/extensions/agentic/integration/mycelium/helpers/mycelium_engine_spec.rb +136 -0
  196. data/spec/legion/extensions/agentic/integration/mycelium/runners/cognitive_mycelium_spec.rb +61 -0
  197. data/spec/legion/extensions/agentic/integration/phenomenal_binding/client_spec.rb +52 -0
  198. data/spec/legion/extensions/agentic/integration/phenomenal_binding/helpers/binding_engine_spec.rb +290 -0
  199. data/spec/legion/extensions/agentic/integration/phenomenal_binding/helpers/binding_unit_spec.rb +195 -0
  200. data/spec/legion/extensions/agentic/integration/phenomenal_binding/helpers/constants_spec.rb +92 -0
  201. data/spec/legion/extensions/agentic/integration/phenomenal_binding/helpers/stream_spec.rb +128 -0
  202. data/spec/legion/extensions/agentic/integration/phenomenal_binding/runners/phenomenal_binding_spec.rb +174 -0
  203. data/spec/legion/extensions/agentic/integration/qualia/client_spec.rb +21 -0
  204. data/spec/legion/extensions/agentic/integration/qualia/helpers/quale_spec.rb +168 -0
  205. data/spec/legion/extensions/agentic/integration/qualia/helpers/qualia_engine_spec.rb +174 -0
  206. data/spec/legion/extensions/agentic/integration/qualia/qualia_spec.rb +7 -0
  207. data/spec/legion/extensions/agentic/integration/qualia/runners_spec.rb +70 -0
  208. data/spec/legion/extensions/agentic/integration/situation_model/client_spec.rb +51 -0
  209. data/spec/legion/extensions/agentic/integration/situation_model/helpers/constants_spec.rb +56 -0
  210. data/spec/legion/extensions/agentic/integration/situation_model/helpers/situation_engine_spec.rb +203 -0
  211. data/spec/legion/extensions/agentic/integration/situation_model/helpers/situation_event_spec.rb +94 -0
  212. data/spec/legion/extensions/agentic/integration/situation_model/helpers/situation_model_spec.rb +235 -0
  213. data/spec/legion/extensions/agentic/integration/situation_model/runners/situation_model_spec.rb +204 -0
  214. data/spec/legion/extensions/agentic/integration/synthesis/client_spec.rb +26 -0
  215. data/spec/legion/extensions/agentic/integration/synthesis/helpers/constants_spec.rb +87 -0
  216. data/spec/legion/extensions/agentic/integration/synthesis/helpers/synthesis_engine_spec.rb +233 -0
  217. data/spec/legion/extensions/agentic/integration/synthesis/helpers/synthesis_spec.rb +101 -0
  218. data/spec/legion/extensions/agentic/integration/synthesis/helpers/synthesis_stream_spec.rb +116 -0
  219. data/spec/legion/extensions/agentic/integration/synthesis/runners/cognitive_synthesis_spec.rb +181 -0
  220. data/spec/legion/extensions/agentic/integration/tapestry/client_spec.rb +55 -0
  221. data/spec/legion/extensions/agentic/integration/tapestry/helpers/constants_spec.rb +88 -0
  222. data/spec/legion/extensions/agentic/integration/tapestry/helpers/loom_engine_spec.rb +225 -0
  223. data/spec/legion/extensions/agentic/integration/tapestry/helpers/tapestry_spec.rb +229 -0
  224. data/spec/legion/extensions/agentic/integration/tapestry/helpers/thread_spec.rb +211 -0
  225. data/spec/legion/extensions/agentic/integration/tapestry/runners/cognitive_tapestry_spec.rb +171 -0
  226. data/spec/legion/extensions/agentic/integration/tessellation/client_spec.rb +40 -0
  227. data/spec/legion/extensions/agentic/integration/tessellation/helpers/mosaic_spec.rb +99 -0
  228. data/spec/legion/extensions/agentic/integration/tessellation/helpers/tessellation_engine_spec.rb +145 -0
  229. data/spec/legion/extensions/agentic/integration/tessellation/helpers/tile_spec.rb +138 -0
  230. data/spec/legion/extensions/agentic/integration/zeitgeist/helpers/cognitive_signal_spec.rb +62 -0
  231. data/spec/legion/extensions/agentic/integration/zeitgeist/helpers/constants_spec.rb +73 -0
  232. data/spec/legion/extensions/agentic/integration/zeitgeist/helpers/trend_window_spec.rb +100 -0
  233. data/spec/legion/extensions/agentic/integration/zeitgeist/helpers/zeitgeist_engine_spec.rb +163 -0
  234. data/spec/legion/extensions/agentic/integration/zeitgeist/runners/cognitive_zeitgeist_spec.rb +165 -0
  235. data/spec/spec_helper.rb +46 -0
  236. metadata +320 -0
@@ -0,0 +1,174 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/integration/phenomenal_binding/client'
4
+
5
+ RSpec.describe Legion::Extensions::Agentic::Integration::PhenomenalBinding::Runners::PhenomenalBinding do
6
+ let(:client) { Legion::Extensions::Agentic::Integration::PhenomenalBinding::Client.new }
7
+
8
+ describe '#register_stream' do
9
+ it 'returns a registered status' do
10
+ result = client.register_stream(stream_type: :perception, content: 'red circle')
11
+ expect(result[:status]).to eq(:registered)
12
+ end
13
+
14
+ it 'returns a stream hash' do
15
+ result = client.register_stream(stream_type: :thought, content: 'abstract idea')
16
+ expect(result[:stream]).to be_a(Hash)
17
+ expect(result[:stream][:id]).to be_a(String)
18
+ end
19
+
20
+ it 'uses the given stream_type' do
21
+ result = client.register_stream(stream_type: :emotion, content: 'joy')
22
+ expect(result[:stream][:stream_type]).to eq(:emotion)
23
+ end
24
+
25
+ it 'accepts custom salience' do
26
+ result = client.register_stream(stream_type: :memory, content: 'vivid', salience: 0.9)
27
+ expect(result[:stream][:salience]).to eq(0.9)
28
+ end
29
+ end
30
+
31
+ describe '#create_binding' do
32
+ it 'returns a bound status' do
33
+ s = client.register_stream(stream_type: :perception, content: 'a')
34
+ result = client.create_binding(stream_ids: [s[:stream][:id]], binding_type: :perceptual)
35
+ expect(result[:status]).to eq(:bound)
36
+ end
37
+
38
+ it 'returns a binding hash' do
39
+ s = client.register_stream(stream_type: :thought, content: 'concept')
40
+ result = client.create_binding(stream_ids: [s[:stream][:id]], binding_type: :conceptual)
41
+ expect(result[:binding]).to be_a(Hash)
42
+ expect(result[:binding][:binding_type]).to eq(:conceptual)
43
+ end
44
+
45
+ it 'coherence reflects stream saliences' do
46
+ s = client.register_stream(stream_type: :perception, content: 'bright', salience: 0.8)
47
+ result = client.create_binding(stream_ids: [s[:stream][:id]], binding_type: :perceptual)
48
+ expect(result[:binding][:coherence]).to be_within(0.001).of(0.8)
49
+ end
50
+ end
51
+
52
+ describe '#reinforce_binding' do
53
+ it 'returns reinforced status for valid binding' do
54
+ s = client.register_stream(stream_type: :intention, content: 'goal')
55
+ b = client.create_binding(stream_ids: [s[:stream][:id]], binding_type: :narrative)
56
+ result = client.reinforce_binding(binding_id: b[:binding][:id])
57
+ expect(result[:status]).to eq(:reinforced)
58
+ end
59
+
60
+ it 'returns not_found for unknown binding' do
61
+ result = client.reinforce_binding(binding_id: 'bogus')
62
+ expect(result[:status]).to eq(:not_found)
63
+ end
64
+ end
65
+
66
+ describe '#dissolve_binding' do
67
+ it 'returns dissolved status for valid binding' do
68
+ s = client.register_stream(stream_type: :memory, content: 'past')
69
+ b = client.create_binding(stream_ids: [s[:stream][:id]], binding_type: :temporal)
70
+ result = client.dissolve_binding(binding_id: b[:binding][:id])
71
+ expect(result[:status]).to eq(:dissolved)
72
+ end
73
+
74
+ it 'returns not_found for unknown binding' do
75
+ result = client.dissolve_binding(binding_id: 'ghost')
76
+ expect(result[:status]).to eq(:not_found)
77
+ end
78
+ end
79
+
80
+ describe '#unified_experience' do
81
+ it 'returns nil unified_experience when no coherent bindings' do
82
+ result = client.unified_experience
83
+ expect(result[:unified_experience]).to be_nil
84
+ end
85
+
86
+ it 'returns a binding hash when coherent binding exists' do
87
+ s = client.register_stream(stream_type: :perception, content: 'vivid', salience: 0.9)
88
+ client.create_binding(stream_ids: [s[:stream][:id]], binding_type: :perceptual)
89
+ result = client.unified_experience
90
+ expect(result[:unified_experience]).to be_a(Hash)
91
+ end
92
+ end
93
+
94
+ describe '#fragmentation_index' do
95
+ it 'returns fragmentation_index key' do
96
+ result = client.fragmentation_index
97
+ expect(result).to have_key(:fragmentation_index)
98
+ end
99
+
100
+ it 'returns 0.0 when no streams exist' do
101
+ expect(client.fragmentation_index[:fragmentation_index]).to eq(0.0)
102
+ end
103
+
104
+ it 'returns 1.0 when all streams are unbound' do
105
+ client.register_stream(stream_type: :thought, content: 'loose')
106
+ expect(client.fragmentation_index[:fragmentation_index]).to eq(1.0)
107
+ end
108
+ end
109
+
110
+ describe '#binding_by_type' do
111
+ it 'returns bindings of the requested type' do
112
+ s = client.register_stream(stream_type: :prediction, content: 'forecast')
113
+ client.create_binding(stream_ids: [s[:stream][:id]], binding_type: :temporal)
114
+ result = client.binding_by_type(binding_type: :temporal)
115
+ expect(result[:binding_type]).to eq(:temporal)
116
+ expect(result[:bindings].size).to eq(1)
117
+ end
118
+
119
+ it 'returns empty array for absent type' do
120
+ result = client.binding_by_type(binding_type: :narrative)
121
+ expect(result[:bindings]).to be_empty
122
+ end
123
+ end
124
+
125
+ describe '#streams_for_binding' do
126
+ it 'returns streams belonging to the binding' do
127
+ s = client.register_stream(stream_type: :emotion, content: 'warmth')
128
+ b = client.create_binding(stream_ids: [s[:stream][:id]], binding_type: :emotional)
129
+ result = client.streams_for_binding(binding_id: b[:binding][:id])
130
+ expect(result[:streams].size).to eq(1)
131
+ expect(result[:streams].first[:id]).to eq(s[:stream][:id])
132
+ end
133
+ end
134
+
135
+ describe '#unbound_streams' do
136
+ it 'returns all streams when nothing is bound' do
137
+ client.register_stream(stream_type: :intention, content: 'plan')
138
+ result = client.unbound_streams
139
+ expect(result[:unbound_streams].size).to eq(1)
140
+ end
141
+ end
142
+
143
+ describe '#decay_all' do
144
+ it 'returns decayed status' do
145
+ result = client.decay_all
146
+ expect(result[:status]).to eq(:decayed)
147
+ end
148
+ end
149
+
150
+ describe '#prune_incoherent' do
151
+ it 'returns pruned status' do
152
+ result = client.prune_incoherent
153
+ expect(result[:status]).to eq(:pruned)
154
+ end
155
+ end
156
+
157
+ describe '#consciousness_report' do
158
+ it 'returns all expected report keys' do
159
+ report = client.consciousness_report
160
+ expect(report.keys).to include(
161
+ :unified_experience, :fragmentation_index,
162
+ :coherence_distribution, :stream_count, :binding_count, :unbound_count
163
+ )
164
+ end
165
+ end
166
+
167
+ describe '#engine_stats' do
168
+ it 'returns engine stats hash' do
169
+ stats = client.engine_stats
170
+ expect(stats[:stream_count]).to eq(0)
171
+ expect(stats[:binding_count]).to eq(0)
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Integration::Qualia::Client do
4
+ subject(:client) { described_class.new }
5
+
6
+ it 'responds to runner methods' do
7
+ expect(client).to respond_to(:create_quale, :fade_all, :qualia_status)
8
+ end
9
+
10
+ it 'runs a full qualia lifecycle' do
11
+ result = client.create_quale(content: 'sharp insight', modality: :emotional,
12
+ quality: :sharp, texture: :crystalline, vividness: 0.8)
13
+ quale_id = result[:quale][:id]
14
+
15
+ client.intensify_quale(quale_id: quale_id)
16
+ client.fade_all
17
+
18
+ status = client.qualia_status
19
+ expect(status[:total_experiences]).to eq(1)
20
+ end
21
+ end
@@ -0,0 +1,168 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Integration::Qualia::Helpers::Quale do
4
+ subject(:quale) { described_class.new(content: 'warmth of recognition') }
5
+
6
+ describe '#initialize' do
7
+ it 'assigns a UUID id' do
8
+ expect(quale.id).to match(/\A[0-9a-f-]{36}\z/)
9
+ end
10
+
11
+ it 'stores content' do
12
+ expect(quale.content).to eq('warmth of recognition')
13
+ end
14
+
15
+ it 'defaults modality to :abstract' do
16
+ expect(quale.modality).to eq(:abstract)
17
+ end
18
+
19
+ it 'defaults quality to :smooth' do
20
+ expect(quale.quality).to eq(:smooth)
21
+ end
22
+
23
+ it 'defaults texture to :fluid' do
24
+ expect(quale.texture).to eq(:fluid)
25
+ end
26
+
27
+ it 'defaults vividness' do
28
+ expect(quale.vividness).to eq(0.5)
29
+ end
30
+
31
+ it 'defaults valence to 0.0' do
32
+ expect(quale.valence).to eq(0.0)
33
+ end
34
+
35
+ it 'clamps vividness' do
36
+ high = described_class.new(content: 'x', vividness: 5.0)
37
+ expect(high.vividness).to eq(1.0)
38
+ end
39
+
40
+ it 'clamps valence' do
41
+ extreme = described_class.new(content: 'x', valence: -5.0)
42
+ expect(extreme.valence).to eq(-1.0)
43
+ end
44
+
45
+ it 'validates modality' do
46
+ bad = described_class.new(content: 'x', modality: :nonexistent)
47
+ expect(bad.modality).to eq(:abstract)
48
+ end
49
+
50
+ it 'validates quality' do
51
+ bad = described_class.new(content: 'x', quality: :nonexistent)
52
+ expect(bad.quality).to eq(:smooth)
53
+ end
54
+
55
+ it 'validates texture' do
56
+ bad = described_class.new(content: 'x', texture: :nonexistent)
57
+ expect(bad.texture).to eq(:fluid)
58
+ end
59
+ end
60
+
61
+ describe '#intensify!' do
62
+ it 'increases vividness' do
63
+ original = quale.vividness
64
+ quale.intensify!
65
+ expect(quale.vividness).to be > original
66
+ end
67
+
68
+ it 'clamps at 1.0' do
69
+ 20.times { quale.intensify! }
70
+ expect(quale.vividness).to eq(1.0)
71
+ end
72
+ end
73
+
74
+ describe '#fade!' do
75
+ it 'decreases vividness' do
76
+ original = quale.vividness
77
+ quale.fade!
78
+ expect(quale.vividness).to be < original
79
+ end
80
+
81
+ it 'clamps at 0.0' do
82
+ 50.times { quale.fade! }
83
+ expect(quale.vividness).to eq(0.0)
84
+ end
85
+ end
86
+
87
+ describe '#vivid?' do
88
+ it 'is false at default vividness' do
89
+ expect(quale.vivid?).to be false
90
+ end
91
+
92
+ it 'is true when vivid' do
93
+ vivid = described_class.new(content: 'x', vividness: 0.8)
94
+ expect(vivid.vivid?).to be true
95
+ end
96
+ end
97
+
98
+ describe '#faint?' do
99
+ it 'is false at default vividness' do
100
+ expect(quale.faint?).to be false
101
+ end
102
+
103
+ it 'is true when faint' do
104
+ faint = described_class.new(content: 'x', vividness: 0.1)
105
+ expect(faint.faint?).to be true
106
+ end
107
+ end
108
+
109
+ describe '#intense?' do
110
+ it 'is true when very vivid' do
111
+ intense = described_class.new(content: 'x', vividness: 0.9)
112
+ expect(intense.intense?).to be true
113
+ end
114
+ end
115
+
116
+ describe '#pleasant?' do
117
+ it 'is true for positive valence' do
118
+ pleasant = described_class.new(content: 'x', valence: 0.5)
119
+ expect(pleasant.pleasant?).to be true
120
+ end
121
+
122
+ it 'is false for negative valence' do
123
+ expect(quale.pleasant?).to be false
124
+ end
125
+ end
126
+
127
+ describe '#unpleasant?' do
128
+ it 'is true for negative valence' do
129
+ unpleasant = described_class.new(content: 'x', valence: -0.5)
130
+ expect(unpleasant.unpleasant?).to be true
131
+ end
132
+ end
133
+
134
+ describe '#neutral_valence?' do
135
+ it 'is true at default valence' do
136
+ expect(quale.neutral_valence?).to be true
137
+ end
138
+ end
139
+
140
+ describe '#phenomenal_richness' do
141
+ it 'returns a value between 0 and 1' do
142
+ expect(quale.phenomenal_richness).to be_between(0.0, 1.0)
143
+ end
144
+ end
145
+
146
+ describe '#persistence' do
147
+ it 'is 1.0 initially' do
148
+ expect(quale.persistence).to eq(1.0)
149
+ end
150
+
151
+ it 'decreases after fading' do
152
+ quale.fade!
153
+ expect(quale.persistence).to be < 1.0
154
+ end
155
+ end
156
+
157
+ describe '#to_h' do
158
+ it 'includes all fields' do
159
+ hash = quale.to_h
160
+ expect(hash).to include(
161
+ :id, :content, :modality, :quality, :texture, :vividness,
162
+ :original_vividness, :valence, :phenomenal_richness,
163
+ :vivid, :faint, :intense, :vividness_label, :valence_label,
164
+ :persistence, :created_at
165
+ )
166
+ end
167
+ end
168
+ end
@@ -0,0 +1,174 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Integration::Qualia::Helpers::QualiaEngine do
4
+ subject(:engine) { described_class.new }
5
+
6
+ describe '#create_quale' do
7
+ it 'creates and stores a quale' do
8
+ quale = engine.create_quale(content: 'sharpness of insight')
9
+ expect(quale.content).to eq('sharpness of insight')
10
+ end
11
+ end
12
+
13
+ describe '#intensify' do
14
+ it 'increases vividness' do
15
+ quale = engine.create_quale(content: 'test')
16
+ original = quale.vividness
17
+ engine.intensify(quale_id: quale.id)
18
+ expect(quale.vividness).to be > original
19
+ end
20
+
21
+ it 'returns nil for unknown quale' do
22
+ expect(engine.intensify(quale_id: 'bad')).to be_nil
23
+ end
24
+ end
25
+
26
+ describe '#fade_all!' do
27
+ it 'fades all qualia' do
28
+ quale = engine.create_quale(content: 'test')
29
+ original = quale.vividness
30
+ engine.fade_all!
31
+ expect(quale.vividness).to be < original
32
+ end
33
+ end
34
+
35
+ describe '#vivid_experiences' do
36
+ it 'returns vivid qualia' do
37
+ engine.create_quale(content: 'vivid', vividness: 0.8)
38
+ engine.create_quale(content: 'faint', vividness: 0.2)
39
+ expect(engine.vivid_experiences.size).to eq(1)
40
+ end
41
+ end
42
+
43
+ describe '#faint_experiences' do
44
+ it 'returns faint qualia' do
45
+ engine.create_quale(content: 'faint', vividness: 0.1)
46
+ expect(engine.faint_experiences.size).to eq(1)
47
+ end
48
+ end
49
+
50
+ describe '#by_modality' do
51
+ it 'filters by modality' do
52
+ engine.create_quale(content: 'a', modality: :visual)
53
+ engine.create_quale(content: 'b', modality: :auditory)
54
+ expect(engine.by_modality(modality: :visual).size).to eq(1)
55
+ end
56
+ end
57
+
58
+ describe '#by_quality' do
59
+ it 'filters by quality' do
60
+ engine.create_quale(content: 'a', quality: :sharp)
61
+ engine.create_quale(content: 'b', quality: :warm)
62
+ expect(engine.by_quality(quality: :sharp).size).to eq(1)
63
+ end
64
+ end
65
+
66
+ describe '#by_texture' do
67
+ it 'filters by texture' do
68
+ engine.create_quale(content: 'a', texture: :metallic)
69
+ engine.create_quale(content: 'b', texture: :velvet)
70
+ expect(engine.by_texture(texture: :metallic).size).to eq(1)
71
+ end
72
+ end
73
+
74
+ describe '#pleasant_experiences' do
75
+ it 'returns pleasant qualia' do
76
+ engine.create_quale(content: 'nice', valence: 0.5)
77
+ engine.create_quale(content: 'bad', valence: -0.5)
78
+ expect(engine.pleasant_experiences.size).to eq(1)
79
+ end
80
+ end
81
+
82
+ describe '#unpleasant_experiences' do
83
+ it 'returns unpleasant qualia' do
84
+ engine.create_quale(content: 'bad', valence: -0.5)
85
+ expect(engine.unpleasant_experiences.size).to eq(1)
86
+ end
87
+ end
88
+
89
+ describe '#most_vivid' do
90
+ it 'returns sorted by vividness descending' do
91
+ engine.create_quale(content: 'dim', vividness: 0.3)
92
+ bright = engine.create_quale(content: 'bright', vividness: 0.9)
93
+ expect(engine.most_vivid(limit: 1).first.id).to eq(bright.id)
94
+ end
95
+ end
96
+
97
+ describe '#average_vividness' do
98
+ it 'returns 0.0 with no qualia' do
99
+ expect(engine.average_vividness).to eq(0.0)
100
+ end
101
+
102
+ it 'computes average' do
103
+ engine.create_quale(content: 'a', vividness: 0.4)
104
+ engine.create_quale(content: 'b', vividness: 0.6)
105
+ expect(engine.average_vividness).to eq(0.5)
106
+ end
107
+ end
108
+
109
+ describe '#average_valence' do
110
+ it 'returns 0.0 with no qualia' do
111
+ expect(engine.average_valence).to eq(0.0)
112
+ end
113
+ end
114
+
115
+ describe '#phenomenal_richness' do
116
+ it 'returns 0.0 with no qualia' do
117
+ expect(engine.phenomenal_richness).to eq(0.0)
118
+ end
119
+
120
+ it 'returns positive with qualia' do
121
+ engine.create_quale(content: 'test', vividness: 0.8)
122
+ expect(engine.phenomenal_richness).to be > 0.0
123
+ end
124
+ end
125
+
126
+ describe '#modality_distribution' do
127
+ it 'returns counts per modality' do
128
+ engine.create_quale(content: 'a', modality: :visual)
129
+ dist = engine.modality_distribution
130
+ expect(dist[:visual]).to eq(1)
131
+ expect(dist[:auditory]).to eq(0)
132
+ end
133
+ end
134
+
135
+ describe '#experiential_diversity' do
136
+ it 'returns 0.0 with no qualia' do
137
+ expect(engine.experiential_diversity).to eq(0.0)
138
+ end
139
+
140
+ it 'increases with diverse modalities' do
141
+ engine.create_quale(content: 'a', modality: :visual)
142
+ engine.create_quale(content: 'b', modality: :auditory)
143
+ expect(engine.experiential_diversity).to be > 0.0
144
+ end
145
+ end
146
+
147
+ describe '#quality_palette' do
148
+ it 'returns quality frequencies' do
149
+ engine.create_quale(content: 'a', quality: :sharp)
150
+ engine.create_quale(content: 'b', quality: :sharp)
151
+ palette = engine.quality_palette
152
+ expect(palette[:sharp]).to eq(2)
153
+ end
154
+ end
155
+
156
+ describe '#qualia_report' do
157
+ it 'includes all report fields' do
158
+ report = engine.qualia_report
159
+ expect(report).to include(
160
+ :total_experiences, :vivid_count, :faint_count,
161
+ :pleasant_count, :unpleasant_count, :average_vividness,
162
+ :average_valence, :phenomenal_richness, :experiential_diversity,
163
+ :richness_label, :most_vivid
164
+ )
165
+ end
166
+ end
167
+
168
+ describe '#to_h' do
169
+ it 'includes summary fields' do
170
+ hash = engine.to_h
171
+ expect(hash).to include(:total_experiences, :vivid, :avg_vividness, :avg_valence, :richness)
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Integration::Qualia do
4
+ it 'has a version number' do
5
+ expect(Legion::Extensions::Agentic::Integration::Qualia::VERSION).to eq('0.1.0')
6
+ end
7
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Integration::Qualia::Runners::Qualia do
4
+ let(:engine) { Legion::Extensions::Agentic::Integration::Qualia::Helpers::QualiaEngine.new }
5
+ let(:runner) do
6
+ obj = Object.new
7
+ obj.extend(described_class)
8
+ obj.instance_variable_set(:@default_engine, engine)
9
+ obj
10
+ end
11
+
12
+ describe '#create_quale' do
13
+ it 'returns success with quale hash' do
14
+ result = runner.create_quale(content: 'test', engine: engine)
15
+ expect(result[:success]).to be true
16
+ expect(result[:quale][:content]).to eq('test')
17
+ end
18
+ end
19
+
20
+ describe '#intensify_quale' do
21
+ it 'returns success for known quale' do
22
+ quale = engine.create_quale(content: 'test')
23
+ result = runner.intensify_quale(quale_id: quale.id, engine: engine)
24
+ expect(result[:success]).to be true
25
+ end
26
+
27
+ it 'returns failure for unknown quale' do
28
+ result = runner.intensify_quale(quale_id: 'bad', engine: engine)
29
+ expect(result[:success]).to be false
30
+ end
31
+ end
32
+
33
+ describe '#fade_all' do
34
+ it 'returns success' do
35
+ result = runner.fade_all(engine: engine)
36
+ expect(result[:success]).to be true
37
+ end
38
+ end
39
+
40
+ describe '#vivid_experiences' do
41
+ it 'returns vivid list' do
42
+ engine.create_quale(content: 'vivid', vividness: 0.8)
43
+ result = runner.vivid_experiences(engine: engine)
44
+ expect(result[:count]).to eq(1)
45
+ end
46
+ end
47
+
48
+ describe '#by_modality' do
49
+ it 'filters by modality' do
50
+ engine.create_quale(content: 'a', modality: :visual)
51
+ result = runner.by_modality(modality: :visual, engine: engine)
52
+ expect(result[:count]).to eq(1)
53
+ end
54
+ end
55
+
56
+ describe '#phenomenal_richness' do
57
+ it 'returns richness level' do
58
+ result = runner.phenomenal_richness(engine: engine)
59
+ expect(result[:success]).to be true
60
+ end
61
+ end
62
+
63
+ describe '#qualia_status' do
64
+ it 'returns comprehensive status' do
65
+ result = runner.qualia_status(engine: engine)
66
+ expect(result[:success]).to be true
67
+ expect(result).to include(:total_experiences, :phenomenal_richness)
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/integration/situation_model/client'
4
+
5
+ RSpec.describe Legion::Extensions::Agentic::Integration::SituationModel::Client do
6
+ let(:client) { described_class.new }
7
+
8
+ it 'responds to all runner methods' do
9
+ %i[
10
+ create_situation_model
11
+ add_situation_event
12
+ situation_model_coherence
13
+ find_situation_boundaries
14
+ situation_dimension_trajectory
15
+ most_coherent_situations
16
+ situations_by_label
17
+ update_situation_models
18
+ situation_model_stats
19
+ ].each do |method_name|
20
+ expect(client).to respond_to(method_name)
21
+ end
22
+ end
23
+
24
+ it 'round-trips a full situation model lifecycle' do
25
+ created = client.create_situation_model(label: 'round_trip')
26
+ model_id = created[:model][:id]
27
+
28
+ client.add_situation_event(model_id: model_id, content: 'scene 1',
29
+ space: 0.8, time: 0.8, causation: 0.8, intentionality: 0.7, protagonist: 0.9)
30
+ client.add_situation_event(model_id: model_id, content: 'scene 2',
31
+ space: 0.7, time: 0.9, causation: 0.8, intentionality: 0.7, protagonist: 0.8)
32
+
33
+ coh = client.situation_model_coherence(model_id: model_id)
34
+ expect(coh[:success]).to be(true)
35
+ expect(coh[:coherence]).to be > 0.7
36
+
37
+ traj = client.situation_dimension_trajectory(model_id: model_id, dimension: :time)
38
+ expect(traj[:trajectory]).to eq([0.8, 0.9])
39
+
40
+ stats = client.situation_model_stats
41
+ expect(stats[:model_count]).to be >= 1
42
+ end
43
+
44
+ it 'maintains separate engine state per instance' do
45
+ c1 = described_class.new
46
+ c2 = described_class.new
47
+ c1.create_situation_model(label: 'only_c1')
48
+ expect(c1.situation_model_stats[:model_count]).to eq(1)
49
+ expect(c2.situation_model_stats[:model_count]).to eq(0)
50
+ end
51
+ end