lionherd-core 1.0.0a4__tar.gz

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 (271) hide show
  1. lionherd_core-1.0.0a4/.coveragerc +34 -0
  2. lionherd_core-1.0.0a4/.github/workflows/ci.yml +190 -0
  3. lionherd_core-1.0.0a4/.github/workflows/codeql.yml +39 -0
  4. lionherd_core-1.0.0a4/.github/workflows/pre-commit.yml +39 -0
  5. lionherd_core-1.0.0a4/.github/workflows/release.yml +65 -0
  6. lionherd_core-1.0.0a4/.gitignore +28 -0
  7. lionherd_core-1.0.0a4/.markdownlint-cli2.yaml +7 -0
  8. lionherd_core-1.0.0a4/.markdownlint.json +6 -0
  9. lionherd_core-1.0.0a4/.pre-commit-config.yaml +117 -0
  10. lionherd_core-1.0.0a4/.python-version +1 -0
  11. lionherd_core-1.0.0a4/CHANGELOG.md +145 -0
  12. lionherd_core-1.0.0a4/CONTRIBUTING.md +294 -0
  13. lionherd_core-1.0.0a4/LICENSE +201 -0
  14. lionherd_core-1.0.0a4/PKG-INFO +505 -0
  15. lionherd_core-1.0.0a4/README.md +472 -0
  16. lionherd_core-1.0.0a4/docs/DOC_STANDARD.md +643 -0
  17. lionherd_core-1.0.0a4/docs/api/base/broadcaster.md +637 -0
  18. lionherd_core-1.0.0a4/docs/api/base/element.md +1003 -0
  19. lionherd_core-1.0.0a4/docs/api/base/event.md +891 -0
  20. lionherd_core-1.0.0a4/docs/api/base/eventbus.md +743 -0
  21. lionherd_core-1.0.0a4/docs/api/base/flow.md +755 -0
  22. lionherd_core-1.0.0a4/docs/api/base/graph.md +1389 -0
  23. lionherd_core-1.0.0a4/docs/api/base/node.md +1099 -0
  24. lionherd_core-1.0.0a4/docs/api/base/pile.md +1064 -0
  25. lionherd_core-1.0.0a4/docs/api/base/progression.md +1109 -0
  26. lionherd_core-1.0.0a4/docs/api/libs/concurrency/cancel.md +787 -0
  27. lionherd_core-1.0.0a4/docs/api/libs/concurrency/errors.md +632 -0
  28. lionherd_core-1.0.0a4/docs/api/libs/concurrency/patterns.md +850 -0
  29. lionherd_core-1.0.0a4/docs/api/libs/concurrency/primitives.md +1309 -0
  30. lionherd_core-1.0.0a4/docs/api/libs/concurrency/priority_queue.md +1159 -0
  31. lionherd_core-1.0.0a4/docs/api/libs/concurrency/resource_tracker.md +708 -0
  32. lionherd_core-1.0.0a4/docs/api/libs/concurrency/task.md +692 -0
  33. lionherd_core-1.0.0a4/docs/api/libs/concurrency/utils.md +910 -0
  34. lionherd_core-1.0.0a4/docs/api/libs/schema_handlers/function_call_parser.md +739 -0
  35. lionherd_core-1.0.0a4/docs/api/libs/schema_handlers/minimal_yaml.md +824 -0
  36. lionherd_core-1.0.0a4/docs/api/libs/schema_handlers/schema_to_model.md +822 -0
  37. lionherd_core-1.0.0a4/docs/api/libs/schema_handlers/typescript.md +687 -0
  38. lionherd_core-1.0.0a4/docs/api/libs/string_handlers/extract_json.md +648 -0
  39. lionherd_core-1.0.0a4/docs/api/libs/string_handlers/fuzzy_json.md +650 -0
  40. lionherd_core-1.0.0a4/docs/api/libs/string_handlers/string_similarity.md +1027 -0
  41. lionherd_core-1.0.0a4/docs/api/libs/string_handlers/to_num.md +503 -0
  42. lionherd_core-1.0.0a4/docs/api/ln/async_call.md +1094 -0
  43. lionherd_core-1.0.0a4/docs/api/ln/fuzzy_match.md +819 -0
  44. lionherd_core-1.0.0a4/docs/api/ln/fuzzy_validate.md +848 -0
  45. lionherd_core-1.0.0a4/docs/api/ln/hash.md +587 -0
  46. lionherd_core-1.0.0a4/docs/api/ln/json_dump.md +1194 -0
  47. lionherd_core-1.0.0a4/docs/api/ln/list_call.md +649 -0
  48. lionherd_core-1.0.0a4/docs/api/ln/overview.md +1863 -0
  49. lionherd_core-1.0.0a4/docs/api/ln/to_dict.md +834 -0
  50. lionherd_core-1.0.0a4/docs/api/ln/to_list.md +627 -0
  51. lionherd_core-1.0.0a4/docs/api/ln/utils.md +1007 -0
  52. lionherd_core-1.0.0a4/docs/api/lndl/errors.md +937 -0
  53. lionherd_core-1.0.0a4/docs/api/lndl/fuzzy.md +860 -0
  54. lionherd_core-1.0.0a4/docs/api/lndl/parser.md +1285 -0
  55. lionherd_core-1.0.0a4/docs/api/lndl/prompt.md +648 -0
  56. lionherd_core-1.0.0a4/docs/api/lndl/resolver.md +938 -0
  57. lionherd_core-1.0.0a4/docs/api/lndl/types.md +1169 -0
  58. lionherd_core-1.0.0a4/docs/api/types/base.md +1087 -0
  59. lionherd_core-1.0.0a4/docs/api/types/model.md +947 -0
  60. lionherd_core-1.0.0a4/docs/api/types/operable.md +1096 -0
  61. lionherd_core-1.0.0a4/docs/api/types/sentinel.md +1054 -0
  62. lionherd_core-1.0.0a4/docs/api/types/spec.md +1421 -0
  63. lionherd_core-1.0.0a4/notebooks/references/broadcaster_eventbus.ipynb +518 -0
  64. lionherd_core-1.0.0a4/notebooks/references/concurrency_cancel.ipynb +753 -0
  65. lionherd_core-1.0.0a4/notebooks/references/concurrency_errors.ipynb +604 -0
  66. lionherd_core-1.0.0a4/notebooks/references/concurrency_patterns.ipynb +1016 -0
  67. lionherd_core-1.0.0a4/notebooks/references/concurrency_primitives.ipynb +849 -0
  68. lionherd_core-1.0.0a4/notebooks/references/concurrency_priority_queue.ipynb +665 -0
  69. lionherd_core-1.0.0a4/notebooks/references/concurrency_resource_tracker.ipynb +636 -0
  70. lionherd_core-1.0.0a4/notebooks/references/concurrency_task.ipynb +903 -0
  71. lionherd_core-1.0.0a4/notebooks/references/concurrency_utils.ipynb +578 -0
  72. lionherd_core-1.0.0a4/notebooks/references/element.ipynb +485 -0
  73. lionherd_core-1.0.0a4/notebooks/references/event.ipynb +468 -0
  74. lionherd_core-1.0.0a4/notebooks/references/flow.ipynb +449 -0
  75. lionherd_core-1.0.0a4/notebooks/references/graph.ipynb +452 -0
  76. lionherd_core-1.0.0a4/notebooks/references/ln_async_call.ipynb +728 -0
  77. lionherd_core-1.0.0a4/notebooks/references/ln_fuzzy_match.ipynb +746 -0
  78. lionherd_core-1.0.0a4/notebooks/references/ln_fuzzy_validate.ipynb +1070 -0
  79. lionherd_core-1.0.0a4/notebooks/references/ln_hash.ipynb +1056 -0
  80. lionherd_core-1.0.0a4/notebooks/references/ln_json_dump.ipynb +921 -0
  81. lionherd_core-1.0.0a4/notebooks/references/ln_list_call.ipynb +830 -0
  82. lionherd_core-1.0.0a4/notebooks/references/ln_overview.ipynb +1199 -0
  83. lionherd_core-1.0.0a4/notebooks/references/ln_to_dict.ipynb +1080 -0
  84. lionherd_core-1.0.0a4/notebooks/references/ln_to_list.ipynb +967 -0
  85. lionherd_core-1.0.0a4/notebooks/references/ln_utils.ipynb +998 -0
  86. lionherd_core-1.0.0a4/notebooks/references/lndl_errors.ipynb +927 -0
  87. lionherd_core-1.0.0a4/notebooks/references/lndl_fuzzy.ipynb +729 -0
  88. lionherd_core-1.0.0a4/notebooks/references/lndl_parser.ipynb +1043 -0
  89. lionherd_core-1.0.0a4/notebooks/references/lndl_prompt.ipynb +1060 -0
  90. lionherd_core-1.0.0a4/notebooks/references/lndl_resolver.ipynb +1006 -0
  91. lionherd_core-1.0.0a4/notebooks/references/lndl_types.ipynb +1146 -0
  92. lionherd_core-1.0.0a4/notebooks/references/node.ipynb +721 -0
  93. lionherd_core-1.0.0a4/notebooks/references/pile.ipynb +789 -0
  94. lionherd_core-1.0.0a4/notebooks/references/progression.ipynb +441 -0
  95. lionherd_core-1.0.0a4/notebooks/references/schema_function_call_parser.ipynb +969 -0
  96. lionherd_core-1.0.0a4/notebooks/references/schema_minimal_yaml.ipynb +772 -0
  97. lionherd_core-1.0.0a4/notebooks/references/schema_to_model.ipynb +905 -0
  98. lionherd_core-1.0.0a4/notebooks/references/schema_typescript.ipynb +441 -0
  99. lionherd_core-1.0.0a4/notebooks/references/string_extract_json.ipynb +779 -0
  100. lionherd_core-1.0.0a4/notebooks/references/string_fuzzy_json.ipynb +1305 -0
  101. lionherd_core-1.0.0a4/notebooks/references/string_similarity.ipynb +734 -0
  102. lionherd_core-1.0.0a4/notebooks/references/string_to_num.ipynb +697 -0
  103. lionherd_core-1.0.0a4/notebooks/references/types_base.ipynb +1250 -0
  104. lionherd_core-1.0.0a4/notebooks/references/types_model.ipynb +728 -0
  105. lionherd_core-1.0.0a4/notebooks/references/types_operable.ipynb +1475 -0
  106. lionherd_core-1.0.0a4/notebooks/references/types_sentinel.ipynb +882 -0
  107. lionherd_core-1.0.0a4/notebooks/references/types_spec.ipynb +872 -0
  108. lionherd_core-1.0.0a4/notebooks/references/types_spec_advanced.ipynb +1129 -0
  109. lionherd_core-1.0.0a4/notebooks/tutorials/README.md +131 -0
  110. lionherd_core-1.0.0a4/notebooks/tutorials/concurrency/README.md +238 -0
  111. lionherd_core-1.0.0a4/notebooks/tutorials/concurrency/deadline_patterns.ipynb +651 -0
  112. lionherd_core-1.0.0a4/notebooks/tutorials/concurrency/error_handling_timeouts.ipynb +565 -0
  113. lionherd_core-1.0.0a4/notebooks/tutorials/concurrency/resource_leak_detection.ipynb +714 -0
  114. lionherd_core-1.0.0a4/notebooks/tutorials/concurrency/service_lifecycle.ipynb +949 -0
  115. lionherd_core-1.0.0a4/notebooks/tutorials/concurrency/task_coordination.ipynb +1237 -0
  116. lionherd_core-1.0.0a4/notebooks/tutorials/concurrency/transaction_shielding.ipynb +620 -0
  117. lionherd_core-1.0.0a4/notebooks/tutorials/ln_utilities/README.md +299 -0
  118. lionherd_core-1.0.0a4/notebooks/tutorials/ln_utilities/advanced_to_dict.ipynb +417 -0
  119. lionherd_core-1.0.0a4/notebooks/tutorials/ln_utilities/api_field_flattening.ipynb +873 -0
  120. lionherd_core-1.0.0a4/notebooks/tutorials/ln_utilities/async_path_creation.ipynb +430 -0
  121. lionherd_core-1.0.0a4/notebooks/tutorials/ln_utilities/content_deduplication.ipynb +1021 -0
  122. lionherd_core-1.0.0a4/notebooks/tutorials/ln_utilities/custom_json_serialization.ipynb +429 -0
  123. lionherd_core-1.0.0a4/notebooks/tutorials/ln_utilities/data_migration.ipynb +1007 -0
  124. lionherd_core-1.0.0a4/notebooks/tutorials/ln_utilities/fuzzy_json_parsing.ipynb +1092 -0
  125. lionherd_core-1.0.0a4/notebooks/tutorials/ln_utilities/fuzzy_validation.ipynb +498 -0
  126. lionherd_core-1.0.0a4/notebooks/tutorials/ln_utilities/llm_complex_models.ipynb +580 -0
  127. lionherd_core-1.0.0a4/notebooks/tutorials/ln_utilities/multistage_pipeline.ipynb +637 -0
  128. lionherd_core-1.0.0a4/notebooks/tutorials/ln_utilities/nested_cleaning.ipynb +835 -0
  129. lionherd_core-1.0.0a4/notebooks/tutorials/schema_handlers/README.md +423 -0
  130. lionherd_core-1.0.0a4/notebooks/tutorials/schema_handlers/dynamic_schema_selection.ipynb +999 -0
  131. lionherd_core-1.0.0a4/notebooks/tutorials/schema_handlers/mcp_tool_pipeline.ipynb +1178 -0
  132. lionherd_core-1.0.0a4/notebooks/tutorials/string_handlers/README.md +335 -0
  133. lionherd_core-1.0.0a4/notebooks/tutorials/string_handlers/cli_fuzzy_matching.ipynb +726 -0
  134. lionherd_core-1.0.0a4/notebooks/tutorials/string_handlers/consensus_matching.ipynb +836 -0
  135. lionherd_core-1.0.0a4/notebooks/tutorials/string_handlers/fuzzy_deduplication.ipynb +1258 -0
  136. lionherd_core-1.0.0a4/notebooks/tutorials/string_handlers/phonetic_matching.ipynb +837 -0
  137. lionherd_core-1.0.0a4/pyproject.toml +84 -0
  138. lionherd_core-1.0.0a4/ruff.toml +105 -0
  139. lionherd_core-1.0.0a4/src/lionherd_core/__init__.py +86 -0
  140. lionherd_core-1.0.0a4/src/lionherd_core/base/__init__.py +30 -0
  141. lionherd_core-1.0.0a4/src/lionherd_core/base/_utils.py +295 -0
  142. lionherd_core-1.0.0a4/src/lionherd_core/base/broadcaster.py +128 -0
  143. lionherd_core-1.0.0a4/src/lionherd_core/base/element.py +308 -0
  144. lionherd_core-1.0.0a4/src/lionherd_core/base/event.py +367 -0
  145. lionherd_core-1.0.0a4/src/lionherd_core/base/eventbus.py +112 -0
  146. lionherd_core-1.0.0a4/src/lionherd_core/base/flow.py +285 -0
  147. lionherd_core-1.0.0a4/src/lionherd_core/base/graph.py +613 -0
  148. lionherd_core-1.0.0a4/src/lionherd_core/base/node.py +332 -0
  149. lionherd_core-1.0.0a4/src/lionherd_core/base/pile.py +833 -0
  150. lionherd_core-1.0.0a4/src/lionherd_core/base/progression.py +261 -0
  151. lionherd_core-1.0.0a4/src/lionherd_core/errors.py +120 -0
  152. lionherd_core-1.0.0a4/src/lionherd_core/libs/__init__.py +2 -0
  153. lionherd_core-1.0.0a4/src/lionherd_core/libs/concurrency/__init__.py +62 -0
  154. lionherd_core-1.0.0a4/src/lionherd_core/libs/concurrency/_cancel.py +85 -0
  155. lionherd_core-1.0.0a4/src/lionherd_core/libs/concurrency/_errors.py +80 -0
  156. lionherd_core-1.0.0a4/src/lionherd_core/libs/concurrency/_patterns.py +238 -0
  157. lionherd_core-1.0.0a4/src/lionherd_core/libs/concurrency/_primitives.py +253 -0
  158. lionherd_core-1.0.0a4/src/lionherd_core/libs/concurrency/_priority_queue.py +135 -0
  159. lionherd_core-1.0.0a4/src/lionherd_core/libs/concurrency/_resource_tracker.py +80 -0
  160. lionherd_core-1.0.0a4/src/lionherd_core/libs/concurrency/_run_async.py +52 -0
  161. lionherd_core-1.0.0a4/src/lionherd_core/libs/concurrency/_task.py +58 -0
  162. lionherd_core-1.0.0a4/src/lionherd_core/libs/concurrency/_utils.py +62 -0
  163. lionherd_core-1.0.0a4/src/lionherd_core/libs/schema_handlers/__init__.py +35 -0
  164. lionherd_core-1.0.0a4/src/lionherd_core/libs/schema_handlers/_function_call_parser.py +122 -0
  165. lionherd_core-1.0.0a4/src/lionherd_core/libs/schema_handlers/_minimal_yaml.py +88 -0
  166. lionherd_core-1.0.0a4/src/lionherd_core/libs/schema_handlers/_schema_to_model.py +251 -0
  167. lionherd_core-1.0.0a4/src/lionherd_core/libs/schema_handlers/_typescript.py +153 -0
  168. lionherd_core-1.0.0a4/src/lionherd_core/libs/string_handlers/__init__.py +28 -0
  169. lionherd_core-1.0.0a4/src/lionherd_core/libs/string_handlers/_extract_json.py +65 -0
  170. lionherd_core-1.0.0a4/src/lionherd_core/libs/string_handlers/_fuzzy_json.py +152 -0
  171. lionherd_core-1.0.0a4/src/lionherd_core/libs/string_handlers/_string_similarity.py +347 -0
  172. lionherd_core-1.0.0a4/src/lionherd_core/libs/string_handlers/_to_num.py +63 -0
  173. lionherd_core-1.0.0a4/src/lionherd_core/ln/__init__.py +45 -0
  174. lionherd_core-1.0.0a4/src/lionherd_core/ln/_async_call.py +314 -0
  175. lionherd_core-1.0.0a4/src/lionherd_core/ln/_fuzzy_match.py +166 -0
  176. lionherd_core-1.0.0a4/src/lionherd_core/ln/_fuzzy_validate.py +151 -0
  177. lionherd_core-1.0.0a4/src/lionherd_core/ln/_hash.py +141 -0
  178. lionherd_core-1.0.0a4/src/lionherd_core/ln/_json_dump.py +347 -0
  179. lionherd_core-1.0.0a4/src/lionherd_core/ln/_list_call.py +110 -0
  180. lionherd_core-1.0.0a4/src/lionherd_core/ln/_to_dict.py +373 -0
  181. lionherd_core-1.0.0a4/src/lionherd_core/ln/_to_list.py +190 -0
  182. lionherd_core-1.0.0a4/src/lionherd_core/ln/_utils.py +156 -0
  183. lionherd_core-1.0.0a4/src/lionherd_core/lndl/__init__.py +62 -0
  184. lionherd_core-1.0.0a4/src/lionherd_core/lndl/errors.py +30 -0
  185. lionherd_core-1.0.0a4/src/lionherd_core/lndl/fuzzy.py +321 -0
  186. lionherd_core-1.0.0a4/src/lionherd_core/lndl/parser.py +427 -0
  187. lionherd_core-1.0.0a4/src/lionherd_core/lndl/prompt.py +137 -0
  188. lionherd_core-1.0.0a4/src/lionherd_core/lndl/resolver.py +323 -0
  189. lionherd_core-1.0.0a4/src/lionherd_core/lndl/types.py +287 -0
  190. lionherd_core-1.0.0a4/src/lionherd_core/protocols.py +181 -0
  191. lionherd_core-1.0.0a4/src/lionherd_core/py.typed +0 -0
  192. lionherd_core-1.0.0a4/src/lionherd_core/types/__init__.py +49 -0
  193. lionherd_core-1.0.0a4/src/lionherd_core/types/_sentinel.py +151 -0
  194. lionherd_core-1.0.0a4/src/lionherd_core/types/base.py +341 -0
  195. lionherd_core-1.0.0a4/src/lionherd_core/types/model.py +159 -0
  196. lionherd_core-1.0.0a4/src/lionherd_core/types/operable.py +133 -0
  197. lionherd_core-1.0.0a4/src/lionherd_core/types/spec.py +320 -0
  198. lionherd_core-1.0.0a4/src/lionherd_core/types/spec_adapters/__init__.py +10 -0
  199. lionherd_core-1.0.0a4/src/lionherd_core/types/spec_adapters/_protocol.py +125 -0
  200. lionherd_core-1.0.0a4/src/lionherd_core/types/spec_adapters/pydantic_field.py +177 -0
  201. lionherd_core-1.0.0a4/tests/base/test_adapter_defaults.py +410 -0
  202. lionherd_core-1.0.0a4/tests/base/test_base_utils.py +1085 -0
  203. lionherd_core-1.0.0a4/tests/base/test_broadcaster.py +449 -0
  204. lionherd_core-1.0.0a4/tests/base/test_element.py +1342 -0
  205. lionherd_core-1.0.0a4/tests/base/test_event.py +1907 -0
  206. lionherd_core-1.0.0a4/tests/base/test_event_status_race.py +389 -0
  207. lionherd_core-1.0.0a4/tests/base/test_eventbus.py +803 -0
  208. lionherd_core-1.0.0a4/tests/base/test_flow.py +1319 -0
  209. lionherd_core-1.0.0a4/tests/base/test_graph.py +1954 -0
  210. lionherd_core-1.0.0a4/tests/base/test_graph_event_loop.py +374 -0
  211. lionherd_core-1.0.0a4/tests/base/test_meta_key.py +380 -0
  212. lionherd_core-1.0.0a4/tests/base/test_node.py +2298 -0
  213. lionherd_core-1.0.0a4/tests/base/test_pile.py +2225 -0
  214. lionherd_core-1.0.0a4/tests/base/test_progression.py +1216 -0
  215. lionherd_core-1.0.0a4/tests/libs/concurrency/__init__.py +4 -0
  216. lionherd_core-1.0.0a4/tests/libs/concurrency/test_broadcaster_leak.py +236 -0
  217. lionherd_core-1.0.0a4/tests/libs/concurrency/test_cancel.py +233 -0
  218. lionherd_core-1.0.0a4/tests/libs/concurrency/test_completion_stream.py +435 -0
  219. lionherd_core-1.0.0a4/tests/libs/concurrency/test_concurrency_errors.py +31 -0
  220. lionherd_core-1.0.0a4/tests/libs/concurrency/test_errors.py +98 -0
  221. lionherd_core-1.0.0a4/tests/libs/concurrency/test_eventbus_leak.py +167 -0
  222. lionherd_core-1.0.0a4/tests/libs/concurrency/test_graph_race.py +150 -0
  223. lionherd_core-1.0.0a4/tests/libs/concurrency/test_init_exports.py +39 -0
  224. lionherd_core-1.0.0a4/tests/libs/concurrency/test_patterns.py +484 -0
  225. lionherd_core-1.0.0a4/tests/libs/concurrency/test_primitives.py +697 -0
  226. lionherd_core-1.0.0a4/tests/libs/concurrency/test_priority_queue.py +360 -0
  227. lionherd_core-1.0.0a4/tests/libs/concurrency/test_property.py +35 -0
  228. lionherd_core-1.0.0a4/tests/libs/concurrency/test_run_async_in_sync_context.py +201 -0
  229. lionherd_core-1.0.0a4/tests/libs/concurrency/test_task.py +79 -0
  230. lionherd_core-1.0.0a4/tests/libs/concurrency/test_taskgroup.py +178 -0
  231. lionherd_core-1.0.0a4/tests/libs/concurrency/test_utils.py +274 -0
  232. lionherd_core-1.0.0a4/tests/libs/concurrency/test_wrapper_functions.py +243 -0
  233. lionherd_core-1.0.0a4/tests/libs/schema_handlers/__init__.py +4 -0
  234. lionherd_core-1.0.0a4/tests/libs/schema_handlers/test_function_call_parser.py +502 -0
  235. lionherd_core-1.0.0a4/tests/libs/schema_handlers/test_minimal_yaml.py +555 -0
  236. lionherd_core-1.0.0a4/tests/libs/schema_handlers/test_schema_to_model.py +474 -0
  237. lionherd_core-1.0.0a4/tests/libs/schema_handlers/test_typescript.py +524 -0
  238. lionherd_core-1.0.0a4/tests/libs/string_handlers/test_extract_json.py +183 -0
  239. lionherd_core-1.0.0a4/tests/libs/string_handlers/test_fuzzy_json.py +430 -0
  240. lionherd_core-1.0.0a4/tests/libs/string_handlers/test_string_similarity.py +227 -0
  241. lionherd_core-1.0.0a4/tests/libs/string_handlers/test_to_dict.py +1034 -0
  242. lionherd_core-1.0.0a4/tests/libs/string_handlers/test_to_num.py +169 -0
  243. lionherd_core-1.0.0a4/tests/ln/test_alcall.py +851 -0
  244. lionherd_core-1.0.0a4/tests/ln/test_fuzzy_match.py +245 -0
  245. lionherd_core-1.0.0a4/tests/ln/test_fuzzy_validate.py +621 -0
  246. lionherd_core-1.0.0a4/tests/ln/test_hash.py +290 -0
  247. lionherd_core-1.0.0a4/tests/ln/test_json_dump.py +699 -0
  248. lionherd_core-1.0.0a4/tests/ln/test_lcall.py +233 -0
  249. lionherd_core-1.0.0a4/tests/ln/test_ln_to_dict.py +209 -0
  250. lionherd_core-1.0.0a4/tests/ln/test_to_list.py +471 -0
  251. lionherd_core-1.0.0a4/tests/ln/test_utils.py +396 -0
  252. lionherd_core-1.0.0a4/tests/lndl/__init__.py +2 -0
  253. lionherd_core-1.0.0a4/tests/lndl/test_extract_lacts.py +106 -0
  254. lionherd_core-1.0.0a4/tests/lndl/test_lndl_actions.py +650 -0
  255. lionherd_core-1.0.0a4/tests/lndl/test_lndl_fuzzy.py +1090 -0
  256. lionherd_core-1.0.0a4/tests/lndl/test_lndl_prefixed.py +1024 -0
  257. lionherd_core-1.0.0a4/tests/lndl/test_parser.py +189 -0
  258. lionherd_core-1.0.0a4/tests/lndl/test_prompt.py +13 -0
  259. lionherd_core-1.0.0a4/tests/lndl/test_revalidation.py +187 -0
  260. lionherd_core-1.0.0a4/tests/lndl/test_types.py +65 -0
  261. lionherd_core-1.0.0a4/tests/lndl/test_validation_guard.py +308 -0
  262. lionherd_core-1.0.0a4/tests/test_errors.py +441 -0
  263. lionherd_core-1.0.0a4/tests/types/spec_adapters/__init__.py +4 -0
  264. lionherd_core-1.0.0a4/tests/types/spec_adapters/test_adapters_py311.py +801 -0
  265. lionherd_core-1.0.0a4/tests/types/spec_adapters/test_protocol.py +304 -0
  266. lionherd_core-1.0.0a4/tests/types/test_hashable_model.py +369 -0
  267. lionherd_core-1.0.0a4/tests/types/test_operable.py +1428 -0
  268. lionherd_core-1.0.0a4/tests/types/test_spec.py +1478 -0
  269. lionherd_core-1.0.0a4/tests/types/test_types.py +1460 -0
  270. lionherd_core-1.0.0a4/tests/types/test_types_py311.py +349 -0
  271. lionherd_core-1.0.0a4/uv.lock +2067 -0
@@ -0,0 +1,34 @@
1
+ [run]
2
+ source = src/lionherd_core
3
+ omit =
4
+ */tests/*
5
+ */test_*
6
+ */__pycache__/*
7
+ */site-packages/*
8
+ .venv/*
9
+
10
+ [report]
11
+ precision = 2
12
+ show_missing = True
13
+ skip_covered = False
14
+ sort = Cover
15
+
16
+ exclude_lines =
17
+ pragma: no cover
18
+ def __repr__
19
+ if self.debug:
20
+ if settings.DEBUG
21
+ raise AssertionError
22
+ raise NotImplementedError
23
+ if 0:
24
+ if False:
25
+ if __name__ == .__main__.:
26
+ if TYPE_CHECKING:
27
+ class .*\bProtocol\):
28
+ @(abc\.)?abstractmethod
29
+
30
+ [html]
31
+ directory = htmlcov
32
+
33
+ [json]
34
+ output = coverage.json
@@ -0,0 +1,190 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ workflow_dispatch:
9
+
10
+ concurrency:
11
+ group: ${{ github.workflow }}-${{ github.ref }}
12
+ cancel-in-progress: true
13
+
14
+ jobs:
15
+ # =============================================================================
16
+ # Linting and formatting checks
17
+ # =============================================================================
18
+ lint:
19
+ name: Lint (ruff)
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+
24
+ - name: Set up Python
25
+ uses: actions/setup-python@v5
26
+ with:
27
+ python-version: "3.11"
28
+
29
+ - name: Install uv
30
+ uses: astral-sh/setup-uv@v5
31
+ with:
32
+ enable-cache: true
33
+ cache-dependency-glob: "uv.lock"
34
+
35
+ - name: Install dependencies (workspace dev deps + all package extras)
36
+ run: uv sync --all-extras
37
+
38
+ - name: Run ruff check
39
+ run: uv run ruff check .
40
+
41
+ - name: Run ruff format check
42
+ run: uv run ruff format --check .
43
+
44
+ # =============================================================================
45
+ # Type checking
46
+ # =============================================================================
47
+ typecheck:
48
+ name: Type Check (mypy)
49
+ runs-on: ubuntu-latest
50
+ steps:
51
+ - uses: actions/checkout@v4
52
+
53
+ - name: Set up Python
54
+ uses: actions/setup-python@v5
55
+ with:
56
+ python-version: "3.11"
57
+
58
+ - name: Install uv
59
+ uses: astral-sh/setup-uv@v5
60
+ with:
61
+ enable-cache: true
62
+ cache-dependency-glob: "uv.lock"
63
+
64
+ - name: Install dependencies (workspace dev deps + all package extras)
65
+ run: uv sync --group dev --all-extras
66
+
67
+ - name: Run mypy
68
+ run: uv run mypy src/lionherd_core
69
+ continue-on-error: true # Don't block CI on type errors initially
70
+
71
+ # =============================================================================
72
+ # Test suite (matrix: Python versions)
73
+ # =============================================================================
74
+ test:
75
+ name: Test (Python ${{ matrix.python-version }})
76
+ runs-on: ubuntu-latest
77
+ strategy:
78
+ fail-fast: false
79
+ matrix:
80
+ python-version: ["3.11", "3.12", "3.13", "3.14"]
81
+
82
+ steps:
83
+ - uses: actions/checkout@v4
84
+
85
+ - name: Set up Python ${{ matrix.python-version }}
86
+ uses: actions/setup-python@v5
87
+ with:
88
+ python-version: ${{ matrix.python-version }}
89
+
90
+ - name: Install uv
91
+ uses: astral-sh/setup-uv@v5
92
+ with:
93
+ enable-cache: true
94
+ cache-dependency-glob: "uv.lock"
95
+
96
+ - name: Install dependencies (workspace dev deps + all package extras)
97
+ run: uv sync --group dev --all-extras
98
+
99
+ - name: Run tests (parallel execution)
100
+ if: matrix.python-version != '3.11'
101
+ run: |
102
+ uv run pytest tests/ \
103
+ --junitxml=junit.xml \
104
+ --tb=short \
105
+ -n auto
106
+
107
+ - name: Run tests with coverage (Python 3.11 only)
108
+ if: matrix.python-version == '3.11'
109
+ run: |
110
+ uv run pytest tests/ \
111
+ --cov=src/lionherd_core \
112
+ --cov-report=xml \
113
+ --cov-report=term-missing:skip-covered \
114
+ --junitxml=junit.xml \
115
+ --tb=short \
116
+ -n auto
117
+
118
+ - name: Upload coverage to Codecov
119
+ uses: codecov/codecov-action@v4
120
+ if: matrix.python-version == '3.11'
121
+ with:
122
+ file: ./coverage.xml
123
+ flags: unittests
124
+ name: codecov-umbrella
125
+ fail_ci_if_error: false
126
+ env:
127
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
128
+
129
+ - name: Upload test results
130
+ uses: actions/upload-artifact@v4
131
+ if: always()
132
+ with:
133
+ name: test-results-${{ matrix.python-version }}
134
+ path: |
135
+ junit.xml
136
+ coverage.xml
137
+
138
+ # =============================================================================
139
+ # Build check (ensure package builds correctly)
140
+ # =============================================================================
141
+ build:
142
+ name: Build Package
143
+ runs-on: ubuntu-latest
144
+ steps:
145
+ - uses: actions/checkout@v4
146
+
147
+ - name: Set up Python
148
+ uses: actions/setup-python@v5
149
+ with:
150
+ python-version: "3.11"
151
+
152
+ - name: Install uv
153
+ uses: astral-sh/setup-uv@v5
154
+ with:
155
+ enable-cache: true
156
+
157
+ - name: Build package
158
+ run: uv build
159
+
160
+ - name: Upload build artifacts
161
+ uses: actions/upload-artifact@v4
162
+ with:
163
+ name: dist
164
+ path: dist/
165
+
166
+ # =============================================================================
167
+ # All checks must pass (required status check)
168
+ # =============================================================================
169
+ ci-success:
170
+ name: CI Success
171
+ runs-on: ubuntu-latest
172
+ needs: [lint, typecheck, test, build]
173
+ if: always()
174
+ steps:
175
+ - name: Check all jobs
176
+ run: |
177
+ if [ "${{ needs.lint.result }}" != "success" ]; then
178
+ echo "Linting failed"
179
+ exit 1
180
+ fi
181
+ if [ "${{ needs.test.result }}" != "success" ]; then
182
+ echo "Tests failed"
183
+ exit 1
184
+ fi
185
+ if [ "${{ needs.build.result }}" != "success" ]; then
186
+ echo "Build failed"
187
+ exit 1
188
+ fi
189
+ # typecheck is allowed to fail (continue-on-error)
190
+ echo "All required checks passed!"
@@ -0,0 +1,39 @@
1
+ name: "CodeQL"
2
+
3
+ on:
4
+ push:
5
+ branches: [main, develop]
6
+ pull_request:
7
+ branches: [main, develop]
8
+ schedule:
9
+ - cron: "0 0 * * 0"
10
+
11
+ jobs:
12
+ analyze:
13
+ name: Analyze
14
+ runs-on: ubuntu-latest
15
+ permissions:
16
+ actions: read
17
+ contents: read
18
+ security-events: write
19
+
20
+ strategy:
21
+ fail-fast: false
22
+ matrix:
23
+ language: ["python"]
24
+
25
+ steps:
26
+ - name: Checkout repository
27
+ uses: actions/checkout@v5
28
+
29
+ - name: Initialize CodeQL
30
+ uses: github/codeql-action/init@v4
31
+ with:
32
+ languages: ${{ matrix.language }}
33
+
34
+ - name: Autobuild
35
+ uses: github/codeql-action/autobuild@v4
36
+
37
+ - name: Perform CodeQL Analysis
38
+ uses: github/codeql-action/analyze@v4
39
+ # filepath: .github/workflows/codeql-analysis.yml
@@ -0,0 +1,39 @@
1
+ name: Pre-commit Checks
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main]
6
+
7
+ jobs:
8
+ pre-commit:
9
+ name: Pre-commit Hooks
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ with:
14
+ fetch-depth: 0 # Fetch all history for proper diff
15
+
16
+ - name: Set up Python
17
+ uses: actions/setup-python@v5
18
+ with:
19
+ python-version: "3.11"
20
+
21
+ - name: Install uv
22
+ uses: astral-sh/setup-uv@v5
23
+ with:
24
+ enable-cache: true
25
+ cache-dependency-glob: "uv.lock"
26
+
27
+ - name: Install dependencies (workspace dev deps + all package extras)
28
+ run: uv sync --group dev --all-extras
29
+
30
+ - name: Cache pre-commit environments
31
+ uses: actions/cache@v4
32
+ with:
33
+ path: ~/.cache/pre-commit
34
+ key: pre-commit-${{ runner.os }}-${{ hashFiles('.pre-commit-config.yaml') }}
35
+ restore-keys: |
36
+ pre-commit-${{ runner.os }}-
37
+
38
+ - name: Run pre-commit (changed files only)
39
+ run: uv run pre-commit run --show-diff-on-failure --color=always --from-ref origin/${{ github.base_ref }} --to-ref HEAD
@@ -0,0 +1,65 @@
1
+ name: Release
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ test:
12
+ runs-on: ubuntu-latest
13
+ strategy:
14
+ matrix:
15
+ python-version: ["3.11", "3.12", "3.13", "3.14"]
16
+ steps:
17
+ - uses: actions/checkout@v5
18
+ - name: Set up Python ${{ matrix.python-version }}
19
+ uses: actions/setup-python@v6
20
+ with:
21
+ python-version: ${{ matrix.python-version }}
22
+
23
+ - name: Install uv
24
+ run: |
25
+ curl -LsSf https://astral.sh/uv/install.sh | sh
26
+ echo "$HOME/.cargo/bin" >> $GITHUB_PATH
27
+
28
+ - name: Install dependencies
29
+ run: |
30
+ uv venv
31
+ uv sync --all-extras
32
+
33
+ - name: Run tests
34
+ run: |
35
+ source .venv/bin/activate
36
+ uv run pytest --asyncio-mode=auto --maxfail=1 --disable-warnings tests/
37
+
38
+ deploy:
39
+ needs: test
40
+ runs-on: ubuntu-latest
41
+ steps:
42
+ - uses: actions/checkout@v5
43
+ - name: Set up Python
44
+ uses: actions/setup-python@v6
45
+ with:
46
+ python-version: "3.12"
47
+
48
+ - name: Install uv
49
+ run: |
50
+ curl -LsSf https://astral.sh/uv/install.sh | sh
51
+ echo "$HOME/.cargo/bin" >> $GITHUB_PATH
52
+
53
+ - name: Install dependencies
54
+ run: |
55
+ uv venv
56
+ uv pip install twine
57
+
58
+ - name: Build package
59
+ run: uv build
60
+
61
+ - name: Publish package to PyPI
62
+ env:
63
+ TWINE_USERNAME: __token__
64
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_KEY }}
65
+ run: uv run twine upload dist/*
@@ -0,0 +1,28 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+ targets/
9
+ node_modules/
10
+
11
+ # Virtual environments
12
+ .venv
13
+
14
+ *.gitignore
15
+ .benchmarks/
16
+ .*_cache/
17
+ *.khive/
18
+ *.hypothesis/
19
+
20
+ *.coverage
21
+ *coverage.json
22
+
23
+ *.DS_Store
24
+ data/
25
+
26
+ site/
27
+
28
+ node_modules/
@@ -0,0 +1,7 @@
1
+ # markdownlint-cli2 configuration
2
+ # https://github.com/DavidAnson/markdownlint-cli2
3
+
4
+ config:
5
+ # MD024: Multiple headings with the same content
6
+ # Disabled for CHANGELOG.md where duplicate "Added" sections are expected
7
+ MD024: false
@@ -0,0 +1,6 @@
1
+ {
2
+ "MD013": false,
3
+ "MD024": {
4
+ "siblings_only": true
5
+ }
6
+ }
@@ -0,0 +1,117 @@
1
+ # Pre-commit hooks for lionherd monorepo
2
+ # Docs: https://pre-commit.com/
3
+ # Install: pre-commit install
4
+ # Run: pre-commit run --all-files
5
+ # Update: pre-commit autoupdate
6
+
7
+ default_language_version:
8
+ python: python3.11
9
+ node: system
10
+
11
+ repos:
12
+ # =============================================================================
13
+ # Basic file checks (fast, no dependencies)
14
+ # =============================================================================
15
+ - repo: https://github.com/pre-commit/pre-commit-hooks
16
+ rev: v4.6.0
17
+ hooks:
18
+ - id: trailing-whitespace
19
+ exclude: \.md$
20
+ - id: end-of-file-fixer
21
+ exclude: \.svg$
22
+ - id: mixed-line-ending
23
+ args: [--fix=lf]
24
+ - id: check-yaml
25
+ args: [--unsafe] # Allow custom YAML tags
26
+ - id: check-json
27
+ - id: check-toml
28
+ - id: check-merge-conflict
29
+ - id: check-added-large-files
30
+ args: [--maxkb=1000]
31
+ - id: check-case-conflict
32
+ - id: detect-private-key
33
+
34
+ # =============================================================================
35
+ # TOML formatting (before Python, as it may format pyproject.toml)
36
+ # =============================================================================
37
+ - repo: https://github.com/ComPWA/taplo-pre-commit
38
+ rev: v0.9.3
39
+ hooks:
40
+ - id: taplo-format
41
+
42
+ # =============================================================================
43
+ # Python: Ruff (linter BEFORE formatter)
44
+ # =============================================================================
45
+ - repo: https://github.com/astral-sh/ruff-pre-commit
46
+ rev: v0.14.2
47
+ hooks:
48
+ # Linter with auto-fix
49
+ - id: ruff
50
+ args: [--fix]
51
+ types_or: [python, pyi]
52
+ # Formatter
53
+ - id: ruff-format
54
+ types_or: [python, pyi]
55
+
56
+ # =============================================================================
57
+ # Rust: Clippy linter
58
+ # =============================================================================
59
+ - repo: https://github.com/doublify/pre-commit-rust
60
+ rev: v1.0
61
+ hooks:
62
+ - id: fmt
63
+ name: cargo fmt
64
+ args: [--all, --]
65
+ - id: clippy
66
+ name: cargo clippy
67
+ args: [--all-targets, --all-features, --, -D, warnings]
68
+
69
+ # =============================================================================
70
+ # Next.js / TypeScript: ESLint
71
+ # =============================================================================
72
+ - repo: https://github.com/pre-commit/mirrors-eslint
73
+ rev: v9.17.0
74
+ hooks:
75
+ - id: eslint
76
+ files: \.(js|jsx|ts|tsx)$
77
+ types: [file]
78
+ args: [--fix, --max-warnings=0]
79
+ additional_dependencies:
80
+ - eslint@9.17.0
81
+ - eslint-config-next@15.1.3
82
+ - typescript@5.7.2
83
+ - "@typescript-eslint/parser@8.18.0"
84
+ - "@typescript-eslint/eslint-plugin@8.18.0"
85
+
86
+ # =============================================================================
87
+ # JSON/YAML formatting
88
+ # =============================================================================
89
+ - repo: https://github.com/pre-commit/mirrors-prettier
90
+ rev: v4.0.0-alpha.8
91
+ hooks:
92
+ - id: prettier
93
+ types_or: [json, yaml]
94
+ exclude: ^(package-lock\.json|pnpm-lock\.yaml|yarn\.lock)$
95
+
96
+ # =============================================================================
97
+ # Markdown linting
98
+ # =============================================================================
99
+ - repo: https://github.com/DavidAnson/markdownlint-cli2
100
+ rev: v0.18.1
101
+ hooks:
102
+ - id: markdownlint-cli2
103
+ args: [--fix]
104
+ exclude: ^\.github/
105
+
106
+ # CI optimization: only run on changed files
107
+ ci:
108
+ autofix_commit_msg: |
109
+ [pre-commit.ci] auto fixes from pre-commit.com hooks
110
+
111
+ for more information, see https://pre-commit.ci
112
+ autofix_prs: true
113
+ autoupdate_branch: ""
114
+ autoupdate_commit_msg: "[pre-commit.ci] pre-commit autoupdate"
115
+ autoupdate_schedule: weekly
116
+ skip: []
117
+ submodules: false
@@ -0,0 +1 @@
1
+ 3.11
@@ -0,0 +1,145 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [1.0.0a4](https://github.com/khive-ai/lionherd-core/releases/tag/v1.0.0-alpha4) - 2025-11-11
11
+
12
+ ### Changed
13
+
14
+ - **Error Handling**: `Graph`, `Flow`, and `Pile` now raise `NotFoundError` and
15
+ `ExistsError` instead of `ValueError` for missing/duplicate items (#129, #131,
16
+ #133). Exception metadata (`.details`, `.retryable`, `.__cause__`) is now
17
+ preserved for retry logic. Update exception handlers from `except ValueError`
18
+ to `except NotFoundError` or `except ExistsError` as appropriate.
19
+ - `Pile.pop()` now raises `NotFoundError` (was `ValueError`) for consistency
20
+ with `Pile.get()` and `Pile.remove()`.
21
+ - **Performance**: `Pile` methods now use single-lookup pattern (try/except vs
22
+ if/check) for 50% performance improvement on failed lookups (#128).
23
+ - **Module Organization**: Async utilities consolidated to `libs/concurrency` for
24
+ cleaner structure (#114).
25
+
26
+ ### Removed
27
+
28
+ - **BREAKING**: `Graph.get_node()` and `Graph.get_edge()` removed in favor of
29
+ direct Pile access (#117, #124, #132).
30
+
31
+ **Migration**:
32
+
33
+ ```python
34
+ # Before
35
+ node = graph.get_node(node_id)
36
+ edge = graph.get_edge(edge_id)
37
+
38
+ # After
39
+ node = graph.nodes[node_id]
40
+ edge = graph.edges[edge_id]
41
+ ```
42
+
43
+ **Rationale**: Eliminates unnecessary wrapper methods. Direct Pile access is
44
+ more Pythonic and consistent with dict/list-like interfaces.
45
+
46
+ ### Fixed
47
+
48
+ - **BREAKING**: `Element.to_dict()` `created_at_format` now applies to ALL modes
49
+ (#39). DB mode default changed from `isoformat` (string) to `datetime` (object)
50
+ for ORM compatibility. Migration: use `to_dict(mode='db',
51
+ created_at_format='isoformat')` for backward compatibility.
52
+
53
+ ### Added
54
+
55
+ - **Tutorial Infrastructure**: 29 executable tutorials covering concurrency
56
+ patterns, schema/string handlers, ln utilities, and advanced workflows (#99-106).
57
+ Includes circuit breakers, deadline management, fuzzy matching, pipelines, and
58
+ resource lifecycle patterns.
59
+ - **API Documentation**: Complete reference docs and Jupyter notebooks for all
60
+ base types (Element, Node, Pile, Progression, Flow, Graph, Event, Broadcaster,
61
+ EventBus), types system (HashableModel, Operable/Spec, Sentinel), and libs
62
+ (concurrency, schema, string, ln utilities) (#39, #43-46, #52, #54-59).
63
+ - **LNDL Documentation**: Complete API documentation and Jupyter notebooks for LNDL
64
+ (Language InterOperable Network Directive Language) system (#53). Includes 6
65
+ module docs (types, parser, resolver, fuzzy, prompt, errors) and 6 reference
66
+ notebooks with 100% execution coverage (185/185 cells).
67
+ - **Node Features**: Content constraint (dict|Serializable|BaseModel|None, no
68
+ primitives) and embedding serialization support for pgvector + JSONB (#50, #113).
69
+ - **Pile.pop() default**: Optional default parameter for safer fallback, consistent
70
+ with `dict.pop()` behavior (#118, #123).
71
+ - **Test Coverage**: Race condition tests for Event timeout/exception/cancellation
72
+ scenarios and fuzzy JSON kwargs regression tests (#32, #107, #112).
73
+
74
+ ## [1.0.0a3](https://github.com/khive-ai/lionherd-core/releases/tag/v1.0.0-alpha3) - 2025-11-06
75
+
76
+ ### Fixed
77
+
78
+ - **Memory Leaks**: `EventBus` (#22) and `Broadcaster` (#24) now use
79
+ `weakref` for automatic callback cleanup. Prevents unbounded growth in
80
+ long-running apps.
81
+ - **TOCTOU Races**: `Graph.add_edge()` (#21) and `Event.invoke()` (#26)
82
+ synchronized with decorators. Eliminates 10% duplicate execution rate
83
+ under concurrency.
84
+ - **LNDL Guard**: `ensure_no_action_calls()` (#23) prevents `ActionCall`
85
+ persistence. Recursively detects placeholders in nested models/collections.
86
+ - **Backend Agnostic**: `Event._async_lock` now anyio-based (was
87
+ `asyncio.Lock`). Enables Trio support.
88
+
89
+ ### Changed
90
+
91
+ - **Event Idempotency**: Clarified `invoke()` caches results after
92
+ COMPLETED/FAILED. Use `as_fresh_event()` for retry.
93
+
94
+ ### Added
95
+
96
+ - Race/memory leak tests with GC validation. 100% coverage for guards.
97
+
98
+ ## [1.0.0a2](https://github.com/khive-ai/lionherd-core/releases/tag/v1.0.0-alpha2) - 2025-11-05
99
+
100
+ ### Added
101
+
102
+ - **Event Timeout Support**: Optional `timeout` field with validation.
103
+ Converts `TimeoutError` to `LionherdTimeoutError` with `status=CANCELLED`,
104
+ `retryable=True`.
105
+ - **PriorityQueue**: Async priority queue using `heapq` + anyio primitives
106
+ with `put()`, `get()`, `put_nowait()`, `get_nowait()`. 100% test coverage.
107
+ - **LNDL Reserved Keyword Validation**: Python keyword checking for action
108
+ names with `UserWarning`.
109
+
110
+ ### Fixed
111
+
112
+ - **PriorityQueue Deadlock**: `get_nowait()` now notifies waiting putters,
113
+ preventing deadlock with bounded queues.
114
+ - **LNDL**: Fixed typo in error messages and improved system prompt examples.
115
+
116
+ ### Changed
117
+
118
+ - **Flow Architecture** (breaking): Composition over inheritance. `add()` →
119
+ `add_progression()`, `pile` → `items`.
120
+ - **Copy Semantics** (breaking): `with_updates()` now uses
121
+ `Literal["shallow", "deep"] | None` instead of two booleans.
122
+ - **Event Documentation**: Simplified docstrings, added `@final` to
123
+ `invoke()`, moved rationale to tests.
124
+ - **EventStatus**: Uses `lionherd_core.types.Enum` instead of `(str, Enum)`
125
+ for `Allowable` protocol support.
126
+
127
+ ## [1.0.0a1](https://github.com/khive-ai/lionherd-core/releases/tag/v1.0.0-alpha1) - 2025-11-03
128
+
129
+ ### Added
130
+
131
+ - **LNDL Action Syntax**: Added support for tool/function invocations within
132
+ LNDL responses using `<lact>` tags. Supports both namespaced actions
133
+ (`<lact Model.field alias>function(...)</lact>`) for mixing with lvars and
134
+ direct actions (`<lact name>function(...)</lact>`) for entire output.
135
+ Includes fuzzy matching support and complete validation lifecycle with
136
+ re-validation after action execution.
137
+ - Added `py.typed` marker file for PEP 561 compliance to enable type checking support
138
+
139
+ ## [1.0.0a0](https://github.com/khive-ai/lionherd-core/releases/tag/v1.0.0-alpha) - 2025-11-02
140
+
141
+ ### Added
142
+
143
+ - Initial release of lionherd-core
144
+ - Core orchestration framework
145
+ - Base abstractions and protocols