tigrbl-atoms 0.4.2.dev3__tar.gz → 0.4.3.dev4__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 (158) hide show
  1. tigrbl_atoms-0.4.3.dev4/NOTICE +7 -0
  2. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/PKG-INFO +190 -28
  3. tigrbl_atoms-0.4.3.dev4/README.md +235 -0
  4. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/pyproject.toml +1 -1
  5. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/__init__.py +0 -7
  6. tigrbl_atoms-0.4.3.dev4/tigrbl_atoms/atoms/framing/__init__.py +41 -0
  7. tigrbl_atoms-0.4.3.dev4/tigrbl_atoms/atoms/framing/app_frame.py +119 -0
  8. tigrbl_atoms-0.4.3.dev4/tigrbl_atoms/atoms/framing/codec.py +512 -0
  9. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/__init__.py +7 -0
  10. tigrbl_atoms-0.4.3.dev4/tigrbl_atoms/atoms/sys/handler_well_known.py +73 -0
  11. tigrbl_atoms-0.4.3.dev4/tigrbl_atoms/atoms/transport/asgi_channel.py +270 -0
  12. tigrbl_atoms-0.4.3.dev4/tigrbl_atoms/atoms/transport/completion_fence.py +41 -0
  13. tigrbl_atoms-0.4.3.dev4/tigrbl_atoms/atoms/transport/websocket_unary.py +151 -0
  14. tigrbl_atoms-0.4.3.dev4/tigrbl_atoms/client_session_coverage.py +438 -0
  15. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/events.py +8 -2
  16. tigrbl_atoms-0.4.3.dev4/tigrbl_atoms/fallback.py +12 -0
  17. tigrbl_atoms-0.4.3.dev4/tigrbl_atoms/packed_inputs.py +273 -0
  18. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/protocol_runtime.py +127 -0
  19. tigrbl_atoms-0.4.3.dev4/tigrbl_atoms/protocol_scope.py +63 -0
  20. tigrbl_atoms-0.4.3.dev4/tigrbl_atoms/runtime_channel.py +657 -0
  21. tigrbl_atoms-0.4.3.dev4/tigrbl_atoms/runtime_loop_regions.py +46 -0
  22. tigrbl_atoms-0.4.3.dev4/tigrbl_atoms/runtime_resume.py +131 -0
  23. tigrbl_atoms-0.4.3.dev4/tigrbl_atoms/rust.py +29 -0
  24. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/types.py +6 -6
  25. tigrbl_atoms-0.4.2.dev3/README.md +0 -74
  26. tigrbl_atoms-0.4.2.dev3/tigrbl_atoms/fallback.py +0 -11
  27. tigrbl_atoms-0.4.2.dev3/tigrbl_atoms/runtime_channel.py +0 -78
  28. tigrbl_atoms-0.4.2.dev3/tigrbl_atoms/rust.py +0 -35
  29. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/LICENSE +0 -0
  30. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/_ctx.py +0 -0
  31. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/_opview_helpers.py +0 -0
  32. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/_request.py +0 -0
  33. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/algebra.py +0 -0
  34. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/__init__.py +0 -0
  35. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/_temp.py +0 -0
  36. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/__init__.py +0 -0
  37. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/_scheduler.py +0 -0
  38. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/_types.py +0 -0
  39. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/abort_group.py +0 -0
  40. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/admit.py +0 -0
  41. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/await_seal.py +0 -0
  42. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/cleanup.py +0 -0
  43. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/commit.py +0 -0
  44. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/dedupe.py +0 -0
  45. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/error_project.py +0 -0
  46. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/execute.py +0 -0
  47. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/precommit_validate.py +0 -0
  48. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/prepare_execute.py +0 -0
  49. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/reject_admission.py +0 -0
  50. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/result_slots.py +0 -0
  51. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/scheduler.py +0 -0
  52. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/seal_check.py +0 -0
  53. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/batch/tx_begin.py +0 -0
  54. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/dep/__init__.py +0 -0
  55. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/dep/_param_resolver.py +0 -0
  56. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/dep/extra.py +0 -0
  57. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/dep/security.py +0 -0
  58. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/dispatch/__init__.py +0 -0
  59. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/dispatch/binding_match.py +0 -0
  60. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/dispatch/binding_parse.py +0 -0
  61. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/dispatch/input_normalize.py +0 -0
  62. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/dispatch/op_resolve.py +0 -0
  63. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/egress/__init__.py +0 -0
  64. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/egress/asgi_send.py +0 -0
  65. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/egress/envelope_apply.py +0 -0
  66. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/egress/headers_apply.py +0 -0
  67. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/egress/http_finalize.py +0 -0
  68. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/egress/out_dump.py +0 -0
  69. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/egress/result_normalize.py +0 -0
  70. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/egress/to_transport_response.py +0 -0
  71. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/emit/__init__.py +0 -0
  72. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/emit/paired_post.py +0 -0
  73. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/emit/paired_pre.py +0 -0
  74. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/emit/readtime_alias.py +0 -0
  75. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/err/__init__.py +0 -0
  76. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/err/classify.py +0 -0
  77. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/err/ctx_build.py +0 -0
  78. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/err/rollback.py +0 -0
  79. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/err/transport_shape.py +0 -0
  80. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/fanout/__init__.py +0 -0
  81. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/fanout/emit_many.py +0 -0
  82. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/fanout/shape.py +0 -0
  83. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/hot/__init__.py +0 -0
  84. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/hot/slots.py +0 -0
  85. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/ingress/__init__.py +0 -0
  86. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/ingress/ctx_init.py +0 -0
  87. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/ingress/input_prepare.py +0 -0
  88. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/ingress/transport_extract.py +0 -0
  89. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/intent/__init__.py +0 -0
  90. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/intent/build.py +0 -0
  91. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/intent/final_group_key.py +0 -0
  92. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/intent/prekey.py +0 -0
  93. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/out/__init__.py +0 -0
  94. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/out/masking.py +0 -0
  95. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/refresh/__init__.py +0 -0
  96. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/refresh/demand.py +0 -0
  97. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/resolve/__init__.py +0 -0
  98. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/resolve/assemble.py +0 -0
  99. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/resolve/paired_gen.py +0 -0
  100. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/response/__init__.py +0 -0
  101. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/response/error_to_transport.py +0 -0
  102. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/response/headers_from_payload.py +0 -0
  103. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/response/negotiate.py +0 -0
  104. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/response/negotiation.py +0 -0
  105. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/response/render.py +0 -0
  106. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/response/renderer.py +0 -0
  107. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/response/template.py +0 -0
  108. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/response/templates.py +0 -0
  109. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/schema/__init__.py +0 -0
  110. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/schema/collect_in.py +0 -0
  111. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/schema/collect_out.py +0 -0
  112. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/storage/__init__.py +0 -0
  113. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/storage/to_stored.py +0 -0
  114. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/_db.py +0 -0
  115. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/_oltp_context.py +0 -0
  116. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/commit_tx.py +0 -0
  117. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_aggregate.py +0 -0
  118. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_append_chunk.py +0 -0
  119. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_bulk_create.py +0 -0
  120. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_bulk_delete.py +0 -0
  121. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_bulk_merge.py +0 -0
  122. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_bulk_replace.py +0 -0
  123. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_bulk_update.py +0 -0
  124. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_checkpoint.py +0 -0
  125. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_clear.py +0 -0
  126. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_count.py +0 -0
  127. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_create.py +0 -0
  128. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_custom.py +0 -0
  129. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_delete.py +0 -0
  130. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_download.py +0 -0
  131. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_exists.py +0 -0
  132. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_group_by.py +0 -0
  133. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_list.py +0 -0
  134. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_merge.py +0 -0
  135. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_noop.py +0 -0
  136. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_persistence.py +0 -0
  137. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_publish.py +0 -0
  138. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_read.py +0 -0
  139. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_replace.py +0 -0
  140. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_send_datagram.py +0 -0
  141. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_subscribe.py +0 -0
  142. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_tail.py +0 -0
  143. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_update.py +0 -0
  144. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/handler_upload.py +0 -0
  145. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/phase_db.py +0 -0
  146. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/sys/start_tx.py +0 -0
  147. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/transport/__init__.py +0 -0
  148. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/transport/sink_bind.py +0 -0
  149. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/transport/unit_capture.py +0 -0
  150. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/wire/__init__.py +0 -0
  151. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/wire/build_in.py +0 -0
  152. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/wire/build_out.py +0 -0
  153. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/wire/dump.py +0 -0
  154. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/atoms/wire/validate_in.py +0 -0
  155. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/phases.py +0 -0
  156. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/runtime_callbacks.py +0 -0
  157. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/runtime_transactions.py +0 -0
  158. {tigrbl_atoms-0.4.2.dev3 → tigrbl_atoms-0.4.3.dev4}/tigrbl_atoms/stages.py +0 -0
@@ -0,0 +1,7 @@
1
+ Tigrbl
2
+ Copyright 2026 Swarmauri
3
+
4
+ This product includes software developed by Swarmauri.
5
+
6
+ Tigrbl is licensed under the Apache License, Version 2.0.
7
+ See the LICENSE file distributed with this work for the full license text.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tigrbl-atoms
3
- Version: 0.4.2.dev3
3
+ Version: 0.4.3.dev4
4
4
  Summary: Runtime atom package for Tigrbl stages, phases, typed contexts, event anchors, protocol execution, and composable pipeline algebra.
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -204,6 +204,7 @@ License: Apache License
204
204
  See the License for the specific language governing permissions and
205
205
  limitations under the License.
206
206
  License-File: LICENSE
207
+ License-File: NOTICE
207
208
  Keywords: tigrbl,asgi,api,atom algebra,atom pipeline,event anchors,json-rpc,atoms,execution,phases,openapi,openrpc,protocol runtime,rest,runtime,schema-first,stages,typed context
208
209
  Author: Jacob Stewart
209
210
  Author-email: jacob@swarmauri.com
@@ -250,12 +251,45 @@ Description-Content-Type: text/markdown
250
251
  <p><strong>Runtime atom package for Tigrbl stages, phases, typed contexts, event anchors, protocol execution, and composable pipeline algebra.</strong></p>
251
252
  <a href="https://pypi.org/project/tigrbl-atoms/"><img src="https://img.shields.io/pypi/v/tigrbl-atoms?label=PyPI" alt="PyPI version for tigrbl-atoms"/></a>
252
253
  <a href="https://pypi.org/project/tigrbl-atoms/"><img src="https://static.pepy.tech/badge/tigrbl-atoms" alt="Downloads for tigrbl-atoms"/></a>
254
+ <a href="https://discord.gg/K4YTAPapjR"><img src="https://img.shields.io/badge/Discord-Join%20chat-5865F2?logo=discord&logoColor=white" alt="Discord community for tigrbl-atoms"/></a>
253
255
  <a href="https://github.com/tigrbl/tigrbl/blob/master/pkgs/core/tigrbl_atoms/README.md"><img src="https://hits.sh/github.com/tigrbl/tigrbl/blob/master/pkgs/core/tigrbl_atoms/README.md.svg?label=hits" alt="Repository hits for tigrbl-atoms README"/></a>
254
256
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-525252" alt="Apache 2.0 license"/></a>
255
- <a href="pyproject.toml"><img src="https://img.shields.io/badge/python-3.10%20to%203.15-3776ab" alt="Python requirement for tigrbl-atoms"/></a>
257
+ <a href="pyproject.toml"><img src="https://img.shields.io/badge/python-3.10%2C%203.11%2C%203.12%2C%203.13%2C%203.14-3776ab" alt="Python versions 3.10 | 3.11 | 3.12 | 3.13 | 3.14 for tigrbl-atoms"/></a>
256
258
  <a href="https://github.com/tigrbl/tigrbl/blob/master/docs/README.md"><img src="https://img.shields.io/badge/workspace-core-1f6feb" alt="Workspace group for tigrbl-atoms"/></a>
257
259
  </div>
258
260
 
261
+ ## What is tigrbl-atoms?
262
+
263
+ Runtime atom package for Tigrbl stages, phases, typed contexts, event anchors, protocol execution, and composable pipeline algebra.
264
+
265
+ ## Why use tigrbl-atoms?
266
+
267
+ Use it when you need this foundational Tigrbl layer directly as a small, focused dependency.
268
+
269
+ ## When should I install tigrbl-atoms?
270
+
271
+ Install it for extension packages, package-local tests, or internals that need this boundary without the whole facade.
272
+
273
+ ## Who is tigrbl-atoms for?
274
+
275
+ Framework maintainers, extension authors, and advanced users composing Tigrbl from split packages.
276
+
277
+ ## Where does tigrbl-atoms fit?
278
+
279
+ `tigrbl-atoms` lives at `pkgs/core/tigrbl_atoms` and serves a focused layer in the split Tigrbl framework.
280
+
281
+ ## How does tigrbl-atoms work?
282
+
283
+ It owns a narrow layer in the split workspace and is consumed by higher-level packages through explicit dependencies.
284
+
285
+ ## Certification Status
286
+
287
+ - Package status: governed package in the `tigrbl/tigrbl` workspace.
288
+ - Governance source: [SSOT registry](https://github.com/tigrbl/tigrbl/blob/master/.ssot/registry.json).
289
+ - Release evidence: [publish workflow](https://github.com/tigrbl/tigrbl/actions/workflows/publish.yml) validates package builds, tests, GitHub release assets, and PyPI publication for managed packages.
290
+ - Local certification guard: `pkgs/core/tigrbl_tests/tests/unit/test_package_badges_and_notices.py` verifies every package README keeps the Discord badge, Apache 2.0 badge, explicit Python-version badge, `LICENSE`, and `NOTICE`.
291
+ - Scope note: this README documents the package boundary. Runtime feature support remains governed by `.ssot/` entities and the conformance docs linked below.
292
+
259
293
  ## Install
260
294
 
261
295
  ```bash
@@ -266,56 +300,184 @@ uv add tigrbl-atoms
266
300
  pip install tigrbl-atoms
267
301
  ```
268
302
 
303
+ ## Surface Coverage
304
+
305
+ | Surface | Value |
306
+ |---|---|
307
+ | PyPI package | [`tigrbl-atoms`](https://pypi.org/project/tigrbl-atoms/) |
308
+ | Repository path | [`pkgs/core/tigrbl_atoms`](https://github.com/tigrbl/tigrbl/tree/master/pkgs/core/tigrbl_atoms) |
309
+ | Python import root | `tigrbl_atoms` |
310
+ | Console scripts | none declared |
311
+ | Entry points | none declared |
312
+ | Optional extras | none declared |
313
+ | Legal files | `LICENSE`, `NOTICE` |
314
+ | Supported Python | `3.10, 3.11, 3.12, 3.13, 3.14` |
315
+
269
316
  ## What It Owns
270
317
 
271
- `tigrbl-atoms` owns the atoms boundary inside the split Python workspace. Key implementation roots include `tigrbl_atoms` with `_ctx, _opview_helpers, _request, algebra, atoms/, events`.
318
+ `tigrbl-atoms` owns the `foundational framework package` boundary. It should be installed when you need this package's focused responsibility without assuming every other Tigrbl workspace package is present.
319
+
320
+ Implementation orientation:
321
+ - `tigrbl_atoms`: _ctx, _opview_helpers, _request, algebra, atoms/, events, fallback, phases, protocol_runtime, runtime_callbacks, runtime_channel, runtime_transactions
272
322
 
273
- ## Use It When
323
+ Package catalog:
324
+ - `phases.py` and `stages.py`: lifecycle phase names, aliases, stage transitions, transaction flags, and error-phase metadata.
325
+ - `_ctx.py`, `_request.py`, `types.py`, and `events.py`: typed context, request, event, and callable contracts shared by kernel/runtime code.
326
+ - `algebra.py`: composable pipeline helpers for sequencing runtime work.
327
+ - `atoms/ingress`: context initialization, transport extraction, and input preparation.
328
+ - `atoms/dispatch`: binding matching, binding parsing, operation resolution, and input normalization.
329
+ - `atoms/dep`: security dependency, general dependency, and parameter resolution units.
330
+ - `atoms/wire`: input schema construction, input validation, output construction, and dump/serialization units.
331
+ - `atoms/sys`: default system handlers for CRUD, bulk, analytics, realtime, transport, transaction, and persistence operations.
332
+ - `atoms/storage`, `atoms/out`, `atoms/response`, `atoms/egress`, and `atoms/err`: storage conversion, masking, response negotiation/rendering, transport egress, error shaping, and rollback.
333
+ - `atoms/batch`, `atoms/fanout`, `atoms/hot`, `atoms/intent`, and `atoms/transport`: batch scheduling, fanout shaping, hot slots, intent grouping, and transport sink/capture units.
334
+ - `protocol_runtime.py`, `runtime_channel.py`, `runtime_callbacks.py`, and `runtime_transactions.py`: helpers used by runtime-owned protocol execution.
274
335
 
275
- Use `tigrbl-atoms` when you want this subsystem directly as a package boundary instead of consuming it only through the top-level `tigrbl` facade.
336
+ ## Public API and Import Surface
276
337
 
277
- ## Public Surface
338
+ - Import roots: `tigrbl_atoms`.
339
+ - Public symbols: `EGRESS_PHASES`, `EdgeTarget`, `ErrorCtx`, `HANDLER_PHASES`, `HookPhase`, `HookPhases`, `HookPredicate`, `INGRESS_PHASES`, `PHASE_SEQUENCE`, `PhaseTreeEdge`, `PhaseTreeNode`, `StepFn`.
340
+ - Workspace dependencies: [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/), [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/), [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/), [`tigrbl-core`](https://pypi.org/project/tigrbl-core/), [`tigrbl-typing`](https://pypi.org/project/tigrbl-typing/).
341
+ - External runtime dependencies: `jinja2>=3.1`, `sqlalchemy>=2.0`, `typing-extensions>=4.0`.
278
342
 
279
- - `tigrbl_atoms` exposes `import_module, Any, rust_atoms_enabled, register_rust_atom, register_rust_callback, register_rust_hook, PHASE_SEQUENCE, INGRESS_PHASES`.
343
+ ## Lifecycle Phases
280
344
 
281
- ## Internal Layout
345
+ Atoms are organized around the runtime lifecycle:
282
346
 
283
- - Workspace path: `pkgs/core/tigrbl_atoms`.
284
- - Package class: `core framework package`.
285
- - Python requirement: `>=3.10,<3.15`.
286
- - `tigrbl_atoms` modules: `_ctx, _opview_helpers, _request, algebra, atoms/, events, fallback, phases, protocol_runtime, runtime_callbacks`.
347
+ | Group | Phases | Meaning |
348
+ |---|---|---|
349
+ | Ingress | `INGRESS_BEGIN`, `INGRESS_PARSE`, `INGRESS_DISPATCH` | Receive a transport unit, initialize context, parse input, and resolve the target binding/operation. |
350
+ | Transaction and handler | `PRE_TX_BEGIN`, `START_TX`, `PRE_HANDLER`, `HANDLER`, `POST_HANDLER`, `PRE_COMMIT`, `TX_COMMIT` | Prepare policy, open or attach transaction state, validate input, run handlers, post-process, and commit when Tigrbl owns the transaction. |
351
+ | Egress | `POST_COMMIT`, `EGRESS_SHAPE`, `EGRESS_FINALIZE`, `POST_RESPONSE` | Shape output, apply response rules, finalize transport output, and run after-response work. |
352
+ | Error | `ON_ERROR`, phase-specific `ON_*_ERROR`, `TX_ROLLBACK` | Classify errors, shape error responses, and roll back transaction-owned work. |
287
353
 
288
- ## Dependency Surface
354
+ `END_TX`, `ON_END_TX_ERROR`, and `ON_ROLLBACK` are compatibility aliases for `TX_COMMIT`, `ON_TX_COMMIT_ERROR`, and `TX_ROLLBACK`. New docs and new atoms should use the current names.
289
355
 
290
- - Workspace package dependencies: [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/), [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/), [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/), [`tigrbl-core`](https://pypi.org/project/tigrbl-core/), [`tigrbl-typing`](https://pypi.org/project/tigrbl-typing/).
291
- - External runtime dependencies: `jinja2>=3.1`, `sqlalchemy>=2.0`, `typing-extensions>=4.0`.
292
- - Optional extras: none declared.
356
+ ## Atom Semantics
357
+
358
+ An atom is a small, named runtime unit. It should do one thing, take context from the compiled plan, and leave the context in the expected next stage. Atoms are intentionally smaller than handlers:
359
+
360
+ - ingress atoms do not perform persistence;
361
+ - dispatch atoms do not execute business logic;
362
+ - wire atoms do not choose transport routes;
363
+ - storage atoms do not commit transactions;
364
+ - egress atoms do not reopen handler work;
365
+ - error atoms should be deterministic and avoid masking the original failure unless policy requires it.
366
+
367
+ This separation lets the kernel produce readable labels, lets diagnostics explain execution order, and lets runtime transports share behavior across REST, JSON-RPC, stream, SSE, WebSocket, WSS, and WebTransport surfaces.
368
+
369
+ ## System Handler Catalog
370
+
371
+ The `atoms/sys` package contains default handlers and transaction units used by operation packs and runtime plans. The catalog includes scalar CRUD handlers (`create`, `read`, `update`, `replace`, `merge`, `delete`, `list`, `clear`), bulk handlers, analytical handlers (`count`, `exists`, `aggregate`, `group_by`), realtime handlers (`publish`, `subscribe`, `tail`), stream/file handlers (`upload`, `download`, `append_chunk`, `checkpoint`), custom/no-op handlers, persistence helpers, and transaction helpers such as `start_tx`, `phase_db`, and `commit_tx`.
372
+
373
+ Use system handlers when implementing framework behavior. Application code should normally reach these through operations on a Tigrbl app or model rather than importing a handler atom directly.
374
+
375
+ ## Transaction Discipline
376
+
377
+ Transaction atoms and database guards exist so user hooks and system handlers do not silently commit or flush at the wrong phase. The broad rule is:
378
+
379
+ - before `START_TX`, do not assume a database transaction exists;
380
+ - from `START_TX` through `PRE_COMMIT`, in-transaction validation and handler work may proceed under guards;
381
+ - `TX_COMMIT` owns final commit when Tigrbl owns the transaction;
382
+ - `POST_COMMIT`, `EGRESS_*`, and `POST_RESPONSE` should not mutate transaction-owned state;
383
+ - `TX_ROLLBACK` performs rollback and cleanup for failures.
384
+
385
+ If you add or modify an atom, make its transaction expectations explicit in tests. Do not hide direct session commits inside validation, response, transport, or error atoms.
386
+
387
+ ## Transport and Protocol Atoms
388
+
389
+ Transport atoms model runtime units instead of broad protocol names. A WebSocket message, an SSE event, an HTTP stream chunk, and a WebTransport datagram are different units even when they carry similar payloads. Keep family, exchange, framing, lane, subevent, and handler intent separate.
390
+
391
+ Practical guidance:
392
+ - Use ingress/dispatch atoms to parse and resolve transport units.
393
+ - Use protocol/runtime helpers to carry channel metadata.
394
+ - Use response and egress atoms to render or emit units.
395
+ - Preserve fail-closed behavior for unsupported protocol/framing/lane combinations.
396
+
397
+ ## Extension Guidance
398
+
399
+ - Add atoms when the behavior is reusable, phase-specific, and independently testable.
400
+ - Keep application policy in hooks or dependencies, not in generic atoms.
401
+ - Keep atom names stable and descriptive; they show up in kernel diagnostics.
402
+ - Avoid broad atoms that parse, validate, execute, persist, and render at once.
403
+
404
+ ## Usage Examples
405
+
406
+ ### Verify the installed package
407
+
408
+ ```bash
409
+ python -m pip show tigrbl-atoms
410
+ python - <<'PY'
411
+ from importlib.metadata import version
412
+ print(version("tigrbl-atoms"))
413
+ PY
414
+ ```
415
+
416
+ ### Import the package boundary
417
+
418
+ ```python
419
+ import importlib
420
+
421
+ module = importlib.import_module("tigrbl_atoms")
422
+ print(module.__name__)
423
+ ```
424
+
425
+ ### Import a public symbol
426
+
427
+ ```python
428
+ from tigrbl_atoms import EGRESS_PHASES
429
+
430
+ print(EGRESS_PHASES)
431
+ ```
432
+
433
+ ### Use with the facade when building applications
434
+
435
+ ```bash
436
+ uv add tigrbl tigrbl-atoms
437
+ python - <<'PY'
438
+ import tigrbl
439
+ print(tigrbl.__name__)
440
+ PY
441
+ ```
442
+
443
+ ## How To Choose This Package
444
+
445
+ Choose `tigrbl-atoms` when the quick-answer table matches your use case. Choose [`tigrbl`](https://pypi.org/project/tigrbl/) instead when you want the full public facade. Choose a lower-level package such as [`tigrbl-core`](https://pypi.org/project/tigrbl-core/), [`tigrbl-base`](https://pypi.org/project/tigrbl-base/), or [`tigrbl-runtime`](https://pypi.org/project/tigrbl-runtime/) when you are building framework extensions or testing a specific internal boundary.
293
446
 
294
447
  ## Related Packages
295
448
 
296
- - [`tigrbl`](https://pypi.org/project/tigrbl/)
297
449
  - [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/)
298
450
  - [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/)
299
451
  - [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/)
300
452
  - [`tigrbl-core`](https://pypi.org/project/tigrbl-core/)
301
453
  - [`tigrbl-typing`](https://pypi.org/project/tigrbl-typing/)
454
+ - [`tigrbl`](https://pypi.org/project/tigrbl/)
455
+ - [`tigrbl-base`](https://pypi.org/project/tigrbl-base/)
456
+ - [`tigrbl-runtime`](https://pypi.org/project/tigrbl-runtime/)
457
+
458
+ ## Documentation Links
459
+
460
+ - [Workspace docs](https://github.com/tigrbl/tigrbl/blob/master/docs/README.md)
461
+ - [Package catalog](https://github.com/tigrbl/tigrbl/blob/master/docs/developer/PACKAGE_CATALOG.md)
462
+ - [Package layout](https://github.com/tigrbl/tigrbl/blob/master/docs/developer/PACKAGE_LAYOUT.md)
463
+ - [Current target](https://github.com/tigrbl/tigrbl/blob/master/docs/conformance/CURRENT_TARGET.md)
464
+ - [Current state](https://github.com/tigrbl/tigrbl/blob/master/docs/conformance/CURRENT_STATE.md)
465
+ - [Next steps](https://github.com/tigrbl/tigrbl/blob/master/docs/conformance/NEXT_STEPS.md)
466
+ - [Documentation pointers](https://github.com/tigrbl/tigrbl/blob/master/docs/governance/DOC_POINTERS.md)
467
+ - [SSOT registry](https://github.com/tigrbl/tigrbl/blob/master/.ssot/registry.json)
468
+ - [Release workflow](https://github.com/tigrbl/tigrbl/actions/workflows/publish.yml)
302
469
 
303
- ## Canonical Repository Docs
470
+ ## Support
304
471
 
305
- - `docs/README.md`
306
- - `docs/conformance/CURRENT_TARGET.md`
307
- - `docs/conformance/CURRENT_STATE.md`
308
- - `docs/conformance/NEXT_STEPS.md`
309
- - `docs/governance/DOC_POINTERS.md`
310
- - `docs/developer/PACKAGE_CATALOG.md`
311
- - `docs/developer/PACKAGE_LAYOUT.md`
472
+ - Community: [Discord](https://discord.gg/K4YTAPapjR).
473
+ - Issues: [GitHub Issues](https://github.com/tigrbl/tigrbl/issues).
474
+ - Repository: [pkgs/core/tigrbl_atoms](https://github.com/tigrbl/tigrbl/tree/master/pkgs/core/tigrbl_atoms).
312
475
 
313
476
  ## Package-local Boundary
314
477
 
315
- This file is a package-local distribution entry point.
316
- Use this page for package installation and boundary orientation. Repository governance, conformance state, target status, and release evidence remain governed from `docs/` and `.ssot/`.
478
+ This file is a package-local distribution entry point. This README is the package-local distribution entry point for `tigrbl-atoms`. It answers install, usage, API, ownership, and certification-orientation questions for this package. Broader architectural decisions, release status, and cross-package proof chains remain in the repository-level docs and SSOT registry.
317
479
 
318
480
  ## License
319
481
 
320
- Licensed under the Apache License, Version 2.0. See `LICENSE` and the official [Apache 2.0 license text](https://www.apache.org/licenses/LICENSE-2.0).
482
+ Licensed under the Apache License, Version 2.0. See `LICENSE`, `NOTICE`, and the official [Apache 2.0 license text](https://www.apache.org/licenses/LICENSE-2.0).
321
483
 
@@ -0,0 +1,235 @@
1
+ <div align="center">
2
+ <h1>tigrbl-atoms</h1>
3
+ <img src="https://raw.githubusercontent.com/swarmauri/swarmauri-sdk/master/assets/tigrbl_full_logo.png" alt="Tigrbl logo" width="140"/>
4
+ <p><strong>Runtime atom package for Tigrbl stages, phases, typed contexts, event anchors, protocol execution, and composable pipeline algebra.</strong></p>
5
+ <a href="https://pypi.org/project/tigrbl-atoms/"><img src="https://img.shields.io/pypi/v/tigrbl-atoms?label=PyPI" alt="PyPI version for tigrbl-atoms"/></a>
6
+ <a href="https://pypi.org/project/tigrbl-atoms/"><img src="https://static.pepy.tech/badge/tigrbl-atoms" alt="Downloads for tigrbl-atoms"/></a>
7
+ <a href="https://discord.gg/K4YTAPapjR"><img src="https://img.shields.io/badge/Discord-Join%20chat-5865F2?logo=discord&logoColor=white" alt="Discord community for tigrbl-atoms"/></a>
8
+ <a href="https://github.com/tigrbl/tigrbl/blob/master/pkgs/core/tigrbl_atoms/README.md"><img src="https://hits.sh/github.com/tigrbl/tigrbl/blob/master/pkgs/core/tigrbl_atoms/README.md.svg?label=hits" alt="Repository hits for tigrbl-atoms README"/></a>
9
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-525252" alt="Apache 2.0 license"/></a>
10
+ <a href="pyproject.toml"><img src="https://img.shields.io/badge/python-3.10%2C%203.11%2C%203.12%2C%203.13%2C%203.14-3776ab" alt="Python versions 3.10 | 3.11 | 3.12 | 3.13 | 3.14 for tigrbl-atoms"/></a>
11
+ <a href="https://github.com/tigrbl/tigrbl/blob/master/docs/README.md"><img src="https://img.shields.io/badge/workspace-core-1f6feb" alt="Workspace group for tigrbl-atoms"/></a>
12
+ </div>
13
+
14
+ ## What is tigrbl-atoms?
15
+
16
+ Runtime atom package for Tigrbl stages, phases, typed contexts, event anchors, protocol execution, and composable pipeline algebra.
17
+
18
+ ## Why use tigrbl-atoms?
19
+
20
+ Use it when you need this foundational Tigrbl layer directly as a small, focused dependency.
21
+
22
+ ## When should I install tigrbl-atoms?
23
+
24
+ Install it for extension packages, package-local tests, or internals that need this boundary without the whole facade.
25
+
26
+ ## Who is tigrbl-atoms for?
27
+
28
+ Framework maintainers, extension authors, and advanced users composing Tigrbl from split packages.
29
+
30
+ ## Where does tigrbl-atoms fit?
31
+
32
+ `tigrbl-atoms` lives at `pkgs/core/tigrbl_atoms` and serves a focused layer in the split Tigrbl framework.
33
+
34
+ ## How does tigrbl-atoms work?
35
+
36
+ It owns a narrow layer in the split workspace and is consumed by higher-level packages through explicit dependencies.
37
+
38
+ ## Certification Status
39
+
40
+ - Package status: governed package in the `tigrbl/tigrbl` workspace.
41
+ - Governance source: [SSOT registry](https://github.com/tigrbl/tigrbl/blob/master/.ssot/registry.json).
42
+ - Release evidence: [publish workflow](https://github.com/tigrbl/tigrbl/actions/workflows/publish.yml) validates package builds, tests, GitHub release assets, and PyPI publication for managed packages.
43
+ - Local certification guard: `pkgs/core/tigrbl_tests/tests/unit/test_package_badges_and_notices.py` verifies every package README keeps the Discord badge, Apache 2.0 badge, explicit Python-version badge, `LICENSE`, and `NOTICE`.
44
+ - Scope note: this README documents the package boundary. Runtime feature support remains governed by `.ssot/` entities and the conformance docs linked below.
45
+
46
+ ## Install
47
+
48
+ ```bash
49
+ uv add tigrbl-atoms
50
+ ```
51
+
52
+ ```bash
53
+ pip install tigrbl-atoms
54
+ ```
55
+
56
+ ## Surface Coverage
57
+
58
+ | Surface | Value |
59
+ |---|---|
60
+ | PyPI package | [`tigrbl-atoms`](https://pypi.org/project/tigrbl-atoms/) |
61
+ | Repository path | [`pkgs/core/tigrbl_atoms`](https://github.com/tigrbl/tigrbl/tree/master/pkgs/core/tigrbl_atoms) |
62
+ | Python import root | `tigrbl_atoms` |
63
+ | Console scripts | none declared |
64
+ | Entry points | none declared |
65
+ | Optional extras | none declared |
66
+ | Legal files | `LICENSE`, `NOTICE` |
67
+ | Supported Python | `3.10, 3.11, 3.12, 3.13, 3.14` |
68
+
69
+ ## What It Owns
70
+
71
+ `tigrbl-atoms` owns the `foundational framework package` boundary. It should be installed when you need this package's focused responsibility without assuming every other Tigrbl workspace package is present.
72
+
73
+ Implementation orientation:
74
+ - `tigrbl_atoms`: _ctx, _opview_helpers, _request, algebra, atoms/, events, fallback, phases, protocol_runtime, runtime_callbacks, runtime_channel, runtime_transactions
75
+
76
+ Package catalog:
77
+ - `phases.py` and `stages.py`: lifecycle phase names, aliases, stage transitions, transaction flags, and error-phase metadata.
78
+ - `_ctx.py`, `_request.py`, `types.py`, and `events.py`: typed context, request, event, and callable contracts shared by kernel/runtime code.
79
+ - `algebra.py`: composable pipeline helpers for sequencing runtime work.
80
+ - `atoms/ingress`: context initialization, transport extraction, and input preparation.
81
+ - `atoms/dispatch`: binding matching, binding parsing, operation resolution, and input normalization.
82
+ - `atoms/dep`: security dependency, general dependency, and parameter resolution units.
83
+ - `atoms/wire`: input schema construction, input validation, output construction, and dump/serialization units.
84
+ - `atoms/sys`: default system handlers for CRUD, bulk, analytics, realtime, transport, transaction, and persistence operations.
85
+ - `atoms/storage`, `atoms/out`, `atoms/response`, `atoms/egress`, and `atoms/err`: storage conversion, masking, response negotiation/rendering, transport egress, error shaping, and rollback.
86
+ - `atoms/batch`, `atoms/fanout`, `atoms/hot`, `atoms/intent`, and `atoms/transport`: batch scheduling, fanout shaping, hot slots, intent grouping, and transport sink/capture units.
87
+ - `protocol_runtime.py`, `runtime_channel.py`, `runtime_callbacks.py`, and `runtime_transactions.py`: helpers used by runtime-owned protocol execution.
88
+
89
+ ## Public API and Import Surface
90
+
91
+ - Import roots: `tigrbl_atoms`.
92
+ - Public symbols: `EGRESS_PHASES`, `EdgeTarget`, `ErrorCtx`, `HANDLER_PHASES`, `HookPhase`, `HookPhases`, `HookPredicate`, `INGRESS_PHASES`, `PHASE_SEQUENCE`, `PhaseTreeEdge`, `PhaseTreeNode`, `StepFn`.
93
+ - Workspace dependencies: [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/), [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/), [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/), [`tigrbl-core`](https://pypi.org/project/tigrbl-core/), [`tigrbl-typing`](https://pypi.org/project/tigrbl-typing/).
94
+ - External runtime dependencies: `jinja2>=3.1`, `sqlalchemy>=2.0`, `typing-extensions>=4.0`.
95
+
96
+ ## Lifecycle Phases
97
+
98
+ Atoms are organized around the runtime lifecycle:
99
+
100
+ | Group | Phases | Meaning |
101
+ |---|---|---|
102
+ | Ingress | `INGRESS_BEGIN`, `INGRESS_PARSE`, `INGRESS_DISPATCH` | Receive a transport unit, initialize context, parse input, and resolve the target binding/operation. |
103
+ | Transaction and handler | `PRE_TX_BEGIN`, `START_TX`, `PRE_HANDLER`, `HANDLER`, `POST_HANDLER`, `PRE_COMMIT`, `TX_COMMIT` | Prepare policy, open or attach transaction state, validate input, run handlers, post-process, and commit when Tigrbl owns the transaction. |
104
+ | Egress | `POST_COMMIT`, `EGRESS_SHAPE`, `EGRESS_FINALIZE`, `POST_RESPONSE` | Shape output, apply response rules, finalize transport output, and run after-response work. |
105
+ | Error | `ON_ERROR`, phase-specific `ON_*_ERROR`, `TX_ROLLBACK` | Classify errors, shape error responses, and roll back transaction-owned work. |
106
+
107
+ `END_TX`, `ON_END_TX_ERROR`, and `ON_ROLLBACK` are compatibility aliases for `TX_COMMIT`, `ON_TX_COMMIT_ERROR`, and `TX_ROLLBACK`. New docs and new atoms should use the current names.
108
+
109
+ ## Atom Semantics
110
+
111
+ An atom is a small, named runtime unit. It should do one thing, take context from the compiled plan, and leave the context in the expected next stage. Atoms are intentionally smaller than handlers:
112
+
113
+ - ingress atoms do not perform persistence;
114
+ - dispatch atoms do not execute business logic;
115
+ - wire atoms do not choose transport routes;
116
+ - storage atoms do not commit transactions;
117
+ - egress atoms do not reopen handler work;
118
+ - error atoms should be deterministic and avoid masking the original failure unless policy requires it.
119
+
120
+ This separation lets the kernel produce readable labels, lets diagnostics explain execution order, and lets runtime transports share behavior across REST, JSON-RPC, stream, SSE, WebSocket, WSS, and WebTransport surfaces.
121
+
122
+ ## System Handler Catalog
123
+
124
+ The `atoms/sys` package contains default handlers and transaction units used by operation packs and runtime plans. The catalog includes scalar CRUD handlers (`create`, `read`, `update`, `replace`, `merge`, `delete`, `list`, `clear`), bulk handlers, analytical handlers (`count`, `exists`, `aggregate`, `group_by`), realtime handlers (`publish`, `subscribe`, `tail`), stream/file handlers (`upload`, `download`, `append_chunk`, `checkpoint`), custom/no-op handlers, persistence helpers, and transaction helpers such as `start_tx`, `phase_db`, and `commit_tx`.
125
+
126
+ Use system handlers when implementing framework behavior. Application code should normally reach these through operations on a Tigrbl app or model rather than importing a handler atom directly.
127
+
128
+ ## Transaction Discipline
129
+
130
+ Transaction atoms and database guards exist so user hooks and system handlers do not silently commit or flush at the wrong phase. The broad rule is:
131
+
132
+ - before `START_TX`, do not assume a database transaction exists;
133
+ - from `START_TX` through `PRE_COMMIT`, in-transaction validation and handler work may proceed under guards;
134
+ - `TX_COMMIT` owns final commit when Tigrbl owns the transaction;
135
+ - `POST_COMMIT`, `EGRESS_*`, and `POST_RESPONSE` should not mutate transaction-owned state;
136
+ - `TX_ROLLBACK` performs rollback and cleanup for failures.
137
+
138
+ If you add or modify an atom, make its transaction expectations explicit in tests. Do not hide direct session commits inside validation, response, transport, or error atoms.
139
+
140
+ ## Transport and Protocol Atoms
141
+
142
+ Transport atoms model runtime units instead of broad protocol names. A WebSocket message, an SSE event, an HTTP stream chunk, and a WebTransport datagram are different units even when they carry similar payloads. Keep family, exchange, framing, lane, subevent, and handler intent separate.
143
+
144
+ Practical guidance:
145
+ - Use ingress/dispatch atoms to parse and resolve transport units.
146
+ - Use protocol/runtime helpers to carry channel metadata.
147
+ - Use response and egress atoms to render or emit units.
148
+ - Preserve fail-closed behavior for unsupported protocol/framing/lane combinations.
149
+
150
+ ## Extension Guidance
151
+
152
+ - Add atoms when the behavior is reusable, phase-specific, and independently testable.
153
+ - Keep application policy in hooks or dependencies, not in generic atoms.
154
+ - Keep atom names stable and descriptive; they show up in kernel diagnostics.
155
+ - Avoid broad atoms that parse, validate, execute, persist, and render at once.
156
+
157
+ ## Usage Examples
158
+
159
+ ### Verify the installed package
160
+
161
+ ```bash
162
+ python -m pip show tigrbl-atoms
163
+ python - <<'PY'
164
+ from importlib.metadata import version
165
+ print(version("tigrbl-atoms"))
166
+ PY
167
+ ```
168
+
169
+ ### Import the package boundary
170
+
171
+ ```python
172
+ import importlib
173
+
174
+ module = importlib.import_module("tigrbl_atoms")
175
+ print(module.__name__)
176
+ ```
177
+
178
+ ### Import a public symbol
179
+
180
+ ```python
181
+ from tigrbl_atoms import EGRESS_PHASES
182
+
183
+ print(EGRESS_PHASES)
184
+ ```
185
+
186
+ ### Use with the facade when building applications
187
+
188
+ ```bash
189
+ uv add tigrbl tigrbl-atoms
190
+ python - <<'PY'
191
+ import tigrbl
192
+ print(tigrbl.__name__)
193
+ PY
194
+ ```
195
+
196
+ ## How To Choose This Package
197
+
198
+ Choose `tigrbl-atoms` when the quick-answer table matches your use case. Choose [`tigrbl`](https://pypi.org/project/tigrbl/) instead when you want the full public facade. Choose a lower-level package such as [`tigrbl-core`](https://pypi.org/project/tigrbl-core/), [`tigrbl-base`](https://pypi.org/project/tigrbl-base/), or [`tigrbl-runtime`](https://pypi.org/project/tigrbl-runtime/) when you are building framework extensions or testing a specific internal boundary.
199
+
200
+ ## Related Packages
201
+
202
+ - [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/)
203
+ - [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/)
204
+ - [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/)
205
+ - [`tigrbl-core`](https://pypi.org/project/tigrbl-core/)
206
+ - [`tigrbl-typing`](https://pypi.org/project/tigrbl-typing/)
207
+ - [`tigrbl`](https://pypi.org/project/tigrbl/)
208
+ - [`tigrbl-base`](https://pypi.org/project/tigrbl-base/)
209
+ - [`tigrbl-runtime`](https://pypi.org/project/tigrbl-runtime/)
210
+
211
+ ## Documentation Links
212
+
213
+ - [Workspace docs](https://github.com/tigrbl/tigrbl/blob/master/docs/README.md)
214
+ - [Package catalog](https://github.com/tigrbl/tigrbl/blob/master/docs/developer/PACKAGE_CATALOG.md)
215
+ - [Package layout](https://github.com/tigrbl/tigrbl/blob/master/docs/developer/PACKAGE_LAYOUT.md)
216
+ - [Current target](https://github.com/tigrbl/tigrbl/blob/master/docs/conformance/CURRENT_TARGET.md)
217
+ - [Current state](https://github.com/tigrbl/tigrbl/blob/master/docs/conformance/CURRENT_STATE.md)
218
+ - [Next steps](https://github.com/tigrbl/tigrbl/blob/master/docs/conformance/NEXT_STEPS.md)
219
+ - [Documentation pointers](https://github.com/tigrbl/tigrbl/blob/master/docs/governance/DOC_POINTERS.md)
220
+ - [SSOT registry](https://github.com/tigrbl/tigrbl/blob/master/.ssot/registry.json)
221
+ - [Release workflow](https://github.com/tigrbl/tigrbl/actions/workflows/publish.yml)
222
+
223
+ ## Support
224
+
225
+ - Community: [Discord](https://discord.gg/K4YTAPapjR).
226
+ - Issues: [GitHub Issues](https://github.com/tigrbl/tigrbl/issues).
227
+ - Repository: [pkgs/core/tigrbl_atoms](https://github.com/tigrbl/tigrbl/tree/master/pkgs/core/tigrbl_atoms).
228
+
229
+ ## Package-local Boundary
230
+
231
+ This file is a package-local distribution entry point. This README is the package-local distribution entry point for `tigrbl-atoms`. It answers install, usage, API, ownership, and certification-orientation questions for this package. Broader architectural decisions, release status, and cross-package proof chains remain in the repository-level docs and SSOT registry.
232
+
233
+ ## License
234
+
235
+ Licensed under the Apache License, Version 2.0. See `LICENSE`, `NOTICE`, and the official [Apache 2.0 license text](https://www.apache.org/licenses/LICENSE-2.0).
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tigrbl-atoms"
3
- version = "0.4.2.dev3"
3
+ version = "0.4.3.dev4"
4
4
  description = "Runtime atom package for Tigrbl stages, phases, typed contexts, event anchors, protocol execution, and composable pipeline algebra."
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -3,9 +3,6 @@ from __future__ import annotations
3
3
  from importlib import import_module
4
4
  from typing import Any
5
5
 
6
- from .fallback import rust_atoms_enabled
7
- from .rust import register_rust_atom, register_rust_callback, register_rust_hook
8
-
9
6
  _LAZY_EXPORTS = {
10
7
  "PHASE_SEQUENCE": "types",
11
8
  "INGRESS_PHASES": "types",
@@ -40,10 +37,6 @@ __all__ = [
40
37
  "TypedErr",
41
38
  "ErrorCtx",
42
39
  "build_error_ctx",
43
- "rust_atoms_enabled",
44
- "register_rust_atom",
45
- "register_rust_callback",
46
- "register_rust_hook",
47
40
  ]
48
41
 
49
42
 
@@ -0,0 +1,41 @@
1
+ from __future__ import annotations
2
+
3
+ from .app_frame import (
4
+ DEFAULT_MAX_PAYLOAD_SIZE,
5
+ HEADER_SIZE,
6
+ RESERVED_FLAG_MASK,
7
+ SUPPORTED_VERSION,
8
+ FrameStreamDecoder,
9
+ decode_app_frame,
10
+ decode_app_frames,
11
+ encode_app_frame,
12
+ )
13
+ from .codec import (
14
+ FRAME_CODECS,
15
+ FrameCodec,
16
+ decode_frame,
17
+ decode_webtransport_inner_frame,
18
+ encode_frame,
19
+ encode_webtransport_inner_frame,
20
+ get_frame_codec,
21
+ supported_frame_codecs,
22
+ )
23
+
24
+ __all__ = [
25
+ "DEFAULT_MAX_PAYLOAD_SIZE",
26
+ "FRAME_CODECS",
27
+ "HEADER_SIZE",
28
+ "RESERVED_FLAG_MASK",
29
+ "SUPPORTED_VERSION",
30
+ "FrameCodec",
31
+ "FrameStreamDecoder",
32
+ "decode_app_frame",
33
+ "decode_app_frames",
34
+ "decode_frame",
35
+ "decode_webtransport_inner_frame",
36
+ "encode_app_frame",
37
+ "encode_frame",
38
+ "encode_webtransport_inner_frame",
39
+ "get_frame_codec",
40
+ "supported_frame_codecs",
41
+ ]