lex-agentic-attention 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 (315) 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-attention.gemspec +30 -0
  7. data/lib/legion/extensions/agentic/attention/arousal/client.rb +27 -0
  8. data/lib/legion/extensions/agentic/attention/arousal/helpers/arousal_model.rb +84 -0
  9. data/lib/legion/extensions/agentic/attention/arousal/helpers/constants.rb +44 -0
  10. data/lib/legion/extensions/agentic/attention/arousal/runners/arousal.rb +119 -0
  11. data/lib/legion/extensions/agentic/attention/arousal/version.rb +13 -0
  12. data/lib/legion/extensions/agentic/attention/arousal.rb +18 -0
  13. data/lib/legion/extensions/agentic/attention/blindspot/client.rb +19 -0
  14. data/lib/legion/extensions/agentic/attention/blindspot/helpers/blindspot.rb +98 -0
  15. data/lib/legion/extensions/agentic/attention/blindspot/helpers/blindspot_engine.rb +174 -0
  16. data/lib/legion/extensions/agentic/attention/blindspot/helpers/constants.rb +63 -0
  17. data/lib/legion/extensions/agentic/attention/blindspot/helpers/knowledge_boundary.rb +62 -0
  18. data/lib/legion/extensions/agentic/attention/blindspot/runners/cognitive_blindspot.rb +103 -0
  19. data/lib/legion/extensions/agentic/attention/blindspot/version.rb +13 -0
  20. data/lib/legion/extensions/agentic/attention/blindspot.rb +20 -0
  21. data/lib/legion/extensions/agentic/attention/blink/client.rb +19 -0
  22. data/lib/legion/extensions/agentic/attention/blink/helpers/blink_engine.rb +171 -0
  23. data/lib/legion/extensions/agentic/attention/blink/helpers/constants.rb +46 -0
  24. data/lib/legion/extensions/agentic/attention/blink/helpers/stimulus.rb +68 -0
  25. data/lib/legion/extensions/agentic/attention/blink/runners/attentional_blink.rb +75 -0
  26. data/lib/legion/extensions/agentic/attention/blink/version.rb +13 -0
  27. data/lib/legion/extensions/agentic/attention/blink.rb +19 -0
  28. data/lib/legion/extensions/agentic/attention/economy/client.rb +28 -0
  29. data/lib/legion/extensions/agentic/attention/economy/helpers/attention_budget.rb +143 -0
  30. data/lib/legion/extensions/agentic/attention/economy/helpers/constants.rb +38 -0
  31. data/lib/legion/extensions/agentic/attention/economy/helpers/demand.rb +72 -0
  32. data/lib/legion/extensions/agentic/attention/economy/runners/attention_economy.rb +90 -0
  33. data/lib/legion/extensions/agentic/attention/economy/version.rb +13 -0
  34. data/lib/legion/extensions/agentic/attention/economy.rb +19 -0
  35. data/lib/legion/extensions/agentic/attention/feature_binding/actors/decay.rb +45 -0
  36. data/lib/legion/extensions/agentic/attention/feature_binding/client.rb +29 -0
  37. data/lib/legion/extensions/agentic/attention/feature_binding/helpers/binding_field.rb +124 -0
  38. data/lib/legion/extensions/agentic/attention/feature_binding/helpers/bound_object.rb +89 -0
  39. data/lib/legion/extensions/agentic/attention/feature_binding/helpers/constants.rb +52 -0
  40. data/lib/legion/extensions/agentic/attention/feature_binding/helpers/feature.rb +52 -0
  41. data/lib/legion/extensions/agentic/attention/feature_binding/runners/feature_binding.rb +102 -0
  42. data/lib/legion/extensions/agentic/attention/feature_binding/version.rb +13 -0
  43. data/lib/legion/extensions/agentic/attention/feature_binding.rb +20 -0
  44. data/lib/legion/extensions/agentic/attention/focus/client.rb +30 -0
  45. data/lib/legion/extensions/agentic/attention/focus/helpers/constants.rb +38 -0
  46. data/lib/legion/extensions/agentic/attention/focus/helpers/focus.rb +78 -0
  47. data/lib/legion/extensions/agentic/attention/focus/helpers/focus_manager.rb +67 -0
  48. data/lib/legion/extensions/agentic/attention/focus/helpers/habituation.rb +61 -0
  49. data/lib/legion/extensions/agentic/attention/focus/runners/attention.rb +121 -0
  50. data/lib/legion/extensions/agentic/attention/focus/version.rb +13 -0
  51. data/lib/legion/extensions/agentic/attention/focus.rb +20 -0
  52. data/lib/legion/extensions/agentic/attention/kaleidoscope/client.rb +15 -0
  53. data/lib/legion/extensions/agentic/attention/kaleidoscope/helpers/constants.rb +48 -0
  54. data/lib/legion/extensions/agentic/attention/kaleidoscope/helpers/facet.rb +90 -0
  55. data/lib/legion/extensions/agentic/attention/kaleidoscope/helpers/kaleidoscope_engine.rb +142 -0
  56. data/lib/legion/extensions/agentic/attention/kaleidoscope/helpers/pattern.rb +110 -0
  57. data/lib/legion/extensions/agentic/attention/kaleidoscope/runners/cognitive_kaleidoscope.rb +91 -0
  58. data/lib/legion/extensions/agentic/attention/kaleidoscope/version.rb +13 -0
  59. data/lib/legion/extensions/agentic/attention/kaleidoscope.rb +22 -0
  60. data/lib/legion/extensions/agentic/attention/latent_inhibition/client.rb +28 -0
  61. data/lib/legion/extensions/agentic/attention/latent_inhibition/helpers/constants.rb +33 -0
  62. data/lib/legion/extensions/agentic/attention/latent_inhibition/helpers/inhibition_engine.rb +118 -0
  63. data/lib/legion/extensions/agentic/attention/latent_inhibition/helpers/stimulus_record.rb +70 -0
  64. data/lib/legion/extensions/agentic/attention/latent_inhibition/runners/latent_inhibition.rb +78 -0
  65. data/lib/legion/extensions/agentic/attention/latent_inhibition/version.rb +13 -0
  66. data/lib/legion/extensions/agentic/attention/latent_inhibition.rb +19 -0
  67. data/lib/legion/extensions/agentic/attention/lens/client.rb +29 -0
  68. data/lib/legion/extensions/agentic/attention/lens/helpers/constants.rb +58 -0
  69. data/lib/legion/extensions/agentic/attention/lens/helpers/lens.rb +99 -0
  70. data/lib/legion/extensions/agentic/attention/lens/helpers/lens_engine.rb +101 -0
  71. data/lib/legion/extensions/agentic/attention/lens/helpers/lens_stack.rb +134 -0
  72. data/lib/legion/extensions/agentic/attention/lens/runners/cognitive_lens.rb +90 -0
  73. data/lib/legion/extensions/agentic/attention/lens/version.rb +13 -0
  74. data/lib/legion/extensions/agentic/attention/lens.rb +22 -0
  75. data/lib/legion/extensions/agentic/attention/lighthouse/client.rb +25 -0
  76. data/lib/legion/extensions/agentic/attention/lighthouse/helpers/beacon.rb +76 -0
  77. data/lib/legion/extensions/agentic/attention/lighthouse/helpers/constants.rb +49 -0
  78. data/lib/legion/extensions/agentic/attention/lighthouse/helpers/fog.rb +74 -0
  79. data/lib/legion/extensions/agentic/attention/lighthouse/helpers/lighthouse_engine.rb +127 -0
  80. data/lib/legion/extensions/agentic/attention/lighthouse/runners/cognitive_lighthouse.rb +80 -0
  81. data/lib/legion/extensions/agentic/attention/lighthouse/version.rb +13 -0
  82. data/lib/legion/extensions/agentic/attention/lighthouse.rb +22 -0
  83. data/lib/legion/extensions/agentic/attention/priming/client.rb +21 -0
  84. data/lib/legion/extensions/agentic/attention/priming/helpers/activation_network.rb +130 -0
  85. data/lib/legion/extensions/agentic/attention/priming/helpers/concept_node.rb +92 -0
  86. data/lib/legion/extensions/agentic/attention/priming/helpers/constants.rb +54 -0
  87. data/lib/legion/extensions/agentic/attention/priming/runners/priming.rb +94 -0
  88. data/lib/legion/extensions/agentic/attention/priming/version.rb +13 -0
  89. data/lib/legion/extensions/agentic/attention/priming.rb +19 -0
  90. data/lib/legion/extensions/agentic/attention/prism/client.rb +26 -0
  91. data/lib/legion/extensions/agentic/attention/prism/helpers/beam.rb +169 -0
  92. data/lib/legion/extensions/agentic/attention/prism/helpers/constants.rb +46 -0
  93. data/lib/legion/extensions/agentic/attention/prism/helpers/prism_engine.rb +136 -0
  94. data/lib/legion/extensions/agentic/attention/prism/helpers/spectral_component.rb +72 -0
  95. data/lib/legion/extensions/agentic/attention/prism/runners/cognitive_prism.rb +79 -0
  96. data/lib/legion/extensions/agentic/attention/prism/version.rb +13 -0
  97. data/lib/legion/extensions/agentic/attention/prism.rb +22 -0
  98. data/lib/legion/extensions/agentic/attention/regulation/client.rb +19 -0
  99. data/lib/legion/extensions/agentic/attention/regulation/helpers/attention_controller.rb +157 -0
  100. data/lib/legion/extensions/agentic/attention/regulation/helpers/attention_target.rb +64 -0
  101. data/lib/legion/extensions/agentic/attention/regulation/helpers/constants.rb +41 -0
  102. data/lib/legion/extensions/agentic/attention/regulation/runners/attention_regulation.rb +88 -0
  103. data/lib/legion/extensions/agentic/attention/regulation/version.rb +13 -0
  104. data/lib/legion/extensions/agentic/attention/regulation.rb +20 -0
  105. data/lib/legion/extensions/agentic/attention/relevance_theory/helpers/client.rb +17 -0
  106. data/lib/legion/extensions/agentic/attention/relevance_theory/helpers/cognitive_input.rb +88 -0
  107. data/lib/legion/extensions/agentic/attention/relevance_theory/helpers/constants.rb +50 -0
  108. data/lib/legion/extensions/agentic/attention/relevance_theory/helpers/relevance_engine.rb +152 -0
  109. data/lib/legion/extensions/agentic/attention/relevance_theory/runners/relevance_theory.rb +98 -0
  110. data/lib/legion/extensions/agentic/attention/relevance_theory/version.rb +13 -0
  111. data/lib/legion/extensions/agentic/attention/relevance_theory.rb +19 -0
  112. data/lib/legion/extensions/agentic/attention/salience/client.rb +21 -0
  113. data/lib/legion/extensions/agentic/attention/salience/helpers/constants.rb +44 -0
  114. data/lib/legion/extensions/agentic/attention/salience/helpers/salience_map.rb +122 -0
  115. data/lib/legion/extensions/agentic/attention/salience/helpers/signal_integrator.rb +97 -0
  116. data/lib/legion/extensions/agentic/attention/salience/runners/salience.rb +70 -0
  117. data/lib/legion/extensions/agentic/attention/salience/version.rb +13 -0
  118. data/lib/legion/extensions/agentic/attention/salience.rb +19 -0
  119. data/lib/legion/extensions/agentic/attention/schema/actors/decay.rb +45 -0
  120. data/lib/legion/extensions/agentic/attention/schema/client.rb +28 -0
  121. data/lib/legion/extensions/agentic/attention/schema/helpers/attention_schema_model.rb +226 -0
  122. data/lib/legion/extensions/agentic/attention/schema/helpers/constants.rb +66 -0
  123. data/lib/legion/extensions/agentic/attention/schema/helpers/schema_item.rb +68 -0
  124. data/lib/legion/extensions/agentic/attention/schema/runners/attention_schema.rb +117 -0
  125. data/lib/legion/extensions/agentic/attention/schema/version.rb +13 -0
  126. data/lib/legion/extensions/agentic/attention/schema.rb +19 -0
  127. data/lib/legion/extensions/agentic/attention/sensory_gating/client.rb +15 -0
  128. data/lib/legion/extensions/agentic/attention/sensory_gating/helpers/constants.rb +44 -0
  129. data/lib/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine.rb +109 -0
  130. data/lib/legion/extensions/agentic/attention/sensory_gating/helpers/sensory_filter.rb +100 -0
  131. data/lib/legion/extensions/agentic/attention/sensory_gating/runners/sensory_gating.rb +73 -0
  132. data/lib/legion/extensions/agentic/attention/sensory_gating/version.rb +13 -0
  133. data/lib/legion/extensions/agentic/attention/sensory_gating.rb +19 -0
  134. data/lib/legion/extensions/agentic/attention/signal_detection/client.rb +28 -0
  135. data/lib/legion/extensions/agentic/attention/signal_detection/helpers/constants.rb +66 -0
  136. data/lib/legion/extensions/agentic/attention/signal_detection/helpers/detection_engine.rb +129 -0
  137. data/lib/legion/extensions/agentic/attention/signal_detection/helpers/detector.rb +136 -0
  138. data/lib/legion/extensions/agentic/attention/signal_detection/runners/signal_detection.rb +113 -0
  139. data/lib/legion/extensions/agentic/attention/signal_detection/version.rb +13 -0
  140. data/lib/legion/extensions/agentic/attention/signal_detection.rb +19 -0
  141. data/lib/legion/extensions/agentic/attention/spotlight/client.rb +29 -0
  142. data/lib/legion/extensions/agentic/attention/spotlight/helpers/attention_target.rb +61 -0
  143. data/lib/legion/extensions/agentic/attention/spotlight/helpers/constants.rb +44 -0
  144. data/lib/legion/extensions/agentic/attention/spotlight/helpers/spotlight.rb +78 -0
  145. data/lib/legion/extensions/agentic/attention/spotlight/helpers/spotlight_engine.rb +163 -0
  146. data/lib/legion/extensions/agentic/attention/spotlight/runners/attention_spotlight.rb +122 -0
  147. data/lib/legion/extensions/agentic/attention/spotlight/version.rb +13 -0
  148. data/lib/legion/extensions/agentic/attention/spotlight.rb +20 -0
  149. data/lib/legion/extensions/agentic/attention/subliminal/client.rb +19 -0
  150. data/lib/legion/extensions/agentic/attention/subliminal/helpers/constants.rb +74 -0
  151. data/lib/legion/extensions/agentic/attention/subliminal/helpers/influence_event.rb +44 -0
  152. data/lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine.rb +149 -0
  153. data/lib/legion/extensions/agentic/attention/subliminal/helpers/subliminal_trace.rb +101 -0
  154. data/lib/legion/extensions/agentic/attention/subliminal/runners/subliminal.rb +71 -0
  155. data/lib/legion/extensions/agentic/attention/subliminal/version.rb +13 -0
  156. data/lib/legion/extensions/agentic/attention/subliminal.rb +20 -0
  157. data/lib/legion/extensions/agentic/attention/surprise/client.rb +22 -0
  158. data/lib/legion/extensions/agentic/attention/surprise/helpers/constants.rb +35 -0
  159. data/lib/legion/extensions/agentic/attention/surprise/helpers/habituation_model.rb +62 -0
  160. data/lib/legion/extensions/agentic/attention/surprise/helpers/surprise_event.rb +43 -0
  161. data/lib/legion/extensions/agentic/attention/surprise/helpers/surprise_store.rb +74 -0
  162. data/lib/legion/extensions/agentic/attention/surprise/runners/surprise.rb +174 -0
  163. data/lib/legion/extensions/agentic/attention/surprise/version.rb +13 -0
  164. data/lib/legion/extensions/agentic/attention/surprise.rb +20 -0
  165. data/lib/legion/extensions/agentic/attention/switching/client.rb +19 -0
  166. data/lib/legion/extensions/agentic/attention/switching/helpers/constants.rb +64 -0
  167. data/lib/legion/extensions/agentic/attention/switching/helpers/switch_event.rb +60 -0
  168. data/lib/legion/extensions/agentic/attention/switching/helpers/switching_engine.rb +172 -0
  169. data/lib/legion/extensions/agentic/attention/switching/helpers/task_set.rb +91 -0
  170. data/lib/legion/extensions/agentic/attention/switching/runners/attention_switching.rb +92 -0
  171. data/lib/legion/extensions/agentic/attention/switching/version.rb +13 -0
  172. data/lib/legion/extensions/agentic/attention/switching.rb +20 -0
  173. data/lib/legion/extensions/agentic/attention/synesthesia/client.rb +29 -0
  174. data/lib/legion/extensions/agentic/attention/synesthesia/helpers/constants.rb +52 -0
  175. data/lib/legion/extensions/agentic/attention/synesthesia/helpers/sensory_mapping.rb +70 -0
  176. data/lib/legion/extensions/agentic/attention/synesthesia/helpers/synesthesia_engine.rb +177 -0
  177. data/lib/legion/extensions/agentic/attention/synesthesia/helpers/synesthetic_event.rb +49 -0
  178. data/lib/legion/extensions/agentic/attention/synesthesia/runners/cognitive_synesthesia.rb +83 -0
  179. data/lib/legion/extensions/agentic/attention/synesthesia/version.rb +13 -0
  180. data/lib/legion/extensions/agentic/attention/synesthesia.rb +20 -0
  181. data/lib/legion/extensions/agentic/attention/telescope/client.rb +15 -0
  182. data/lib/legion/extensions/agentic/attention/telescope/helpers/constants.rb +60 -0
  183. data/lib/legion/extensions/agentic/attention/telescope/helpers/observation.rb +68 -0
  184. data/lib/legion/extensions/agentic/attention/telescope/helpers/observatory_engine.rb +126 -0
  185. data/lib/legion/extensions/agentic/attention/telescope/helpers/telescope.rb +129 -0
  186. data/lib/legion/extensions/agentic/attention/telescope/runners/cognitive_telescope.rb +103 -0
  187. data/lib/legion/extensions/agentic/attention/telescope/version.rb +13 -0
  188. data/lib/legion/extensions/agentic/attention/telescope.rb +22 -0
  189. data/lib/legion/extensions/agentic/attention/version.rb +11 -0
  190. data/lib/legion/extensions/agentic/attention.rb +41 -0
  191. data/spec/legion/extensions/agentic/attention/arousal/client_spec.rb +42 -0
  192. data/spec/legion/extensions/agentic/attention/arousal/helpers/arousal_model_spec.rb +160 -0
  193. data/spec/legion/extensions/agentic/attention/arousal/helpers/constants_spec.rb +61 -0
  194. data/spec/legion/extensions/agentic/attention/arousal/runners/arousal_spec.rb +137 -0
  195. data/spec/legion/extensions/agentic/attention/blindspot/client_spec.rb +41 -0
  196. data/spec/legion/extensions/agentic/attention/blindspot/helpers/blindspot_engine_spec.rb +246 -0
  197. data/spec/legion/extensions/agentic/attention/blindspot/helpers/blindspot_spec.rb +204 -0
  198. data/spec/legion/extensions/agentic/attention/blindspot/helpers/constants_spec.rb +82 -0
  199. data/spec/legion/extensions/agentic/attention/blindspot/helpers/knowledge_boundary_spec.rb +104 -0
  200. data/spec/legion/extensions/agentic/attention/blindspot/runners/cognitive_blindspot_spec.rb +179 -0
  201. data/spec/legion/extensions/agentic/attention/blink/client_spec.rb +18 -0
  202. data/spec/legion/extensions/agentic/attention/blink/helpers/blink_engine_spec.rb +147 -0
  203. data/spec/legion/extensions/agentic/attention/blink/helpers/constants_spec.rb +27 -0
  204. data/spec/legion/extensions/agentic/attention/blink/helpers/stimulus_spec.rb +77 -0
  205. data/spec/legion/extensions/agentic/attention/blink/runners/attentional_blink_spec.rb +77 -0
  206. data/spec/legion/extensions/agentic/attention/economy/client_spec.rb +30 -0
  207. data/spec/legion/extensions/agentic/attention/economy/helpers/attention_budget_spec.rb +222 -0
  208. data/spec/legion/extensions/agentic/attention/economy/helpers/constants_spec.rb +112 -0
  209. data/spec/legion/extensions/agentic/attention/economy/helpers/demand_spec.rb +128 -0
  210. data/spec/legion/extensions/agentic/attention/economy/runners/attention_economy_spec.rb +163 -0
  211. data/spec/legion/extensions/agentic/attention/feature_binding/client_spec.rb +20 -0
  212. data/spec/legion/extensions/agentic/attention/feature_binding/helpers/binding_field_spec.rb +207 -0
  213. data/spec/legion/extensions/agentic/attention/feature_binding/helpers/bound_object_spec.rb +149 -0
  214. data/spec/legion/extensions/agentic/attention/feature_binding/helpers/feature_spec.rb +86 -0
  215. data/spec/legion/extensions/agentic/attention/feature_binding/runners/feature_binding_spec.rb +106 -0
  216. data/spec/legion/extensions/agentic/attention/focus/client_spec.rb +19 -0
  217. data/spec/legion/extensions/agentic/attention/focus/helpers/focus_manager_spec.rb +105 -0
  218. data/spec/legion/extensions/agentic/attention/focus/helpers/focus_spec.rb +148 -0
  219. data/spec/legion/extensions/agentic/attention/focus/helpers/habituation_spec.rb +97 -0
  220. data/spec/legion/extensions/agentic/attention/focus/runners/attention_spec.rb +134 -0
  221. data/spec/legion/extensions/agentic/attention/kaleidoscope/client_spec.rb +38 -0
  222. data/spec/legion/extensions/agentic/attention/kaleidoscope/helpers/constants_spec.rb +79 -0
  223. data/spec/legion/extensions/agentic/attention/kaleidoscope/helpers/facet_spec.rb +155 -0
  224. data/spec/legion/extensions/agentic/attention/kaleidoscope/helpers/kaleidoscope_engine_spec.rb +164 -0
  225. data/spec/legion/extensions/agentic/attention/kaleidoscope/helpers/pattern_spec.rb +157 -0
  226. data/spec/legion/extensions/agentic/attention/kaleidoscope/runners/cognitive_kaleidoscope_spec.rb +112 -0
  227. data/spec/legion/extensions/agentic/attention/latent_inhibition/client_spec.rb +49 -0
  228. data/spec/legion/extensions/agentic/attention/latent_inhibition/helpers/constants_spec.rb +57 -0
  229. data/spec/legion/extensions/agentic/attention/latent_inhibition/helpers/inhibition_engine_spec.rb +207 -0
  230. data/spec/legion/extensions/agentic/attention/latent_inhibition/helpers/stimulus_record_spec.rb +175 -0
  231. data/spec/legion/extensions/agentic/attention/latent_inhibition/runners/latent_inhibition_spec.rb +148 -0
  232. data/spec/legion/extensions/agentic/attention/lens/client_spec.rb +64 -0
  233. data/spec/legion/extensions/agentic/attention/lens/helpers/constants_spec.rb +91 -0
  234. data/spec/legion/extensions/agentic/attention/lens/helpers/lens_engine_spec.rb +158 -0
  235. data/spec/legion/extensions/agentic/attention/lens/helpers/lens_spec.rb +222 -0
  236. data/spec/legion/extensions/agentic/attention/lens/helpers/lens_stack_spec.rb +179 -0
  237. data/spec/legion/extensions/agentic/attention/lens/runners/cognitive_lens_spec.rb +182 -0
  238. data/spec/legion/extensions/agentic/attention/lighthouse/client_spec.rb +103 -0
  239. data/spec/legion/extensions/agentic/attention/lighthouse/helpers/beacon_spec.rb +170 -0
  240. data/spec/legion/extensions/agentic/attention/lighthouse/helpers/constants_spec.rb +94 -0
  241. data/spec/legion/extensions/agentic/attention/lighthouse/helpers/fog_spec.rb +166 -0
  242. data/spec/legion/extensions/agentic/attention/lighthouse/helpers/lighthouse_engine_spec.rb +238 -0
  243. data/spec/legion/extensions/agentic/attention/lighthouse/runners/cognitive_lighthouse_spec.rb +182 -0
  244. data/spec/legion/extensions/agentic/attention/priming/client_spec.rb +80 -0
  245. data/spec/legion/extensions/agentic/attention/priming/helpers/activation_network_spec.rb +176 -0
  246. data/spec/legion/extensions/agentic/attention/priming/helpers/concept_node_spec.rb +165 -0
  247. data/spec/legion/extensions/agentic/attention/priming/helpers/constants_spec.rb +51 -0
  248. data/spec/legion/extensions/agentic/attention/priming/runners/priming_spec.rb +141 -0
  249. data/spec/legion/extensions/agentic/attention/prism/client_spec.rb +86 -0
  250. data/spec/legion/extensions/agentic/attention/prism/helpers/beam_spec.rb +182 -0
  251. data/spec/legion/extensions/agentic/attention/prism/helpers/constants_spec.rb +93 -0
  252. data/spec/legion/extensions/agentic/attention/prism/helpers/prism_engine_spec.rb +253 -0
  253. data/spec/legion/extensions/agentic/attention/prism/helpers/spectral_component_spec.rb +171 -0
  254. data/spec/legion/extensions/agentic/attention/prism/runners/cognitive_prism_spec.rb +132 -0
  255. data/spec/legion/extensions/agentic/attention/regulation/client_spec.rb +58 -0
  256. data/spec/legion/extensions/agentic/attention/regulation/helpers/attention_controller_spec.rb +295 -0
  257. data/spec/legion/extensions/agentic/attention/regulation/helpers/attention_target_spec.rb +122 -0
  258. data/spec/legion/extensions/agentic/attention/regulation/runners/attention_regulation_spec.rb +147 -0
  259. data/spec/legion/extensions/agentic/attention/relevance_theory/helpers/cognitive_input_spec.rb +121 -0
  260. data/spec/legion/extensions/agentic/attention/relevance_theory/helpers/relevance_engine_spec.rb +149 -0
  261. data/spec/legion/extensions/agentic/attention/relevance_theory/relevance_theory_spec.rb +11 -0
  262. data/spec/legion/extensions/agentic/attention/relevance_theory/runners/relevance_theory_spec.rb +86 -0
  263. data/spec/legion/extensions/agentic/attention/salience/client_spec.rb +60 -0
  264. data/spec/legion/extensions/agentic/attention/salience/helpers/constants_spec.rb +100 -0
  265. data/spec/legion/extensions/agentic/attention/salience/helpers/salience_map_spec.rb +189 -0
  266. data/spec/legion/extensions/agentic/attention/salience/helpers/signal_integrator_spec.rb +149 -0
  267. data/spec/legion/extensions/agentic/attention/salience/runners/salience_spec.rb +143 -0
  268. data/spec/legion/extensions/agentic/attention/schema/client_spec.rb +47 -0
  269. data/spec/legion/extensions/agentic/attention/schema/helpers/attention_schema_model_spec.rb +219 -0
  270. data/spec/legion/extensions/agentic/attention/schema/helpers/schema_item_spec.rb +114 -0
  271. data/spec/legion/extensions/agentic/attention/schema/runners/attention_schema_spec.rb +185 -0
  272. data/spec/legion/extensions/agentic/attention/sensory_gating/helpers/gating_engine_spec.rb +112 -0
  273. data/spec/legion/extensions/agentic/attention/sensory_gating/helpers/sensory_filter_spec.rb +121 -0
  274. data/spec/legion/extensions/agentic/attention/sensory_gating/runners/sensory_gating_spec.rb +61 -0
  275. data/spec/legion/extensions/agentic/attention/signal_detection/client_spec.rb +20 -0
  276. data/spec/legion/extensions/agentic/attention/signal_detection/helpers/constants_spec.rb +85 -0
  277. data/spec/legion/extensions/agentic/attention/signal_detection/helpers/detection_engine_spec.rb +143 -0
  278. data/spec/legion/extensions/agentic/attention/signal_detection/helpers/detector_spec.rb +179 -0
  279. data/spec/legion/extensions/agentic/attention/signal_detection/runners/signal_detection_spec.rb +151 -0
  280. data/spec/legion/extensions/agentic/attention/spotlight/client_spec.rb +31 -0
  281. data/spec/legion/extensions/agentic/attention/spotlight/helpers/attention_target_spec.rb +121 -0
  282. data/spec/legion/extensions/agentic/attention/spotlight/helpers/constants_spec.rb +82 -0
  283. data/spec/legion/extensions/agentic/attention/spotlight/helpers/spotlight_engine_spec.rb +275 -0
  284. data/spec/legion/extensions/agentic/attention/spotlight/helpers/spotlight_spec.rb +196 -0
  285. data/spec/legion/extensions/agentic/attention/spotlight/runners/attention_spotlight_spec.rb +251 -0
  286. data/spec/legion/extensions/agentic/attention/subliminal/client_spec.rb +21 -0
  287. data/spec/legion/extensions/agentic/attention/subliminal/helpers/influence_event_spec.rb +58 -0
  288. data/spec/legion/extensions/agentic/attention/subliminal/helpers/subliminal_engine_spec.rb +161 -0
  289. data/spec/legion/extensions/agentic/attention/subliminal/helpers/subliminal_trace_spec.rb +168 -0
  290. data/spec/legion/extensions/agentic/attention/subliminal/runners_spec.rb +78 -0
  291. data/spec/legion/extensions/agentic/attention/subliminal/subliminal_spec.rb +7 -0
  292. data/spec/legion/extensions/agentic/attention/surprise/client_spec.rb +122 -0
  293. data/spec/legion/extensions/agentic/attention/surprise/helpers/constants_spec.rb +112 -0
  294. data/spec/legion/extensions/agentic/attention/surprise/helpers/habituation_model_spec.rb +127 -0
  295. data/spec/legion/extensions/agentic/attention/surprise/helpers/surprise_event_spec.rb +102 -0
  296. data/spec/legion/extensions/agentic/attention/surprise/helpers/surprise_store_spec.rb +171 -0
  297. data/spec/legion/extensions/agentic/attention/surprise/runners/surprise_spec.rb +266 -0
  298. data/spec/legion/extensions/agentic/attention/switching/attention_switching_spec.rb +7 -0
  299. data/spec/legion/extensions/agentic/attention/switching/helpers/switch_event_spec.rb +74 -0
  300. data/spec/legion/extensions/agentic/attention/switching/helpers/switching_engine_spec.rb +164 -0
  301. data/spec/legion/extensions/agentic/attention/switching/helpers/task_set_spec.rb +134 -0
  302. data/spec/legion/extensions/agentic/attention/synesthesia/client_spec.rb +57 -0
  303. data/spec/legion/extensions/agentic/attention/synesthesia/helpers/constants_spec.rb +89 -0
  304. data/spec/legion/extensions/agentic/attention/synesthesia/helpers/sensory_mapping_spec.rb +135 -0
  305. data/spec/legion/extensions/agentic/attention/synesthesia/helpers/synesthesia_engine_spec.rb +260 -0
  306. data/spec/legion/extensions/agentic/attention/synesthesia/helpers/synesthetic_event_spec.rb +83 -0
  307. data/spec/legion/extensions/agentic/attention/synesthesia/runners/cognitive_synesthesia_spec.rb +192 -0
  308. data/spec/legion/extensions/agentic/attention/telescope/client_spec.rb +30 -0
  309. data/spec/legion/extensions/agentic/attention/telescope/helpers/constants_spec.rb +108 -0
  310. data/spec/legion/extensions/agentic/attention/telescope/helpers/observation_spec.rb +138 -0
  311. data/spec/legion/extensions/agentic/attention/telescope/helpers/observatory_engine_spec.rb +197 -0
  312. data/spec/legion/extensions/agentic/attention/telescope/helpers/telescope_spec.rb +251 -0
  313. data/spec/legion/extensions/agentic/attention/telescope/runners/cognitive_telescope_spec.rb +191 -0
  314. data/spec/spec_helper.rb +46 -0
  315. metadata +399 -0
@@ -0,0 +1,204 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Attention::Blindspot::Helpers::Blindspot do
4
+ subject(:blindspot) do
5
+ described_class.new(
6
+ domain: :epistemology,
7
+ discovered_by: :error_analysis,
8
+ description: 'Failed to account for selection bias in training data',
9
+ severity: 0.6
10
+ )
11
+ end
12
+
13
+ describe '#initialize' do
14
+ it 'assigns a uuid id' do
15
+ expect(blindspot.id).to match(/\A[0-9a-f-]{36}\z/)
16
+ end
17
+
18
+ it 'stores domain as symbol' do
19
+ expect(blindspot.domain).to eq(:epistemology)
20
+ end
21
+
22
+ it 'stores discovered_by as symbol' do
23
+ expect(blindspot.discovered_by).to eq(:error_analysis)
24
+ end
25
+
26
+ it 'stores description' do
27
+ expect(blindspot.description).to eq('Failed to account for selection bias in training data')
28
+ end
29
+
30
+ it 'clamps severity to 0..1' do
31
+ spot = described_class.new(domain: :test, discovered_by: :unknown, description: 'x', severity: 2.0)
32
+ expect(spot.severity).to eq(1.0)
33
+ end
34
+
35
+ it 'starts with status :active' do
36
+ expect(blindspot.status).to eq(:active)
37
+ end
38
+
39
+ it 'starts with created_at set' do
40
+ expect(blindspot.created_at).to be_a(Time)
41
+ end
42
+ end
43
+
44
+ describe '#severity_label' do
45
+ it 'returns :high for severity 0.6' do
46
+ expect(blindspot.severity_label).to eq(:high)
47
+ end
48
+
49
+ it 'returns :critical for severity 0.9' do
50
+ spot = described_class.new(domain: :x, discovered_by: :unknown, description: 'x', severity: 0.9)
51
+ expect(spot.severity_label).to eq(:critical)
52
+ end
53
+
54
+ it 'returns :negligible for severity 0.1' do
55
+ spot = described_class.new(domain: :x, discovered_by: :unknown, description: 'x', severity: 0.1)
56
+ expect(spot.severity_label).to eq(:negligible)
57
+ end
58
+ end
59
+
60
+ describe '#active?' do
61
+ it 'returns true when status is :active' do
62
+ expect(blindspot.active?).to be true
63
+ end
64
+
65
+ it 'returns false after acknowledging' do
66
+ blindspot.acknowledge!
67
+ expect(blindspot.active?).to be false
68
+ end
69
+ end
70
+
71
+ describe '#acknowledged?' do
72
+ it 'returns false initially' do
73
+ expect(blindspot.acknowledged?).to be false
74
+ end
75
+
76
+ it 'returns true after acknowledging' do
77
+ blindspot.acknowledge!
78
+ expect(blindspot.acknowledged?).to be true
79
+ end
80
+
81
+ it 'returns true after mitigating' do
82
+ blindspot.mitigate!
83
+ expect(blindspot.acknowledged?).to be true
84
+ end
85
+
86
+ it 'returns true after resolving' do
87
+ blindspot.resolve!
88
+ expect(blindspot.acknowledged?).to be true
89
+ end
90
+ end
91
+
92
+ describe '#resolved?' do
93
+ it 'returns false initially' do
94
+ expect(blindspot.resolved?).to be false
95
+ end
96
+
97
+ it 'returns true after resolving' do
98
+ blindspot.resolve!
99
+ expect(blindspot.resolved?).to be true
100
+ end
101
+ end
102
+
103
+ describe '#acknowledge!' do
104
+ it 'sets status to :acknowledged' do
105
+ blindspot.acknowledge!
106
+ expect(blindspot.status).to eq(:acknowledged)
107
+ end
108
+
109
+ it 'sets acknowledged_at' do
110
+ blindspot.acknowledge!
111
+ expect(blindspot.acknowledged_at).not_to be_nil
112
+ end
113
+
114
+ it 'is idempotent — does not re-set acknowledged_at on second call' do
115
+ blindspot.acknowledge!
116
+ first_time = blindspot.acknowledged_at
117
+ blindspot.acknowledge!
118
+ expect(blindspot.acknowledged_at).to eq(first_time)
119
+ end
120
+
121
+ it 'returns self' do
122
+ expect(blindspot.acknowledge!).to eq(blindspot)
123
+ end
124
+ end
125
+
126
+ describe '#mitigate!' do
127
+ it 'sets status to :mitigated' do
128
+ blindspot.mitigate!
129
+ expect(blindspot.status).to eq(:mitigated)
130
+ end
131
+
132
+ it 'reduces severity by SEVERITY_BOOST' do
133
+ before = blindspot.severity
134
+ blindspot.mitigate!
135
+ expect(blindspot.severity).to be < before
136
+ end
137
+
138
+ it 'sets mitigated_at' do
139
+ blindspot.mitigate!
140
+ expect(blindspot.mitigated_at).not_to be_nil
141
+ end
142
+
143
+ it 'auto-acknowledges an active blindspot' do
144
+ blindspot.mitigate!
145
+ expect(blindspot.acknowledged_at).not_to be_nil
146
+ end
147
+
148
+ it 'returns self' do
149
+ expect(blindspot.mitigate!).to eq(blindspot)
150
+ end
151
+ end
152
+
153
+ describe '#resolve!' do
154
+ it 'sets status to :resolved' do
155
+ blindspot.resolve!
156
+ expect(blindspot.status).to eq(:resolved)
157
+ end
158
+
159
+ it 'sets resolved_at' do
160
+ blindspot.resolve!
161
+ expect(blindspot.resolved_at).not_to be_nil
162
+ end
163
+
164
+ it 'returns self' do
165
+ expect(blindspot.resolve!).to eq(blindspot)
166
+ end
167
+ end
168
+
169
+ describe '#boost_severity!' do
170
+ it 'increases severity' do
171
+ before = blindspot.severity
172
+ blindspot.boost_severity!
173
+ expect(blindspot.severity).to be > before
174
+ end
175
+
176
+ it 'clamps to 1.0' do
177
+ spot = described_class.new(domain: :x, discovered_by: :unknown, description: 'x', severity: 0.95)
178
+ spot.boost_severity!(amount: 0.2)
179
+ expect(spot.severity).to eq(1.0)
180
+ end
181
+
182
+ it 'returns self' do
183
+ expect(blindspot.boost_severity!).to eq(blindspot)
184
+ end
185
+ end
186
+
187
+ describe '#to_h' do
188
+ it 'returns a hash with all required keys' do
189
+ h = blindspot.to_h
190
+ expect(h).to include(:id, :domain, :discovered_by, :description,
191
+ :severity, :severity_label, :status,
192
+ :active, :acknowledged, :resolved, :created_at)
193
+ end
194
+
195
+ it 'includes nil acknowledged_at initially' do
196
+ expect(blindspot.to_h[:acknowledged_at]).to be_nil
197
+ end
198
+
199
+ it 'includes acknowledged_at after acknowledging' do
200
+ blindspot.acknowledge!
201
+ expect(blindspot.to_h[:acknowledged_at]).not_to be_nil
202
+ end
203
+ end
204
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Attention::Blindspot::Helpers::Constants do
4
+ it 'defines MAX_BLINDSPOTS' do
5
+ expect(described_class::MAX_BLINDSPOTS).to eq(300)
6
+ end
7
+
8
+ it 'defines MAX_BOUNDARIES' do
9
+ expect(described_class::MAX_BOUNDARIES).to eq(50)
10
+ end
11
+
12
+ it 'defines DEFAULT_SEVERITY' do
13
+ expect(described_class::DEFAULT_SEVERITY).to eq(0.5)
14
+ end
15
+
16
+ it 'defines SEVERITY_BOOST' do
17
+ expect(described_class::SEVERITY_BOOST).to eq(0.1)
18
+ end
19
+
20
+ it 'defines AWARENESS_THRESHOLD' do
21
+ expect(described_class::AWARENESS_THRESHOLD).to eq(0.6)
22
+ end
23
+
24
+ it 'defines DISCOVERY_METHODS as a frozen array with 8 entries' do
25
+ expect(described_class::DISCOVERY_METHODS).to be_frozen
26
+ expect(described_class::DISCOVERY_METHODS.size).to eq(8)
27
+ expect(described_class::DISCOVERY_METHODS).to include(:error_analysis, :peer_feedback, :unknown)
28
+ end
29
+
30
+ it 'defines SEVERITY_LABELS for full range' do
31
+ expect(described_class::SEVERITY_LABELS.size).to eq(5)
32
+ end
33
+
34
+ it 'defines AWARENESS_LABELS for full range' do
35
+ expect(described_class::AWARENESS_LABELS.size).to eq(5)
36
+ end
37
+
38
+ it 'defines COVERAGE_LABELS for full range' do
39
+ expect(described_class::COVERAGE_LABELS.size).to eq(5)
40
+ end
41
+
42
+ it 'defines STATUS_LABELS for all statuses' do
43
+ expect(described_class::STATUS_LABELS).to include(:active, :acknowledged, :mitigated, :resolved)
44
+ end
45
+
46
+ describe '.label_for' do
47
+ it 'returns the correct label for a value in range' do
48
+ label = described_class.label_for(described_class::SEVERITY_LABELS, 0.9)
49
+ expect(label).to eq(:critical)
50
+ end
51
+
52
+ it 'returns :high for 0.7' do
53
+ label = described_class.label_for(described_class::SEVERITY_LABELS, 0.7)
54
+ expect(label).to eq(:high)
55
+ end
56
+
57
+ it 'returns :moderate for 0.5' do
58
+ label = described_class.label_for(described_class::SEVERITY_LABELS, 0.5)
59
+ expect(label).to eq(:moderate)
60
+ end
61
+
62
+ it 'returns :negligible for 0.1' do
63
+ label = described_class.label_for(described_class::SEVERITY_LABELS, 0.1)
64
+ expect(label).to eq(:negligible)
65
+ end
66
+
67
+ it 'returns nil for a value with no matching range' do
68
+ label = described_class.label_for({}, 0.5)
69
+ expect(label).to be_nil
70
+ end
71
+
72
+ it 'returns correct awareness label' do
73
+ label = described_class.label_for(described_class::AWARENESS_LABELS, 0.85)
74
+ expect(label).to eq(:highly_aware)
75
+ end
76
+
77
+ it 'returns correct coverage label' do
78
+ label = described_class.label_for(described_class::COVERAGE_LABELS, 0.3)
79
+ expect(label).to eq(:limited)
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Attention::Blindspot::Helpers::KnowledgeBoundary do
4
+ subject(:boundary) do
5
+ described_class.new(domain: :physics, confidence: 0.7, coverage_estimate: 0.5)
6
+ end
7
+
8
+ describe '#initialize' do
9
+ it 'assigns a uuid id' do
10
+ expect(boundary.id).to match(/\A[0-9a-f-]{36}\z/)
11
+ end
12
+
13
+ it 'stores domain as symbol' do
14
+ expect(boundary.domain).to eq(:physics)
15
+ end
16
+
17
+ it 'clamps confidence to 0..1' do
18
+ b = described_class.new(domain: :x, confidence: 1.5)
19
+ expect(b.confidence).to eq(1.0)
20
+ end
21
+
22
+ it 'clamps coverage_estimate to 0..1' do
23
+ b = described_class.new(domain: :x, coverage_estimate: -0.5)
24
+ expect(b.coverage_estimate).to eq(0.0)
25
+ end
26
+
27
+ it 'sets created_at' do
28
+ expect(boundary.created_at).to be_a(Time)
29
+ end
30
+ end
31
+
32
+ describe '#coverage_label' do
33
+ it 'returns :partial for coverage 0.5' do
34
+ expect(boundary.coverage_label).to eq(:partial)
35
+ end
36
+
37
+ it 'returns :comprehensive for coverage 0.9' do
38
+ b = described_class.new(domain: :x, coverage_estimate: 0.9)
39
+ expect(b.coverage_label).to eq(:comprehensive)
40
+ end
41
+
42
+ it 'returns :minimal for coverage 0.1' do
43
+ b = described_class.new(domain: :x, coverage_estimate: 0.1)
44
+ expect(b.coverage_label).to eq(:minimal)
45
+ end
46
+ end
47
+
48
+ describe '#gap_detected?' do
49
+ it 'returns false when no error occurred' do
50
+ expect(boundary.gap_detected?(error_occurred: false)).to be false
51
+ end
52
+
53
+ it 'returns true when error occurred and confidence is above threshold' do
54
+ expect(boundary.gap_detected?(error_occurred: true)).to be true
55
+ end
56
+
57
+ it 'returns false when error occurred but confidence is below threshold' do
58
+ b = described_class.new(domain: :x, confidence: 0.4)
59
+ expect(b.gap_detected?(error_occurred: true)).to be false
60
+ end
61
+ end
62
+
63
+ describe '#update_confidence!' do
64
+ it 'updates confidence value' do
65
+ boundary.update_confidence!(0.3)
66
+ expect(boundary.confidence).to eq(0.3)
67
+ end
68
+
69
+ it 'updates updated_at' do
70
+ original = boundary.updated_at
71
+ sleep(0.001)
72
+ boundary.update_confidence!(0.9)
73
+ expect(boundary.updated_at).to be >= original
74
+ end
75
+
76
+ it 'returns self' do
77
+ expect(boundary.update_confidence!(0.5)).to eq(boundary)
78
+ end
79
+ end
80
+
81
+ describe '#update_coverage!' do
82
+ it 'updates coverage_estimate' do
83
+ boundary.update_coverage!(0.8)
84
+ expect(boundary.coverage_estimate).to eq(0.8)
85
+ end
86
+
87
+ it 'returns self' do
88
+ expect(boundary.update_coverage!(0.5)).to eq(boundary)
89
+ end
90
+ end
91
+
92
+ describe '#to_h' do
93
+ it 'returns a hash with all required keys' do
94
+ h = boundary.to_h
95
+ expect(h).to include(:id, :domain, :confidence, :coverage_estimate,
96
+ :coverage_label, :created_at, :updated_at)
97
+ end
98
+
99
+ it 'reflects current confidence' do
100
+ boundary.update_confidence!(0.2)
101
+ expect(boundary.to_h[:confidence]).to eq(0.2)
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,179 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Attention::Blindspot::Runners::CognitiveBlindspot do
4
+ subject(:runner) do
5
+ Class.new do
6
+ include Legion::Extensions::Agentic::Attention::Blindspot::Runners::CognitiveBlindspot
7
+
8
+ def engine
9
+ @engine ||= Legion::Extensions::Agentic::Attention::Blindspot::Helpers::BlindspotEngine.new
10
+ end
11
+ end.new
12
+ end
13
+
14
+ let(:created) do
15
+ runner.register_blindspot(
16
+ domain: :reasoning,
17
+ discovered_by: :error_analysis,
18
+ description: 'Over-reliance on recent examples'
19
+ )
20
+ end
21
+
22
+ describe '#register_blindspot' do
23
+ it 'returns success: true' do
24
+ expect(created[:success]).to be true
25
+ end
26
+
27
+ it 'returns blindspot fields' do
28
+ expect(created).to include(:id, :domain, :severity, :status)
29
+ end
30
+
31
+ it 'uses DEFAULT_SEVERITY when severity not provided' do
32
+ expect(created[:severity]).to eq(0.5)
33
+ end
34
+
35
+ it 'accepts explicit severity' do
36
+ result = runner.register_blindspot(domain: :x, discovered_by: :unknown,
37
+ description: 'test', severity: 0.8)
38
+ expect(result[:severity]).to eq(0.8)
39
+ end
40
+ end
41
+
42
+ describe '#acknowledge_blindspot' do
43
+ it 'acknowledges a known blindspot' do
44
+ result = runner.acknowledge_blindspot(blindspot_id: created[:id])
45
+ expect(result[:success]).to be true
46
+ expect(result[:status]).to eq(:acknowledged)
47
+ end
48
+
49
+ it 'returns success: false for unknown id' do
50
+ result = runner.acknowledge_blindspot(blindspot_id: 'bad-id')
51
+ expect(result[:success]).to be false
52
+ expect(result[:error]).to eq('blindspot not found')
53
+ end
54
+ end
55
+
56
+ describe '#mitigate_blindspot' do
57
+ it 'mitigates a known blindspot' do
58
+ result = runner.mitigate_blindspot(blindspot_id: created[:id])
59
+ expect(result[:success]).to be true
60
+ expect(result[:status]).to eq(:mitigated)
61
+ end
62
+
63
+ it 'returns success: false for unknown id' do
64
+ result = runner.mitigate_blindspot(blindspot_id: 'bad-id')
65
+ expect(result[:success]).to be false
66
+ end
67
+ end
68
+
69
+ describe '#resolve_blindspot' do
70
+ it 'resolves a known blindspot' do
71
+ result = runner.resolve_blindspot(blindspot_id: created[:id])
72
+ expect(result[:success]).to be true
73
+ expect(result[:status]).to eq(:resolved)
74
+ end
75
+
76
+ it 'returns success: false for unknown id' do
77
+ result = runner.resolve_blindspot(blindspot_id: 'bad-id')
78
+ expect(result[:success]).to be false
79
+ end
80
+ end
81
+
82
+ describe '#set_knowledge_boundary' do
83
+ it 'returns success: true' do
84
+ result = runner.set_knowledge_boundary(domain: :math, confidence: 0.7, coverage_estimate: 0.5)
85
+ expect(result[:success]).to be true
86
+ end
87
+
88
+ it 'returns boundary fields' do
89
+ result = runner.set_knowledge_boundary(domain: :science)
90
+ expect(result).to include(:id, :domain, :confidence, :coverage_estimate)
91
+ end
92
+ end
93
+
94
+ describe '#detect_boundary_gap' do
95
+ it 'returns success: true' do
96
+ result = runner.detect_boundary_gap(domain: :math)
97
+ expect(result[:success]).to be true
98
+ end
99
+
100
+ it 'detects gap when high confidence + error occurred' do
101
+ runner.set_knowledge_boundary(domain: :math, confidence: 0.8)
102
+ result = runner.detect_boundary_gap(domain: :math, error_occurred: true)
103
+ expect(result[:gap_detected]).to be true
104
+ end
105
+ end
106
+
107
+ describe '#active_blindspots_report' do
108
+ it 'returns count and list of active blindspots' do
109
+ created
110
+ result = runner.active_blindspots_report
111
+ expect(result[:success]).to be true
112
+ expect(result[:count]).to eq(1)
113
+ expect(result[:blindspots]).to be_an(Array)
114
+ end
115
+ end
116
+
117
+ describe '#most_severe_report' do
118
+ it 'returns list sorted by severity' do
119
+ created
120
+ result = runner.most_severe_report(limit: 3)
121
+ expect(result[:success]).to be true
122
+ expect(result[:limit]).to eq(3)
123
+ expect(result[:blindspots]).to be_an(Array)
124
+ end
125
+ end
126
+
127
+ describe '#mitigation_strategies_report' do
128
+ it 'returns strategies' do
129
+ created
130
+ result = runner.mitigation_strategies_report
131
+ expect(result[:success]).to be true
132
+ expect(result[:count]).to eq(1)
133
+ end
134
+
135
+ it 'accepts domain filter' do
136
+ created
137
+ result = runner.mitigation_strategies_report(domain: :reasoning)
138
+ expect(result[:success]).to be true
139
+ end
140
+ end
141
+
142
+ describe '#coverage_report' do
143
+ it 'returns empty when no boundaries' do
144
+ result = runner.coverage_report
145
+ expect(result[:success]).to be true
146
+ expect(result[:count]).to eq(0)
147
+ end
148
+
149
+ it 'returns boundaries after setting one' do
150
+ runner.set_knowledge_boundary(domain: :logic)
151
+ result = runner.coverage_report
152
+ expect(result[:count]).to eq(1)
153
+ end
154
+ end
155
+
156
+ describe '#johari_report' do
157
+ it 'returns comprehensive johari window report' do
158
+ created
159
+ report = runner.johari_report
160
+ expect(report).to include(:total_blindspots, :active, :acknowledged,
161
+ :resolved, :awareness_score, :awareness_label)
162
+ end
163
+ end
164
+
165
+ describe '#awareness_score_report' do
166
+ it 'returns awareness metrics' do
167
+ result = runner.awareness_score_report
168
+ expect(result[:success]).to be true
169
+ expect(result).to include(:awareness_score, :awareness_label, :awareness_gap)
170
+ end
171
+ end
172
+
173
+ describe '#blindspot_stats' do
174
+ it 'returns summary stats hash' do
175
+ result = runner.blindspot_stats
176
+ expect(result).to include(:total_blindspots, :awareness_score)
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Attention::Blink::Client do
4
+ subject(:client) { described_class.new }
5
+
6
+ it 'includes the runner module' do
7
+ expect(client).to respond_to(:submit_stimulus)
8
+ end
9
+
10
+ it 'provides an engine' do
11
+ expect(client.engine).to be_a(Legion::Extensions::Agentic::Attention::Blink::Helpers::BlinkEngine)
12
+ end
13
+
14
+ it 'submits and processes stimuli' do
15
+ result = client.submit_stimulus(stimulus_type: :auditory, content: 'beep')
16
+ expect(result[:success]).to be true
17
+ end
18
+ end