lex-agentic-executive 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 (296) 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-executive.gemspec +30 -0
  7. data/lib/legion/extensions/agentic/executive/autopilot/client.rb +19 -0
  8. data/lib/legion/extensions/agentic/executive/autopilot/helpers/autopilot_engine.rb +161 -0
  9. data/lib/legion/extensions/agentic/executive/autopilot/helpers/constants.rb +62 -0
  10. data/lib/legion/extensions/agentic/executive/autopilot/helpers/mode_event.rb +51 -0
  11. data/lib/legion/extensions/agentic/executive/autopilot/helpers/routine.rb +91 -0
  12. data/lib/legion/extensions/agentic/executive/autopilot/runners/cognitive_autopilot.rb +93 -0
  13. data/lib/legion/extensions/agentic/executive/autopilot/version.rb +13 -0
  14. data/lib/legion/extensions/agentic/executive/autopilot.rb +20 -0
  15. data/lib/legion/extensions/agentic/executive/chunking/client.rb +21 -0
  16. data/lib/legion/extensions/agentic/executive/chunking/helpers/chunk.rb +92 -0
  17. data/lib/legion/extensions/agentic/executive/chunking/helpers/chunking_engine.rb +147 -0
  18. data/lib/legion/extensions/agentic/executive/chunking/helpers/constants.rb +56 -0
  19. data/lib/legion/extensions/agentic/executive/chunking/helpers/information_item.rb +51 -0
  20. data/lib/legion/extensions/agentic/executive/chunking/runners/cognitive_chunking.rb +111 -0
  21. data/lib/legion/extensions/agentic/executive/chunking/version.rb +13 -0
  22. data/lib/legion/extensions/agentic/executive/chunking.rb +21 -0
  23. data/lib/legion/extensions/agentic/executive/cognitive_debt/client.rb +28 -0
  24. data/lib/legion/extensions/agentic/executive/cognitive_debt/helpers/constants.rb +36 -0
  25. data/lib/legion/extensions/agentic/executive/cognitive_debt/helpers/debt_engine.rb +118 -0
  26. data/lib/legion/extensions/agentic/executive/cognitive_debt/helpers/debt_item.rb +83 -0
  27. data/lib/legion/extensions/agentic/executive/cognitive_debt/runners/cognitive_debt.rb +84 -0
  28. data/lib/legion/extensions/agentic/executive/cognitive_debt/version.rb +13 -0
  29. data/lib/legion/extensions/agentic/executive/cognitive_debt.rb +19 -0
  30. data/lib/legion/extensions/agentic/executive/compass/client.rb +15 -0
  31. data/lib/legion/extensions/agentic/executive/compass/helpers/bearing.rb +79 -0
  32. data/lib/legion/extensions/agentic/executive/compass/helpers/compass_engine.rb +108 -0
  33. data/lib/legion/extensions/agentic/executive/compass/helpers/constants.rb +65 -0
  34. data/lib/legion/extensions/agentic/executive/compass/helpers/magnetic_bias.rb +81 -0
  35. data/lib/legion/extensions/agentic/executive/compass/runners/cognitive_compass.rb +76 -0
  36. data/lib/legion/extensions/agentic/executive/compass/version.rb +13 -0
  37. data/lib/legion/extensions/agentic/executive/compass.rb +22 -0
  38. data/lib/legion/extensions/agentic/executive/control/client.rb +19 -0
  39. data/lib/legion/extensions/agentic/executive/control/helpers/constants.rb +45 -0
  40. data/lib/legion/extensions/agentic/executive/control/helpers/control_signal.rb +79 -0
  41. data/lib/legion/extensions/agentic/executive/control/helpers/controller.rb +140 -0
  42. data/lib/legion/extensions/agentic/executive/control/helpers/goal.rb +72 -0
  43. data/lib/legion/extensions/agentic/executive/control/runners/cognitive_control.rb +74 -0
  44. data/lib/legion/extensions/agentic/executive/control/version.rb +13 -0
  45. data/lib/legion/extensions/agentic/executive/control.rb +21 -0
  46. data/lib/legion/extensions/agentic/executive/decision_fatigue/client.rb +28 -0
  47. data/lib/legion/extensions/agentic/executive/decision_fatigue/helpers/constants.rb +51 -0
  48. data/lib/legion/extensions/agentic/executive/decision_fatigue/helpers/decision_record.rb +50 -0
  49. data/lib/legion/extensions/agentic/executive/decision_fatigue/helpers/fatigue_engine.rb +114 -0
  50. data/lib/legion/extensions/agentic/executive/decision_fatigue/runners/decision_fatigue.rb +94 -0
  51. data/lib/legion/extensions/agentic/executive/decision_fatigue/version.rb +13 -0
  52. data/lib/legion/extensions/agentic/executive/decision_fatigue.rb +19 -0
  53. data/lib/legion/extensions/agentic/executive/disengagement/client.rb +24 -0
  54. data/lib/legion/extensions/agentic/executive/disengagement/helpers/constants.rb +48 -0
  55. data/lib/legion/extensions/agentic/executive/disengagement/helpers/disengagement_engine.rb +101 -0
  56. data/lib/legion/extensions/agentic/executive/disengagement/helpers/goal.rb +105 -0
  57. data/lib/legion/extensions/agentic/executive/disengagement/runners/cognitive_disengagement.rb +90 -0
  58. data/lib/legion/extensions/agentic/executive/disengagement/version.rb +13 -0
  59. data/lib/legion/extensions/agentic/executive/disengagement.rb +19 -0
  60. data/lib/legion/extensions/agentic/executive/dissonance_resolution/client.rb +19 -0
  61. data/lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/constants.rb +38 -0
  62. data/lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/dissonance_conflict.rb +90 -0
  63. data/lib/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine.rb +155 -0
  64. data/lib/legion/extensions/agentic/executive/dissonance_resolution/runners/cognitive_dissonance_resolution.rb +74 -0
  65. data/lib/legion/extensions/agentic/executive/dissonance_resolution/version.rb +13 -0
  66. data/lib/legion/extensions/agentic/executive/dissonance_resolution.rb +19 -0
  67. data/lib/legion/extensions/agentic/executive/dual_process/client.rb +25 -0
  68. data/lib/legion/extensions/agentic/executive/dual_process/helpers/constants.rb +44 -0
  69. data/lib/legion/extensions/agentic/executive/dual_process/helpers/decision.rb +50 -0
  70. data/lib/legion/extensions/agentic/executive/dual_process/helpers/dual_process_engine.rb +200 -0
  71. data/lib/legion/extensions/agentic/executive/dual_process/helpers/heuristic.rb +67 -0
  72. data/lib/legion/extensions/agentic/executive/dual_process/runners/dual_process.rb +87 -0
  73. data/lib/legion/extensions/agentic/executive/dual_process/version.rb +13 -0
  74. data/lib/legion/extensions/agentic/executive/dual_process.rb +20 -0
  75. data/lib/legion/extensions/agentic/executive/dwell/client.rb +19 -0
  76. data/lib/legion/extensions/agentic/executive/dwell/helpers/constants.rb +65 -0
  77. data/lib/legion/extensions/agentic/executive/dwell/helpers/dwell_engine.rb +126 -0
  78. data/lib/legion/extensions/agentic/executive/dwell/helpers/dwell_topic.rb +119 -0
  79. data/lib/legion/extensions/agentic/executive/dwell/runners/cognitive_dwell.rb +87 -0
  80. data/lib/legion/extensions/agentic/executive/dwell/version.rb +13 -0
  81. data/lib/legion/extensions/agentic/executive/dwell.rb +19 -0
  82. data/lib/legion/extensions/agentic/executive/executive_function/actors/recovery.rb +45 -0
  83. data/lib/legion/extensions/agentic/executive/executive_function/client.rb +27 -0
  84. data/lib/legion/extensions/agentic/executive/executive_function/helpers/ef_component.rb +58 -0
  85. data/lib/legion/extensions/agentic/executive/executive_function/helpers/executive_controller.rb +129 -0
  86. data/lib/legion/extensions/agentic/executive/executive_function/runners/executive_function.rb +104 -0
  87. data/lib/legion/extensions/agentic/executive/executive_function/version.rb +13 -0
  88. data/lib/legion/extensions/agentic/executive/executive_function.rb +18 -0
  89. data/lib/legion/extensions/agentic/executive/flexibility/actors/tick.rb +31 -0
  90. data/lib/legion/extensions/agentic/executive/flexibility/client.rb +28 -0
  91. data/lib/legion/extensions/agentic/executive/flexibility/helpers/constants.rb +39 -0
  92. data/lib/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine.rb +109 -0
  93. data/lib/legion/extensions/agentic/executive/flexibility/helpers/task_set.rb +69 -0
  94. data/lib/legion/extensions/agentic/executive/flexibility/runners/cognitive_flexibility.rb +77 -0
  95. data/lib/legion/extensions/agentic/executive/flexibility/version.rb +13 -0
  96. data/lib/legion/extensions/agentic/executive/flexibility.rb +19 -0
  97. data/lib/legion/extensions/agentic/executive/flexibility_training/client.rb +29 -0
  98. data/lib/legion/extensions/agentic/executive/flexibility_training/helpers/constants.rb +57 -0
  99. data/lib/legion/extensions/agentic/executive/flexibility_training/helpers/flexibility_engine.rb +178 -0
  100. data/lib/legion/extensions/agentic/executive/flexibility_training/helpers/switch_trial.rb +54 -0
  101. data/lib/legion/extensions/agentic/executive/flexibility_training/helpers/training_task.rb +54 -0
  102. data/lib/legion/extensions/agentic/executive/flexibility_training/runners/cognitive_flexibility_training.rb +134 -0
  103. data/lib/legion/extensions/agentic/executive/flexibility_training/version.rb +13 -0
  104. data/lib/legion/extensions/agentic/executive/flexibility_training.rb +20 -0
  105. data/lib/legion/extensions/agentic/executive/goal_management/client.rb +28 -0
  106. data/lib/legion/extensions/agentic/executive/goal_management/helpers/constants.rb +49 -0
  107. data/lib/legion/extensions/agentic/executive/goal_management/helpers/goal.rb +153 -0
  108. data/lib/legion/extensions/agentic/executive/goal_management/helpers/goal_engine.rb +265 -0
  109. data/lib/legion/extensions/agentic/executive/goal_management/runners/goal_management.rb +169 -0
  110. data/lib/legion/extensions/agentic/executive/goal_management/version.rb +13 -0
  111. data/lib/legion/extensions/agentic/executive/goal_management.rb +19 -0
  112. data/lib/legion/extensions/agentic/executive/inertia/client.rb +15 -0
  113. data/lib/legion/extensions/agentic/executive/inertia/helpers/belief.rb +99 -0
  114. data/lib/legion/extensions/agentic/executive/inertia/helpers/constants.rb +45 -0
  115. data/lib/legion/extensions/agentic/executive/inertia/helpers/inertia_engine.rb +111 -0
  116. data/lib/legion/extensions/agentic/executive/inertia/runners/cognitive_inertia.rb +74 -0
  117. data/lib/legion/extensions/agentic/executive/inertia/version.rb +13 -0
  118. data/lib/legion/extensions/agentic/executive/inertia.rb +19 -0
  119. data/lib/legion/extensions/agentic/executive/inhibition/client.rb +27 -0
  120. data/lib/legion/extensions/agentic/executive/inhibition/helpers/constants.rb +36 -0
  121. data/lib/legion/extensions/agentic/executive/inhibition/helpers/impulse.rb +37 -0
  122. data/lib/legion/extensions/agentic/executive/inhibition/helpers/inhibition_model.rb +122 -0
  123. data/lib/legion/extensions/agentic/executive/inhibition/helpers/inhibition_store.rb +72 -0
  124. data/lib/legion/extensions/agentic/executive/inhibition/runners/inhibition.rb +155 -0
  125. data/lib/legion/extensions/agentic/executive/inhibition/version.rb +13 -0
  126. data/lib/legion/extensions/agentic/executive/inhibition.rb +20 -0
  127. data/lib/legion/extensions/agentic/executive/load/client.rb +25 -0
  128. data/lib/legion/extensions/agentic/executive/load/helpers/constants.rb +36 -0
  129. data/lib/legion/extensions/agentic/executive/load/helpers/load_model.rb +146 -0
  130. data/lib/legion/extensions/agentic/executive/load/runners/cognitive_load.rb +120 -0
  131. data/lib/legion/extensions/agentic/executive/load/version.rb +13 -0
  132. data/lib/legion/extensions/agentic/executive/load.rb +18 -0
  133. data/lib/legion/extensions/agentic/executive/load_balancing/client.rb +19 -0
  134. data/lib/legion/extensions/agentic/executive/load_balancing/helpers/constants.rb +44 -0
  135. data/lib/legion/extensions/agentic/executive/load_balancing/helpers/load_balancer.rb +137 -0
  136. data/lib/legion/extensions/agentic/executive/load_balancing/helpers/subsystem.rb +101 -0
  137. data/lib/legion/extensions/agentic/executive/load_balancing/runners/cognitive_load_balancing.rb +69 -0
  138. data/lib/legion/extensions/agentic/executive/load_balancing/version.rb +13 -0
  139. data/lib/legion/extensions/agentic/executive/load_balancing.rb +19 -0
  140. data/lib/legion/extensions/agentic/executive/planning/client.rb +27 -0
  141. data/lib/legion/extensions/agentic/executive/planning/helpers/constants.rb +26 -0
  142. data/lib/legion/extensions/agentic/executive/planning/helpers/plan.rb +110 -0
  143. data/lib/legion/extensions/agentic/executive/planning/helpers/plan_step.rb +82 -0
  144. data/lib/legion/extensions/agentic/executive/planning/helpers/plan_store.rb +161 -0
  145. data/lib/legion/extensions/agentic/executive/planning/runners/planning.rb +123 -0
  146. data/lib/legion/extensions/agentic/executive/planning/version.rb +13 -0
  147. data/lib/legion/extensions/agentic/executive/planning.rb +20 -0
  148. data/lib/legion/extensions/agentic/executive/prospective_memory/client.rb +28 -0
  149. data/lib/legion/extensions/agentic/executive/prospective_memory/helpers/constants.rb +32 -0
  150. data/lib/legion/extensions/agentic/executive/prospective_memory/helpers/intention.rb +94 -0
  151. data/lib/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine.rb +157 -0
  152. data/lib/legion/extensions/agentic/executive/prospective_memory/runners/prospective_memory.rb +146 -0
  153. data/lib/legion/extensions/agentic/executive/prospective_memory/version.rb +13 -0
  154. data/lib/legion/extensions/agentic/executive/prospective_memory.rb +19 -0
  155. data/lib/legion/extensions/agentic/executive/triage/client.rb +19 -0
  156. data/lib/legion/extensions/agentic/executive/triage/helpers/constants.rb +70 -0
  157. data/lib/legion/extensions/agentic/executive/triage/helpers/demand.rb +101 -0
  158. data/lib/legion/extensions/agentic/executive/triage/helpers/triage_engine.rb +150 -0
  159. data/lib/legion/extensions/agentic/executive/triage/runners/cognitive_triage.rb +110 -0
  160. data/lib/legion/extensions/agentic/executive/triage/version.rb +13 -0
  161. data/lib/legion/extensions/agentic/executive/triage.rb +19 -0
  162. data/lib/legion/extensions/agentic/executive/version.rb +11 -0
  163. data/lib/legion/extensions/agentic/executive/volition/client.rb +27 -0
  164. data/lib/legion/extensions/agentic/executive/volition/helpers/constants.rb +51 -0
  165. data/lib/legion/extensions/agentic/executive/volition/helpers/drive_synthesizer.rb +158 -0
  166. data/lib/legion/extensions/agentic/executive/volition/helpers/intention.rb +56 -0
  167. data/lib/legion/extensions/agentic/executive/volition/helpers/intention_stack.rb +140 -0
  168. data/lib/legion/extensions/agentic/executive/volition/runners/volition.rb +129 -0
  169. data/lib/legion/extensions/agentic/executive/volition/version.rb +13 -0
  170. data/lib/legion/extensions/agentic/executive/volition.rb +20 -0
  171. data/lib/legion/extensions/agentic/executive/working_memory/client.rb +21 -0
  172. data/lib/legion/extensions/agentic/executive/working_memory/helpers/buffer.rb +124 -0
  173. data/lib/legion/extensions/agentic/executive/working_memory/helpers/buffer_item.rb +72 -0
  174. data/lib/legion/extensions/agentic/executive/working_memory/helpers/constants.rb +47 -0
  175. data/lib/legion/extensions/agentic/executive/working_memory/runners/working_memory.rb +102 -0
  176. data/lib/legion/extensions/agentic/executive/working_memory/version.rb +13 -0
  177. data/lib/legion/extensions/agentic/executive/working_memory.rb +19 -0
  178. data/lib/legion/extensions/agentic/executive.rb +40 -0
  179. data/spec/legion/extensions/agentic/executive/autopilot/client_spec.rb +21 -0
  180. data/spec/legion/extensions/agentic/executive/autopilot/cognitive_autopilot_spec.rb +7 -0
  181. data/spec/legion/extensions/agentic/executive/autopilot/helpers/autopilot_engine_spec.rb +166 -0
  182. data/spec/legion/extensions/agentic/executive/autopilot/helpers/constants_spec.rb +37 -0
  183. data/spec/legion/extensions/agentic/executive/autopilot/helpers/mode_event_spec.rb +30 -0
  184. data/spec/legion/extensions/agentic/executive/autopilot/helpers/routine_spec.rb +133 -0
  185. data/spec/legion/extensions/agentic/executive/autopilot/runners_spec.rb +108 -0
  186. data/spec/legion/extensions/agentic/executive/chunking/client_spec.rb +67 -0
  187. data/spec/legion/extensions/agentic/executive/chunking/helpers/chunk_spec.rb +187 -0
  188. data/spec/legion/extensions/agentic/executive/chunking/helpers/chunking_engine_spec.rb +290 -0
  189. data/spec/legion/extensions/agentic/executive/chunking/helpers/constants_spec.rb +116 -0
  190. data/spec/legion/extensions/agentic/executive/chunking/helpers/information_item_spec.rb +75 -0
  191. data/spec/legion/extensions/agentic/executive/chunking/runners/cognitive_chunking_spec.rb +169 -0
  192. data/spec/legion/extensions/agentic/executive/cognitive_debt/client_spec.rb +73 -0
  193. data/spec/legion/extensions/agentic/executive/cognitive_debt/cognitive_debt_spec.rb +15 -0
  194. data/spec/legion/extensions/agentic/executive/cognitive_debt/helpers/constants_spec.rb +78 -0
  195. data/spec/legion/extensions/agentic/executive/cognitive_debt/helpers/debt_engine_spec.rb +297 -0
  196. data/spec/legion/extensions/agentic/executive/cognitive_debt/helpers/debt_item_spec.rb +233 -0
  197. data/spec/legion/extensions/agentic/executive/cognitive_debt/runners/cognitive_debt_spec.rb +196 -0
  198. data/spec/legion/extensions/agentic/executive/compass/client_spec.rb +16 -0
  199. data/spec/legion/extensions/agentic/executive/compass/helpers/bearing_spec.rb +93 -0
  200. data/spec/legion/extensions/agentic/executive/compass/helpers/compass_engine_spec.rb +113 -0
  201. data/spec/legion/extensions/agentic/executive/compass/helpers/constants_spec.rb +45 -0
  202. data/spec/legion/extensions/agentic/executive/compass/helpers/magnetic_bias_spec.rb +103 -0
  203. data/spec/legion/extensions/agentic/executive/compass/runners/cognitive_compass_spec.rb +80 -0
  204. data/spec/legion/extensions/agentic/executive/control/client_spec.rb +23 -0
  205. data/spec/legion/extensions/agentic/executive/control/helpers/control_signal_spec.rb +118 -0
  206. data/spec/legion/extensions/agentic/executive/control/helpers/controller_spec.rb +167 -0
  207. data/spec/legion/extensions/agentic/executive/control/helpers/goal_spec.rb +99 -0
  208. data/spec/legion/extensions/agentic/executive/control/runners/cognitive_control_spec.rb +107 -0
  209. data/spec/legion/extensions/agentic/executive/decision_fatigue/client_spec.rb +24 -0
  210. data/spec/legion/extensions/agentic/executive/decision_fatigue/helpers/constants_spec.rb +93 -0
  211. data/spec/legion/extensions/agentic/executive/decision_fatigue/helpers/decision_record_spec.rb +89 -0
  212. data/spec/legion/extensions/agentic/executive/decision_fatigue/helpers/fatigue_engine_spec.rb +216 -0
  213. data/spec/legion/extensions/agentic/executive/decision_fatigue/runners/decision_fatigue_spec.rb +180 -0
  214. data/spec/legion/extensions/agentic/executive/disengagement/helpers/constants_spec.rb +81 -0
  215. data/spec/legion/extensions/agentic/executive/disengagement/helpers/disengagement_engine_spec.rb +213 -0
  216. data/spec/legion/extensions/agentic/executive/disengagement/helpers/goal_spec.rb +289 -0
  217. data/spec/legion/extensions/agentic/executive/disengagement/runners/cognitive_disengagement_spec.rb +215 -0
  218. data/spec/legion/extensions/agentic/executive/dissonance_resolution/client_spec.rb +20 -0
  219. data/spec/legion/extensions/agentic/executive/dissonance_resolution/helpers/dissonance_conflict_spec.rb +107 -0
  220. data/spec/legion/extensions/agentic/executive/dissonance_resolution/helpers/resolution_engine_spec.rb +122 -0
  221. data/spec/legion/extensions/agentic/executive/dissonance_resolution/runners/cognitive_dissonance_resolution_spec.rb +49 -0
  222. data/spec/legion/extensions/agentic/executive/dual_process/client_spec.rb +74 -0
  223. data/spec/legion/extensions/agentic/executive/dual_process/helpers/constants_spec.rb +55 -0
  224. data/spec/legion/extensions/agentic/executive/dual_process/helpers/decision_spec.rb +76 -0
  225. data/spec/legion/extensions/agentic/executive/dual_process/helpers/dual_process_engine_spec.rb +274 -0
  226. data/spec/legion/extensions/agentic/executive/dual_process/helpers/heuristic_spec.rb +144 -0
  227. data/spec/legion/extensions/agentic/executive/dual_process/runners/dual_process_spec.rb +188 -0
  228. data/spec/legion/extensions/agentic/executive/dwell/cognitive_dwell_spec.rb +7 -0
  229. data/spec/legion/extensions/agentic/executive/dwell/helpers/dwell_engine_spec.rb +136 -0
  230. data/spec/legion/extensions/agentic/executive/dwell/helpers/dwell_topic_spec.rb +152 -0
  231. data/spec/legion/extensions/agentic/executive/executive_function/client_spec.rb +40 -0
  232. data/spec/legion/extensions/agentic/executive/executive_function/helpers/ef_component_spec.rb +108 -0
  233. data/spec/legion/extensions/agentic/executive/executive_function/helpers/executive_controller_spec.rb +136 -0
  234. data/spec/legion/extensions/agentic/executive/executive_function/runners/executive_function_spec.rb +191 -0
  235. data/spec/legion/extensions/agentic/executive/flexibility/client_spec.rb +20 -0
  236. data/spec/legion/extensions/agentic/executive/flexibility/helpers/flexibility_engine_spec.rb +119 -0
  237. data/spec/legion/extensions/agentic/executive/flexibility/helpers/task_set_spec.rb +87 -0
  238. data/spec/legion/extensions/agentic/executive/flexibility/runners/cognitive_flexibility_spec.rb +69 -0
  239. data/spec/legion/extensions/agentic/executive/flexibility_training/client_spec.rb +39 -0
  240. data/spec/legion/extensions/agentic/executive/flexibility_training/helpers/constants_spec.rb +67 -0
  241. data/spec/legion/extensions/agentic/executive/flexibility_training/helpers/flexibility_engine_spec.rb +209 -0
  242. data/spec/legion/extensions/agentic/executive/flexibility_training/helpers/switch_trial_spec.rb +77 -0
  243. data/spec/legion/extensions/agentic/executive/flexibility_training/helpers/training_task_spec.rb +97 -0
  244. data/spec/legion/extensions/agentic/executive/flexibility_training/runners/cognitive_flexibility_training_spec.rb +171 -0
  245. data/spec/legion/extensions/agentic/executive/goal_management/client_spec.rb +34 -0
  246. data/spec/legion/extensions/agentic/executive/goal_management/goal_management_spec.rb +11 -0
  247. data/spec/legion/extensions/agentic/executive/goal_management/helpers/constants_spec.rb +94 -0
  248. data/spec/legion/extensions/agentic/executive/goal_management/helpers/goal_engine_spec.rb +358 -0
  249. data/spec/legion/extensions/agentic/executive/goal_management/helpers/goal_spec.rb +283 -0
  250. data/spec/legion/extensions/agentic/executive/goal_management/runners/goal_management_spec.rb +244 -0
  251. data/spec/legion/extensions/agentic/executive/inertia/helpers/belief_spec.rb +128 -0
  252. data/spec/legion/extensions/agentic/executive/inertia/helpers/inertia_engine_spec.rb +104 -0
  253. data/spec/legion/extensions/agentic/executive/inertia/runners/cognitive_inertia_spec.rb +59 -0
  254. data/spec/legion/extensions/agentic/executive/inhibition/client_spec.rb +43 -0
  255. data/spec/legion/extensions/agentic/executive/inhibition/helpers/constants_spec.rb +108 -0
  256. data/spec/legion/extensions/agentic/executive/inhibition/helpers/impulse_spec.rb +101 -0
  257. data/spec/legion/extensions/agentic/executive/inhibition/helpers/inhibition_model_spec.rb +245 -0
  258. data/spec/legion/extensions/agentic/executive/inhibition/helpers/inhibition_store_spec.rb +126 -0
  259. data/spec/legion/extensions/agentic/executive/inhibition/runners/inhibition_spec.rb +242 -0
  260. data/spec/legion/extensions/agentic/executive/load/client_spec.rb +94 -0
  261. data/spec/legion/extensions/agentic/executive/load/helpers/constants_spec.rb +62 -0
  262. data/spec/legion/extensions/agentic/executive/load/helpers/load_model_spec.rb +314 -0
  263. data/spec/legion/extensions/agentic/executive/load/runners/cognitive_load_spec.rb +231 -0
  264. data/spec/legion/extensions/agentic/executive/load_balancing/client_spec.rb +20 -0
  265. data/spec/legion/extensions/agentic/executive/load_balancing/helpers/load_balancer_spec.rb +106 -0
  266. data/spec/legion/extensions/agentic/executive/load_balancing/helpers/subsystem_spec.rb +106 -0
  267. data/spec/legion/extensions/agentic/executive/load_balancing/runners/cognitive_load_balancing_spec.rb +52 -0
  268. data/spec/legion/extensions/agentic/executive/planning/client_spec.rb +91 -0
  269. data/spec/legion/extensions/agentic/executive/planning/helpers/constants_spec.rb +91 -0
  270. data/spec/legion/extensions/agentic/executive/planning/helpers/plan_spec.rb +230 -0
  271. data/spec/legion/extensions/agentic/executive/planning/helpers/plan_step_spec.rb +159 -0
  272. data/spec/legion/extensions/agentic/executive/planning/helpers/plan_store_spec.rb +317 -0
  273. data/spec/legion/extensions/agentic/executive/planning/runners/planning_spec.rb +217 -0
  274. data/spec/legion/extensions/agentic/executive/prospective_memory/client_spec.rb +24 -0
  275. data/spec/legion/extensions/agentic/executive/prospective_memory/helpers/constants_spec.rb +84 -0
  276. data/spec/legion/extensions/agentic/executive/prospective_memory/helpers/intention_spec.rb +194 -0
  277. data/spec/legion/extensions/agentic/executive/prospective_memory/helpers/prospective_engine_spec.rb +255 -0
  278. data/spec/legion/extensions/agentic/executive/prospective_memory/runners/prospective_memory_spec.rb +220 -0
  279. data/spec/legion/extensions/agentic/executive/triage/client_spec.rb +28 -0
  280. data/spec/legion/extensions/agentic/executive/triage/cognitive_triage_spec.rb +7 -0
  281. data/spec/legion/extensions/agentic/executive/triage/helpers/constants_spec.rb +41 -0
  282. data/spec/legion/extensions/agentic/executive/triage/helpers/demand_spec.rb +139 -0
  283. data/spec/legion/extensions/agentic/executive/triage/helpers/triage_engine_spec.rb +183 -0
  284. data/spec/legion/extensions/agentic/executive/triage/runners_spec.rb +127 -0
  285. data/spec/legion/extensions/agentic/executive/volition/client_spec.rb +25 -0
  286. data/spec/legion/extensions/agentic/executive/volition/helpers/drive_synthesizer_spec.rb +99 -0
  287. data/spec/legion/extensions/agentic/executive/volition/helpers/intention_spec.rb +93 -0
  288. data/spec/legion/extensions/agentic/executive/volition/helpers/intention_stack_spec.rb +129 -0
  289. data/spec/legion/extensions/agentic/executive/volition/runners/volition_spec.rb +135 -0
  290. data/spec/legion/extensions/agentic/executive/working_memory/client_spec.rb +93 -0
  291. data/spec/legion/extensions/agentic/executive/working_memory/helpers/buffer_item_spec.rb +185 -0
  292. data/spec/legion/extensions/agentic/executive/working_memory/helpers/buffer_spec.rb +232 -0
  293. data/spec/legion/extensions/agentic/executive/working_memory/helpers/constants_spec.rb +99 -0
  294. data/spec/legion/extensions/agentic/executive/working_memory/runners/working_memory_spec.rb +191 -0
  295. data/spec/spec_helper.rb +46 -0
  296. metadata +380 -0
@@ -0,0 +1,196 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/agentic/executive/cognitive_debt/client'
4
+
5
+ RSpec.describe Legion::Extensions::Agentic::Executive::CognitiveDebt::Runners::CognitiveDebt do
6
+ let(:engine) { Legion::Extensions::Agentic::Executive::CognitiveDebt::Helpers::DebtEngine.new }
7
+ let(:client) { Legion::Extensions::Agentic::Executive::CognitiveDebt::Client.new(engine: engine) }
8
+
9
+ describe '#create_debt' do
10
+ it 'creates a debt via the engine' do
11
+ result = client.create_debt(label: 'decide on auth', debt_type: :deferred_decision)
12
+ expect(result[:created]).to be true
13
+ end
14
+
15
+ it 'returns a debt_id' do
16
+ result = client.create_debt(label: 'decide on auth', debt_type: :deferred_decision)
17
+ expect(result[:debt_id]).not_to be_nil
18
+ end
19
+
20
+ it 'passes custom principal' do
21
+ result = client.create_debt(label: 'x', debt_type: :unprocessed_input, principal: 0.7)
22
+ expect(result[:debt][:principal]).to eq(0.7)
23
+ end
24
+
25
+ it 'passes custom domain' do
26
+ result = client.create_debt(label: 'x', debt_type: :incomplete_analysis, domain: 'security')
27
+ expect(result[:debt][:domain]).to eq('security')
28
+ end
29
+
30
+ it 'uses default principal when not specified' do
31
+ result = client.create_debt(label: 'x', debt_type: :deferred_decision)
32
+ expected = Legion::Extensions::Agentic::Executive::CognitiveDebt::Helpers::Constants::DEFAULT_PRINCIPAL
33
+ expect(result[:debt][:principal]).to eq(expected)
34
+ end
35
+
36
+ it 'returns created: false for invalid type' do
37
+ result = client.create_debt(label: 'x', debt_type: :nonexistent)
38
+ expect(result[:created]).to be false
39
+ end
40
+ end
41
+
42
+ describe '#repay_debt' do
43
+ let!(:debt_id) do
44
+ client.create_debt(label: 'unresolved thing', debt_type: :unresolved_conflict)[:debt_id]
45
+ end
46
+
47
+ it 'repays an existing debt' do
48
+ result = client.repay_debt(debt_id: debt_id)
49
+ expect(result[:repaid]).to be true
50
+ end
51
+
52
+ it 'returns found: false for unknown id' do
53
+ result = client.repay_debt(debt_id: 'no-such-id')
54
+ expect(result[:found]).to be false
55
+ end
56
+
57
+ it 'uses custom amount' do
58
+ result = client.repay_debt(debt_id: debt_id, amount: 0.05)
59
+ expect(result[:found]).to be true
60
+ end
61
+ end
62
+
63
+ describe '#accrue_interest' do
64
+ before { client.create_debt(label: 'pending work', debt_type: :pending_integration, principal: 0.4) }
65
+
66
+ it 'accrues interest on active debts' do
67
+ result = client.accrue_interest
68
+ expect(result[:accrued]).to eq(1)
69
+ end
70
+
71
+ it 'returns total_debt' do
72
+ result = client.accrue_interest
73
+ expect(result[:total_debt]).to be > 0.4
74
+ end
75
+ end
76
+
77
+ describe '#total_debt' do
78
+ it 'returns 0 for empty engine' do
79
+ result = client.total_debt
80
+ expect(result[:total_debt]).to eq(0.0)
81
+ end
82
+
83
+ it 'reflects created debts' do
84
+ client.create_debt(label: 'x', debt_type: :deferred_decision, principal: 0.5)
85
+ result = client.total_debt
86
+ expect(result[:total_debt]).to be_within(1e-10).of(0.5)
87
+ end
88
+ end
89
+
90
+ describe '#debt_by_type' do
91
+ before do
92
+ client.create_debt(label: 'a', debt_type: :deferred_decision)
93
+ client.create_debt(label: 'b', debt_type: :deferred_decision)
94
+ client.create_debt(label: 'c', debt_type: :unprocessed_input)
95
+ end
96
+
97
+ it 'returns count for the specified type' do
98
+ result = client.debt_by_type(debt_type: :deferred_decision)
99
+ expect(result[:count]).to eq(2)
100
+ end
101
+
102
+ it 'returns 0 for type with no debts' do
103
+ result = client.debt_by_type(debt_type: :unresolved_conflict)
104
+ expect(result[:count]).to eq(0)
105
+ end
106
+ end
107
+
108
+ describe '#debt_by_domain' do
109
+ before do
110
+ client.create_debt(label: 'a', debt_type: :deferred_decision, domain: 'perf')
111
+ client.create_debt(label: 'b', debt_type: :unprocessed_input, domain: 'perf')
112
+ end
113
+
114
+ it 'returns count for the specified domain' do
115
+ result = client.debt_by_domain(domain: 'perf')
116
+ expect(result[:count]).to eq(2)
117
+ end
118
+
119
+ it 'returns 0 for unknown domain' do
120
+ result = client.debt_by_domain(domain: 'unknown')
121
+ expect(result[:count]).to eq(0)
122
+ end
123
+ end
124
+
125
+ describe '#most_costly' do
126
+ before do
127
+ client.create_debt(label: 'cheap', debt_type: :deferred_decision, principal: 0.1)
128
+ client.create_debt(label: 'expensive', debt_type: :deferred_decision, principal: 0.9)
129
+ end
130
+
131
+ it 'returns most costly first' do
132
+ result = client.most_costly(limit: 2)
133
+ expect(result[:items].first[:principal]).to eq(0.9)
134
+ end
135
+
136
+ it 'respects the limit' do
137
+ result = client.most_costly(limit: 1)
138
+ expect(result[:count]).to eq(1)
139
+ end
140
+ end
141
+
142
+ describe '#oldest_debts' do
143
+ it 'returns debts ordered by age' do
144
+ client.create_debt(label: 'old', debt_type: :deferred_decision)
145
+ sleep(0.01)
146
+ client.create_debt(label: 'newer', debt_type: :deferred_decision)
147
+ result = client.oldest_debts(limit: 2)
148
+ expect(result[:items].first[:label]).to eq('old')
149
+ end
150
+ end
151
+
152
+ describe '#debt_report' do
153
+ before do
154
+ client.create_debt(label: 'decision', debt_type: :deferred_decision, principal: 0.3)
155
+ client.create_debt(label: 'analysis', debt_type: :incomplete_analysis, principal: 0.6)
156
+ end
157
+
158
+ it 'includes total_debt' do
159
+ report = client.debt_report
160
+ expect(report[:total_debt]).to be > 0.0
161
+ end
162
+
163
+ it 'includes active_count' do
164
+ report = client.debt_report
165
+ expect(report[:active_count]).to eq(2)
166
+ end
167
+
168
+ it 'includes by_type with all five types' do
169
+ report = client.debt_report
170
+ expect(report[:by_type].keys).to match_array(
171
+ Legion::Extensions::Agentic::Executive::CognitiveDebt::Helpers::Constants::DEBT_TYPES
172
+ )
173
+ end
174
+
175
+ it 'includes recommended_priority' do
176
+ report = client.debt_report
177
+ expect(report[:recommended_priority]).not_to be_empty
178
+ end
179
+ end
180
+
181
+ describe '#prune_repaid' do
182
+ it 'prunes repaid debts and returns counts' do
183
+ id = client.create_debt(label: 'done', debt_type: :deferred_decision)[:debt_id]
184
+ client.repay_debt(debt_id: id, amount: 99.0)
185
+ result = client.prune_repaid
186
+ expect(result[:pruned]).to eq(1)
187
+ expect(result[:remaining]).to eq(0)
188
+ end
189
+
190
+ it 'returns pruned: 0 when nothing to prune' do
191
+ client.create_debt(label: 'active', debt_type: :deferred_decision)
192
+ result = client.prune_repaid
193
+ expect(result[:pruned]).to eq(0)
194
+ end
195
+ end
196
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Executive::Compass::Client do
4
+ subject(:client) { described_class.new }
5
+
6
+ it 'includes the runner module' do
7
+ expect(client).to respond_to(:take_bearing)
8
+ end
9
+
10
+ it 'includes all runner methods' do
11
+ %i[take_bearing register_bias calibrate
12
+ list_bearings list_biases compass_status].each do |m|
13
+ expect(client).to respond_to(m)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Executive::Compass::Helpers::Bearing do
4
+ subject(:bearing) do
5
+ described_class.new(direction: :north, context: 'seeking truth')
6
+ end
7
+
8
+ describe '#initialize' do
9
+ it 'sets direction' do
10
+ expect(bearing.direction).to eq(:north)
11
+ end
12
+
13
+ it 'resolves value axis' do
14
+ expect(bearing.value_axis).to eq(:truth)
15
+ end
16
+
17
+ it 'sets context' do
18
+ expect(bearing.context).to eq('seeking truth')
19
+ end
20
+
21
+ it 'generates uuid' do
22
+ expect(bearing.id).to match(/\A[0-9a-f-]{36}\z/)
23
+ end
24
+
25
+ it 'defaults confidence to 0.7' do
26
+ expect(bearing.confidence).to eq(0.7)
27
+ end
28
+
29
+ it 'accepts intercardinal directions' do
30
+ b = described_class.new(direction: :northeast, context: 'pragmatic truth')
31
+ expect(b.value_axis).to eq(%i[truth utility])
32
+ end
33
+
34
+ it 'rejects unknown directions' do
35
+ expect { described_class.new(direction: :up, context: 'x') }
36
+ .to raise_error(ArgumentError, /unknown direction/)
37
+ end
38
+
39
+ it 'accepts custom confidence' do
40
+ b = described_class.new(direction: :south, context: 'x', confidence: 0.95)
41
+ expect(b.confidence).to eq(0.95)
42
+ end
43
+ end
44
+
45
+ describe '#reliable?' do
46
+ it 'returns true at default confidence' do
47
+ expect(bearing.reliable?).to be true
48
+ end
49
+
50
+ it 'returns false at low confidence' do
51
+ b = described_class.new(direction: :east, context: 'x', confidence: 0.3)
52
+ expect(b.reliable?).to be false
53
+ end
54
+ end
55
+
56
+ describe '#lost?' do
57
+ it 'returns false at default confidence' do
58
+ expect(bearing.lost?).to be false
59
+ end
60
+
61
+ it 'returns true at very low confidence' do
62
+ b = described_class.new(direction: :west, context: 'x', confidence: 0.1)
63
+ expect(b.lost?).to be true
64
+ end
65
+ end
66
+
67
+ describe '#cardinal?' do
68
+ it 'returns true for cardinal directions' do
69
+ expect(bearing.cardinal?).to be true
70
+ end
71
+
72
+ it 'returns false for intercardinal' do
73
+ b = described_class.new(direction: :northeast, context: 'x')
74
+ expect(b.cardinal?).to be false
75
+ end
76
+ end
77
+
78
+ describe '#accuracy_label' do
79
+ it 'returns a symbol' do
80
+ expect(bearing.accuracy_label).to be_a(Symbol)
81
+ end
82
+ end
83
+
84
+ describe '#to_h' do
85
+ it 'returns all keys' do
86
+ h = bearing.to_h
87
+ %i[id direction value_axis context confidence accuracy_label
88
+ cardinal reliable lost taken_at].each do |k|
89
+ expect(h).to have_key(k)
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,113 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Executive::Compass::Helpers::CompassEngine do
4
+ subject(:engine) { described_class.new }
5
+
6
+ describe '#take_bearing' do
7
+ it 'creates a bearing' do
8
+ b = engine.take_bearing(direction: :north, context: 'truth seeking')
9
+ expect(b).to be_a(Legion::Extensions::Agentic::Executive::Compass::Helpers::Bearing)
10
+ end
11
+ end
12
+
13
+ describe '#register_bias' do
14
+ it 'creates a magnetic bias' do
15
+ b = engine.register_bias(bias_type: :confirmation, domain: :reasoning)
16
+ expect(b).to be_a(Legion::Extensions::Agentic::Executive::Compass::Helpers::MagneticBias)
17
+ end
18
+
19
+ it 'raises when too many biases' do
20
+ stub_const('Legion::Extensions::Agentic::Executive::Compass::Helpers::Constants::MAX_BIASES', 1)
21
+ engine.register_bias(bias_type: :confirmation, domain: :x)
22
+ expect { engine.register_bias(bias_type: :anchoring, domain: :y) }
23
+ .to raise_error(ArgumentError, /too many biases/)
24
+ end
25
+ end
26
+
27
+ describe '#calibrate' do
28
+ it 'reduces bias declination' do
29
+ bias = engine.register_bias(bias_type: :anchoring, domain: :x, declination: 0.5)
30
+ engine.calibrate(bias_id: bias.id)
31
+ expect(bias.declination).to be < 0.5
32
+ end
33
+
34
+ it 'raises for unknown bias' do
35
+ expect { engine.calibrate(bias_id: 'nope') }
36
+ .to raise_error(ArgumentError, /bias not found/)
37
+ end
38
+ end
39
+
40
+ describe '#true_north_offset' do
41
+ it 'returns 0.0 with no biases' do
42
+ expect(engine.true_north_offset).to eq(0.0)
43
+ end
44
+
45
+ it 'returns average declination' do
46
+ engine.register_bias(bias_type: :confirmation, domain: :x, declination: 0.4)
47
+ engine.register_bias(bias_type: :anchoring, domain: :y, declination: 0.6)
48
+ expect(engine.true_north_offset).to eq(0.5)
49
+ end
50
+ end
51
+
52
+ describe '#accuracy' do
53
+ it 'returns 1.0 with no biases' do
54
+ expect(engine.accuracy).to eq(1.0)
55
+ end
56
+
57
+ it 'decreases with biases' do
58
+ engine.register_bias(bias_type: :confirmation, domain: :x, declination: 0.5)
59
+ expect(engine.accuracy).to be < 1.0
60
+ end
61
+ end
62
+
63
+ describe '#decay_biases!' do
64
+ it 'decays all biases' do
65
+ bias = engine.register_bias(bias_type: :recency, domain: :x, strength: 0.5)
66
+ old = bias.strength
67
+ engine.decay_biases!
68
+ expect(bias.strength).to be < old
69
+ end
70
+ end
71
+
72
+ describe '#dominant_direction' do
73
+ it 'returns nil with no bearings' do
74
+ expect(engine.dominant_direction).to be_nil
75
+ end
76
+
77
+ it 'returns the most common direction weighted by confidence' do
78
+ engine.take_bearing(direction: :north, context: 'a', confidence: 0.9)
79
+ engine.take_bearing(direction: :south, context: 'b', confidence: 0.3)
80
+ expect(engine.dominant_direction).to eq(:north)
81
+ end
82
+ end
83
+
84
+ describe '#bearings_by_direction' do
85
+ it 'counts bearings per direction' do
86
+ engine.take_bearing(direction: :north, context: 'a')
87
+ engine.take_bearing(direction: :north, context: 'b')
88
+ engine.take_bearing(direction: :east, context: 'c')
89
+ result = engine.bearings_by_direction
90
+ expect(result[:north]).to eq(2)
91
+ expect(result[:east]).to eq(1)
92
+ end
93
+ end
94
+
95
+ describe '#strongest_biases' do
96
+ it 'returns biases sorted by strength' do
97
+ engine.register_bias(bias_type: :confirmation, domain: :x, strength: 0.3)
98
+ strong = engine.register_bias(bias_type: :anchoring, domain: :y, strength: 0.9)
99
+ expect(engine.strongest_biases(limit: 1).first).to eq(strong)
100
+ end
101
+ end
102
+
103
+ describe '#compass_report' do
104
+ it 'returns comprehensive report' do
105
+ engine.take_bearing(direction: :north, context: 'test')
106
+ report = engine.compass_report
107
+ %i[total_bearings total_biases accuracy accuracy_label
108
+ true_north_offset dominant_direction by_direction severe_biases].each do |k|
109
+ expect(report).to have_key(k)
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Executive::Compass::Helpers::Constants do
4
+ describe 'CARDINAL_DIRECTIONS' do
5
+ it 'maps four cardinal points to value axes' do
6
+ expect(described_class::CARDINAL_DIRECTIONS.keys).to eq(%i[north east south west])
7
+ end
8
+
9
+ it 'maps north to truth' do
10
+ expect(described_class::CARDINAL_DIRECTIONS[:north]).to eq(:truth)
11
+ end
12
+ end
13
+
14
+ describe 'INTERCARDINAL_DIRECTIONS' do
15
+ it 'has four intercardinal points' do
16
+ expect(described_class::INTERCARDINAL_DIRECTIONS.size).to eq(4)
17
+ end
18
+
19
+ it 'blends two value axes per direction' do
20
+ expect(described_class::INTERCARDINAL_DIRECTIONS[:northeast]).to eq(%i[truth utility])
21
+ end
22
+ end
23
+
24
+ describe 'BIAS_TYPES' do
25
+ it 'includes common cognitive biases' do
26
+ %i[confirmation anchoring availability].each do |b|
27
+ expect(described_class::BIAS_TYPES).to include(b)
28
+ end
29
+ end
30
+ end
31
+
32
+ describe '.label_for' do
33
+ it 'returns precise for high accuracy' do
34
+ expect(described_class.label_for(described_class::ACCURACY_LABELS, 0.9)).to eq(:precise)
35
+ end
36
+
37
+ it 'returns lost for low accuracy' do
38
+ expect(described_class.label_for(described_class::ACCURACY_LABELS, 0.1)).to eq(:lost)
39
+ end
40
+
41
+ it 'returns severe for high declination' do
42
+ expect(described_class.label_for(described_class::DECLINATION_LABELS, 0.85)).to eq(:severe)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Executive::Compass::Helpers::MagneticBias do
4
+ subject(:bias) do
5
+ described_class.new(bias_type: :confirmation, domain: :reasoning)
6
+ end
7
+
8
+ describe '#initialize' do
9
+ it 'sets bias type' do
10
+ expect(bias.bias_type).to eq(:confirmation)
11
+ end
12
+
13
+ it 'sets domain' do
14
+ expect(bias.domain).to eq(:reasoning)
15
+ end
16
+
17
+ it 'defaults declination to 0.3' do
18
+ expect(bias.declination).to eq(0.3)
19
+ end
20
+
21
+ it 'defaults strength to 0.5' do
22
+ expect(bias.strength).to eq(0.5)
23
+ end
24
+
25
+ it 'rejects unknown bias types' do
26
+ expect { described_class.new(bias_type: :laziness, domain: :x) }
27
+ .to raise_error(ArgumentError, /unknown bias type/)
28
+ end
29
+ end
30
+
31
+ describe '#correct!' do
32
+ it 'reduces declination' do
33
+ old = bias.declination
34
+ bias.correct!
35
+ expect(bias.declination).to be < old
36
+ end
37
+
38
+ it 'does not go below zero' do
39
+ 10.times { bias.correct!(amount: 0.5) }
40
+ expect(bias.declination).to eq(0.0)
41
+ end
42
+ end
43
+
44
+ describe '#intensify!' do
45
+ it 'increases strength' do
46
+ old = bias.strength
47
+ bias.intensify!
48
+ expect(bias.strength).to be > old
49
+ end
50
+
51
+ it 'increases declination' do
52
+ old = bias.declination
53
+ bias.intensify!
54
+ expect(bias.declination).to be > old
55
+ end
56
+ end
57
+
58
+ describe '#decay!' do
59
+ it 'reduces strength' do
60
+ old = bias.strength
61
+ bias.decay!
62
+ expect(bias.strength).to be < old
63
+ end
64
+ end
65
+
66
+ describe '#severe?' do
67
+ it 'returns false at default declination' do
68
+ expect(bias.severe?).to be false
69
+ end
70
+
71
+ it 'returns true at high declination' do
72
+ b = described_class.new(bias_type: :anchoring, domain: :x, declination: 0.9)
73
+ expect(b.severe?).to be true
74
+ end
75
+ end
76
+
77
+ describe '#negligible?' do
78
+ it 'returns false at default declination' do
79
+ expect(bias.negligible?).to be false
80
+ end
81
+
82
+ it 'returns true after correction' do
83
+ 5.times { bias.correct!(amount: 0.1) }
84
+ expect(bias.negligible?).to be true
85
+ end
86
+ end
87
+
88
+ describe '#declination_label' do
89
+ it 'returns a symbol' do
90
+ expect(bias.declination_label).to be_a(Symbol)
91
+ end
92
+ end
93
+
94
+ describe '#to_h' do
95
+ it 'returns all keys' do
96
+ h = bias.to_h
97
+ %i[id bias_type domain declination declination_label
98
+ strength severe negligible detected_at].each do |k|
99
+ expect(h).to have_key(k)
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Executive::Compass::Runners::CognitiveCompass do
4
+ let(:engine) { Legion::Extensions::Agentic::Executive::Compass::Helpers::CompassEngine.new }
5
+
6
+ describe '.take_bearing' do
7
+ it 'returns success' do
8
+ result = described_class.take_bearing(
9
+ direction: :north, context: 'truth seeking', engine: engine
10
+ )
11
+ expect(result[:success]).to be true
12
+ expect(result[:bearing][:direction]).to eq(:north)
13
+ end
14
+
15
+ it 'returns failure for invalid direction' do
16
+ result = described_class.take_bearing(
17
+ direction: :up, context: 'x', engine: engine
18
+ )
19
+ expect(result[:success]).to be false
20
+ end
21
+ end
22
+
23
+ describe '.register_bias' do
24
+ it 'returns success' do
25
+ result = described_class.register_bias(
26
+ bias_type: :confirmation, domain: :reasoning, engine: engine
27
+ )
28
+ expect(result[:success]).to be true
29
+ expect(result[:bias][:bias_type]).to eq(:confirmation)
30
+ end
31
+
32
+ it 'returns failure for invalid bias' do
33
+ result = described_class.register_bias(
34
+ bias_type: :laziness, domain: :x, engine: engine
35
+ )
36
+ expect(result[:success]).to be false
37
+ end
38
+ end
39
+
40
+ describe '.calibrate' do
41
+ it 'reduces declination' do
42
+ bias = engine.register_bias(bias_type: :anchoring, domain: :x, declination: 0.5)
43
+ result = described_class.calibrate(bias_id: bias.id, engine: engine)
44
+ expect(result[:success]).to be true
45
+ expect(result[:bias][:declination]).to be < 0.5
46
+ end
47
+ end
48
+
49
+ describe '.list_bearings' do
50
+ it 'returns all bearings' do
51
+ engine.take_bearing(direction: :north, context: 'a')
52
+ engine.take_bearing(direction: :east, context: 'b')
53
+ result = described_class.list_bearings(engine: engine)
54
+ expect(result[:count]).to eq(2)
55
+ end
56
+
57
+ it 'filters by direction' do
58
+ engine.take_bearing(direction: :north, context: 'a')
59
+ engine.take_bearing(direction: :east, context: 'b')
60
+ result = described_class.list_bearings(engine: engine, direction: :north)
61
+ expect(result[:count]).to eq(1)
62
+ end
63
+ end
64
+
65
+ describe '.list_biases' do
66
+ it 'returns all biases' do
67
+ engine.register_bias(bias_type: :recency, domain: :x)
68
+ result = described_class.list_biases(engine: engine)
69
+ expect(result[:count]).to eq(1)
70
+ end
71
+ end
72
+
73
+ describe '.compass_status' do
74
+ it 'returns report' do
75
+ result = described_class.compass_status(engine: engine)
76
+ expect(result[:success]).to be true
77
+ expect(result[:report]).to have_key(:accuracy)
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Legion::Extensions::Agentic::Executive::Control::Client do
4
+ subject(:client) { described_class.new }
5
+
6
+ it 'includes the CognitiveControl runner' do
7
+ expect(client).to respond_to(:set_control_goal)
8
+ end
9
+
10
+ it 'accepts an injected controller' do
11
+ controller = Legion::Extensions::Agentic::Executive::Control::Helpers::Controller.new
12
+ c = described_class.new(controller: controller)
13
+ expect(c.set_control_goal(description: 'test')[:success]).to be true
14
+ end
15
+
16
+ it 'creates goals end-to-end' do
17
+ result = client.set_control_goal(description: 'integration', priority: 0.8)
18
+ expect(result[:success]).to be true
19
+
20
+ stats = client.cognitive_control_stats
21
+ expect(stats[:goal_count]).to eq(1)
22
+ end
23
+ end