matrx-graph 0.2.259__tar.gz → 0.2.261__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 (432) hide show
  1. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/PKG-INFO +1 -1
  2. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/actions/decorator.py +2 -0
  3. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/actions/spec.py +2 -0
  4. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0100_baseline_post_reorg.sql +1 -0
  5. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/run_store.py +49 -0
  6. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/scheduler.py +21 -0
  7. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/node_spec.py +6 -0
  8. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/pyproject.toml +1 -1
  9. matrx_graph-0.2.261/tests/test_a_failed_final_write_ends_the_run_failed.py +46 -0
  10. matrx_graph-0.2.261/tests/test_a_large_step_output_stays_out_of_the_run_row.py +77 -0
  11. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_standalone_db_models.py +16 -2
  12. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/.gitignore +0 -0
  13. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/AGENTS.md +0 -0
  14. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/CLAUDE.md +0 -0
  15. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/README.md +0 -0
  16. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/ENGINE_SPEC.md +0 -0
  17. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/GAPS_AND_ROADMAP.md +0 -0
  18. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/OPERATING_PRIORITIES.md +0 -0
  19. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/README.md +0 -0
  20. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/RUN_LIFECYCLE.md +0 -0
  21. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/WORKFLOW_ARCHITECTURE.md +0 -0
  22. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/action-authoring.md +0 -0
  23. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/architecture.md +0 -0
  24. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/node-authoring.md +0 -0
  25. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/testing.md +0 -0
  26. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/__init__.py +0 -0
  27. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/actions/ACTION_STANDARDS.md +0 -0
  28. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/actions/__init__.py +0 -0
  29. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/actions/registry.py +0 -0
  30. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/candidate.py +0 -0
  31. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/checkpoint/__init__.py +0 -0
  32. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/checkpoint/memory.py +0 -0
  33. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/checkpoint/postgres.py +0 -0
  34. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/checkpoint/protocol.py +0 -0
  35. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/compile.py +0 -0
  36. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/composition.py +0 -0
  37. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/FEATURE.md +0 -0
  38. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/__init__.py +0 -0
  39. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/accessor.py +0 -0
  40. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/audit.py +0 -0
  41. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/authoring_gate.py +0 -0
  42. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/availability.py +0 -0
  43. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/directives.py +0 -0
  44. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/edge_routing.py +0 -0
  45. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/envelope.py +0 -0
  46. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/fingerprint.py +0 -0
  47. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/graph_adapter.py +0 -0
  48. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/markers.py +0 -0
  49. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/model.py +0 -0
  50. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/occurrences.py +0 -0
  51. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/partial.py +0 -0
  52. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/pg_emitter.py +0 -0
  53. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/runtime_view.py +0 -0
  54. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/sample.py +0 -0
  55. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/sdk.py +0 -0
  56. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/subscriptions.py +0 -0
  57. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/translate.py +0 -0
  58. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/triggers.py +0 -0
  59. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/well_known.py +0 -0
  60. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/wrappers.py +0 -0
  61. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/contract_kinds.py +0 -0
  62. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/contracts/__init__.py +0 -0
  63. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/contracts/audit.py +0 -0
  64. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/FEATURE.md +0 -0
  65. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/__init__.py +0 -0
  66. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/_registry.py +0 -0
  67. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/db_requirements.py +0 -0
  68. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/definition_store.py +0 -0
  69. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/event_store.py +0 -0
  70. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0020_wf_run_announce.sql +0 -0
  71. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0021_join_semantics.sql +0 -0
  72. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0022_node_data_slot.sql +0 -0
  73. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0023_fanout_identity.sql +0 -0
  74. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0024_definition_variables.sql +0 -0
  75. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0101_run_request_attribution.sql +0 -0
  76. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0102_visibility_and_kind_verdicts.sql +0 -0
  77. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0103_work_item.sql +0 -0
  78. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0104_soft_delete_columns.sql +0 -0
  79. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0105_plan.sql +0 -0
  80. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0106_definition_visibility_internal_default.sql +0 -0
  81. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0107_plan_anchor_integrity.sql +0 -0
  82. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0108_plan_persistence_invariants.sql +0 -0
  83. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0109_node_data_slot_created_by.sql +0 -0
  84. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0110_run_log.sql +0 -0
  85. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0111_awaiting_input_status.sql +0 -0
  86. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0111_event_triggers.sql +0 -0
  87. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0112_definition_io_kind_declaration.sql +0 -0
  88. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0113_definition_published_to_web_and_shown_to.sql +0 -0
  89. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/README.md +0 -0
  90. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0001_wf_initial.sql +0 -0
  91. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0002_wf_queue.sql +0 -0
  92. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0003_wf_node_events.sql +0 -0
  93. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0004_wf_trigger.sql +0 -0
  94. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0005_wf_rls.sql +0 -0
  95. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0006_wf_run_cancelling.sql +0 -0
  96. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0007_wf_run_paused_and_errored.sql +0 -0
  97. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0008_wf_node_outcome_source.sql +0 -0
  98. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0009_wf_run_recovery_limit.sql +0 -0
  99. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0010_wf_idempotency.sql +0 -0
  100. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0011_wf_definition_concurrency_limit.sql +0 -0
  101. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0012_wf_trigger_fire.sql +0 -0
  102. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0013_wf_recovery_audit.sql +0 -0
  103. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0014_wf_node_events_notify.sql +0 -0
  104. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0016_wf_template.sql +0 -0
  105. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0017_wf_hardening.sql +0 -0
  106. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0018_wf_node_events_seq.sql +0 -0
  107. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0019_wf_node_events_drop_check.sql +0 -0
  108. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/README.md +0 -0
  109. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/node_data_slot_store.py +0 -0
  110. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/pool.py +0 -0
  111. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/standalone.py +0 -0
  112. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/store_change.py +0 -0
  113. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/trigger_event_store.py +0 -0
  114. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/trigger_proof.py +0 -0
  115. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/trigger_store.py +0 -0
  116. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/wf_manager.py +0 -0
  117. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/decisions.py +0 -0
  118. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/diagnostics/__init__.py +0 -0
  119. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/diagnostics/compile_validation.py +0 -0
  120. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/dry_run.py +0 -0
  121. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/emptiness.py +0 -0
  122. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/errors.py +0 -0
  123. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/examples/__init__.py +0 -0
  124. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/examples/self_validating_news.py +0 -0
  125. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/FEATURE.md +0 -0
  126. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/__init__.py +0 -0
  127. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/_retry.py +0 -0
  128. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/channels.py +0 -0
  129. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/client_payload.py +0 -0
  130. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/execution.py +0 -0
  131. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/introspect.py +0 -0
  132. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/json_dump.py +0 -0
  133. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/primitives.py +0 -0
  134. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/registry.py +0 -0
  135. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/resume_chain.py +0 -0
  136. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/resume_preflight.py +0 -0
  137. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/run_stop.py +0 -0
  138. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/schema_validation.py +0 -0
  139. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/extract.py +0 -0
  140. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/failure.py +0 -0
  141. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/input_bindings.py +0 -0
  142. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/kind_control_keys.py +0 -0
  143. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/kind_fields.py +0 -0
  144. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/kinds.py +0 -0
  145. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/knobs.py +0 -0
  146. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/mapping_sources.py +0 -0
  147. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/__init__.py +0 -0
  148. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/_sandbox.py +0 -0
  149. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/_template.py +0 -0
  150. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/content_ir/__init__.py +0 -0
  151. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/content_ir/validate.py +0 -0
  152. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/FEATURE.md +0 -0
  153. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/__init__.py +0 -0
  154. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/branch.py +0 -0
  155. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/gather.py +0 -0
  156. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/human_input.py +0 -0
  157. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/loop.py +0 -0
  158. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/map.py +0 -0
  159. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/send.py +0 -0
  160. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/work_queue.py +0 -0
  161. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/work_seed.py +0 -0
  162. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/crypto/__init__.py +0 -0
  163. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/crypto/ops.py +0 -0
  164. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/FEATURE.md +0 -0
  165. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/__init__.py +0 -0
  166. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/assert_.py +0 -0
  167. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/collections.py +0 -0
  168. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/criteria_gate.py +0 -0
  169. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/data_table.py +0 -0
  170. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/filter.py +0 -0
  171. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/flatten.py +0 -0
  172. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/json_io.py +0 -0
  173. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/map_template.py +0 -0
  174. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/merge.py +0 -0
  175. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/pick_omit.py +0 -0
  176. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/read_record.py +0 -0
  177. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/tabular.py +0 -0
  178. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/transform.py +0 -0
  179. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/datetime_/__init__.py +0 -0
  180. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/datetime_/ops.py +0 -0
  181. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/flow/FEATURE.md +0 -0
  182. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/flow/__init__.py +0 -0
  183. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/flow/noop.py +0 -0
  184. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/flow/sleep.py +0 -0
  185. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/flow/throttle.py +0 -0
  186. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/http/__init__.py +0 -0
  187. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/http/_shared.py +0 -0
  188. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/http/custom_api.py +0 -0
  189. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/http/get.py +0 -0
  190. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/http/graphql.py +0 -0
  191. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/http/post.py +0 -0
  192. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/io/__init__.py +0 -0
  193. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/io/user_input.py +0 -0
  194. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/log/FEATURE.md +0 -0
  195. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/log/__init__.py +0 -0
  196. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/log/record.py +0 -0
  197. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/math_/__init__.py +0 -0
  198. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/math_/evaluate.py +0 -0
  199. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/output/FEATURE.md +0 -0
  200. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/output/__init__.py +0 -0
  201. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/output/to_frontend.py +0 -0
  202. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/pipe/FEATURE.md +0 -0
  203. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/pipe/__init__.py +0 -0
  204. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/pipe/contract.py +0 -0
  205. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/pipe/step.py +0 -0
  206. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/plan/__init__.py +0 -0
  207. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/plan/step.py +0 -0
  208. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/subgraph/__init__.py +0 -0
  209. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/subgraph/call.py +0 -0
  210. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/text/__init__.py +0 -0
  211. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/text/custom_extract.py +0 -0
  212. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/text/json_path.py +0 -0
  213. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/text/manipulate.py +0 -0
  214. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/text/regex.py +0 -0
  215. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/text/render_list.py +0 -0
  216. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/tool/__init__.py +0 -0
  217. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/tool/call.py +0 -0
  218. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/observability/__init__.py +0 -0
  219. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/patch.py +0 -0
  220. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/paths.py +0 -0
  221. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/py.typed +0 -0
  222. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/records.py +0 -0
  223. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/references.py +0 -0
  224. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/shape_probe.py +0 -0
  225. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/table_kind_mapping.json +0 -0
  226. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/table_kinds.py +0 -0
  227. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/__init__.py +0 -0
  228. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/canonical_payloads.py +0 -0
  229. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/channel.py +0 -0
  230. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/compiled.py +0 -0
  231. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/context.py +0 -0
  232. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/definition.py +0 -0
  233. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/deliverables.py +0 -0
  234. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/events.py +0 -0
  235. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/handle.py +0 -0
  236. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/identity_inputs.py +0 -0
  237. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/input_surface.py +0 -0
  238. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/primitives.py +0 -0
  239. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/result.py +0 -0
  240. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/run.py +0 -0
  241. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/send.py +0 -0
  242. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/usl.py +0 -0
  243. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/value_objects.py +0 -0
  244. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/variables.py +0 -0
  245. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/validation.py +0 -0
  246. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workers/FEATURE.md +0 -0
  247. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workers/__init__.py +0 -0
  248. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workers/cron_watcher.py +0 -0
  249. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workers/event_watcher.py +0 -0
  250. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workers/queue.py +0 -0
  251. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workers/runner.py +0 -0
  252. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workers/sleep_wake.py +0 -0
  253. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workset.py +0 -0
  254. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/__init__.py +0 -0
  255. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/_db_guard.py +0 -0
  256. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/_fixtures.py +0 -0
  257. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/ci/00_supabase_shim.sql +0 -0
  258. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/ci/10_canonical_reorg_shim.sql +0 -0
  259. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/ci/bootstrap_test_db.sh +0 -0
  260. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/conftest.py +0 -0
  261. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/fixtures/kind_control_keys_golden.json +0 -0
  262. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/fixtures/kind_registry_variants.json +0 -0
  263. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/fixtures/table_kind_golden.json +0 -0
  264. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/fixtures/w59_empty_prescriber_output.json +0 -0
  265. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/fixtures/watson_rulebook_ids.json +0 -0
  266. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/judge/__init__.py +0 -0
  267. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/judge/test_self_validating_news_e2e.py +0 -0
  268. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/level2/__init__.py +0 -0
  269. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/level2/test_anthropic_provider.py +0 -0
  270. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_a_bound_graph_hash_moves_with_content_only.py +0 -0
  271. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_a_condition_stop_is_said_at_run_level.py +0 -0
  272. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_a_leg_knows_whether_it_ran_fresh.py +0 -0
  273. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_a_started_leg_keeps_the_queues_guarantees.py +0 -0
  274. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_a_step_that_was_answered_is_not_called_skipped.py +0 -0
  275. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_action_output_handles.py +0 -0
  276. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_actions.py +0 -0
  277. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_adversarial_engine_core.py +0 -0
  278. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_adversarial_kind_routing.py +0 -0
  279. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_adversarial_partial_wire.py +0 -0
  280. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_adversarial_registry.py +0 -0
  281. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_authoring_gate.py +0 -0
  282. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_back_edges.py +0 -0
  283. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_barrier_removed.py +0 -0
  284. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_candidate_node_gate.py +0 -0
  285. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_channel.py +0 -0
  286. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_channels_reducers.py +0 -0
  287. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_checkpoint_postgres_org_write.py +0 -0
  288. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_checkpoint_summaries.py +0 -0
  289. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_checkpoint_write_budget.py +0 -0
  290. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_client_bound_error_redaction.py +0 -0
  291. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_config_output_handles_normalized.py +0 -0
  292. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_audit.py +0 -0
  293. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_envelope.py +0 -0
  294. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_markers.py +0 -0
  295. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_model.py +0 -0
  296. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_partial.py +0 -0
  297. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_pg_emitter.py +0 -0
  298. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_runtime_view.py +0 -0
  299. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_sample.py +0 -0
  300. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_stamped_marker_equality.py +0 -0
  301. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_translate.py +0 -0
  302. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_context_propagation.py +0 -0
  303. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_contract_artifact_eviction.py +0 -0
  304. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_contract_audit.py +0 -0
  305. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_contract_kinds.py +0 -0
  306. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_criteria_gate.py +0 -0
  307. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_data_collections.py +0 -0
  308. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_data_nodes.py +0 -0
  309. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_db_guard.py +0 -0
  310. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_decision_attribution.py +0 -0
  311. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_definition.py +0 -0
  312. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_definition_store_archive_filter.py +0 -0
  313. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_definition_store_list_skip.py +0 -0
  314. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_definition_store_publish_is_a_change.py +0 -0
  315. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_definition_store_save_draft_author.py +0 -0
  316. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_definition_store_version_load.py +0 -0
  317. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_deliverables_rule.py +0 -0
  318. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_dry_run.py +0 -0
  319. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_dry_run_source_input.py +0 -0
  320. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_dynamic_topology_guards.py +0 -0
  321. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_edge_field_selection.py +0 -0
  322. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_empty_deliverable_is_named.py +0 -0
  323. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_empty_fanout.py +0 -0
  324. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_end_to_end.py +0 -0
  325. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_event_store_error_redaction.py +0 -0
  326. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_event_triggers.py +0 -0
  327. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_every_dispatcher_is_seen_by_lineage.py +0 -0
  328. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_extract.py +0 -0
  329. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_failure.py +0 -0
  330. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_failure_is_not_the_users_words.py +0 -0
  331. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_flow_nodes.py +0 -0
  332. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_gather_ai_projection.py +0 -0
  333. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_http_nodes.py +0 -0
  334. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_http_nodes_refuse_internal_addresses.py +0 -0
  335. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_human_answer_kind_declaration.py +0 -0
  336. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_human_input_bare_context.py +0 -0
  337. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_human_input_pause_round_trip.py +0 -0
  338. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_human_input_presentation.py +0 -0
  339. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_identity_input_broadcast.py +0 -0
  340. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_inert_predicate_guard.py +0 -0
  341. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_ingestion_gate.py +0 -0
  342. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_input_gate_failure_is_routable.py +0 -0
  343. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_input_surface.py +0 -0
  344. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_input_surface_variant_registry.py +0 -0
  345. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_invocation_budget.py +0 -0
  346. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_io_nodes.py +0 -0
  347. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_json_dump.py +0 -0
  348. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_accessor.py +0 -0
  349. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_availability.py +0 -0
  350. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_control_keys.py +0 -0
  351. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_enforcement.py +0 -0
  352. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_fields.py +0 -0
  353. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_native_node_library.py +0 -0
  354. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_routing.py +0 -0
  355. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_sdk.py +0 -0
  356. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kinds.py +0 -0
  357. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_knobs.py +0 -0
  358. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_list_include_ids.py +0 -0
  359. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_list_shaping_nodes.py +0 -0
  360. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_live_injection.py +0 -0
  361. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_log_record_node.py +0 -0
  362. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_loop_scale.py +0 -0
  363. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_map_payload_template.py +0 -0
  364. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_mapping_source_sigils.py +0 -0
  365. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_multi_dispatch_fanin.py +0 -0
  366. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_cost_event.py +0 -0
  367. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_data_slot_store.py +0 -0
  368. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_data_slot_validation.py +0 -0
  369. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_emitter_settle.py +0 -0
  370. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_error_kind.py +0 -0
  371. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_input_capture.py +0 -0
  372. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_result_envelope.py +0 -0
  373. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_spec.py +0 -0
  374. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_outage_path_is_not_an_agent_choice.py +0 -0
  375. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_output_channel_binding.py +0 -0
  376. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_output_kind_stamping.py +0 -0
  377. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_patch.py +0 -0
  378. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_pause_cancel_and_recovery.py +0 -0
  379. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_pipe_step.py +0 -0
  380. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_plan_identity_consistency.py +0 -0
  381. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_plan_step.py +0 -0
  382. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_postgres_checkpointer.py +0 -0
  383. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_postgres_workset_store.py +0 -0
  384. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_predicate_preview_per_item.py +0 -0
  385. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_primitives.py +0 -0
  386. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_public_media_scope.py +0 -0
  387. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_read_record_node.py +0 -0
  388. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_references.py +0 -0
  389. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_registry.py +0 -0
  390. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_required_inputs_gate.py +0 -0
  391. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_resume_payload_folding.py +0 -0
  392. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_resume_preflight_soundness.py +0 -0
  393. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_run_conversation_identity.py +0 -0
  394. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_run_store_control.py +0 -0
  395. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_run_variables.py +0 -0
  396. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_conditional_edge.py +0 -0
  397. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_config_override.py +0 -0
  398. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_events.py +0 -0
  399. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_failsoft.py +0 -0
  400. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_failure_cost_settlement.py +0 -0
  401. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_fanout_identity.py +0 -0
  402. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_fork_to_new_run.py +0 -0
  403. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_interrupt_siblings.py +0 -0
  404. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_join_hardening.py +0 -0
  405. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_joins.py +0 -0
  406. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_loop_contract.py +0 -0
  407. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_mock_response.py +0 -0
  408. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_node_retry_override.py +0 -0
  409. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_node_timeout.py +0 -0
  410. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_retry_policy.py +0 -0
  411. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_skip_edge_ids.py +0 -0
  412. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_step_mode.py +0 -0
  413. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_step_wall_clock.py +0 -0
  414. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_self_validating_news.py +0 -0
  415. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_send_unwired_items_is_loud.py +0 -0
  416. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_store_event_source.py +0 -0
  417. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_subgraph_call.py +0 -0
  418. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_table_kind_round_trip.py +0 -0
  419. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_template_path_shape_gate.py +0 -0
  420. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_text_nodes.py +0 -0
  421. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_tool_loop_stall_is_a_cause.py +0 -0
  422. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_transform_output_shape.py +0 -0
  423. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_triggers_and_observability.py +0 -0
  424. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_user_input_filled_from_data.py +0 -0
  425. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_utility_nodes.py +0 -0
  426. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_validation_expression_sandbox.py +0 -0
  427. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_validation_fanned_edge_needs_items.py +0 -0
  428. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_validation_hints.py +0 -0
  429. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_validation_s4.py +0 -0
  430. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_workers.py +0 -0
  431. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_workset.py +0 -0
  432. {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_workset_chaos.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: matrx-graph
3
- Version: 0.2.259
3
+ Version: 0.2.261
4
4
  Summary: Channel-based, super-step workflow orchestration engine for the Matrx ecosystem
5
5
  Project-URL: Homepage, https://github.com/AI-Matrix-Engine/aidream-current
6
6
  Project-URL: Repository, https://github.com/AI-Matrix-Engine/aidream-current
@@ -270,6 +270,7 @@ def register_node(
270
270
  launches_nodes: bool = False,
271
271
  values_are: Literal["deterministic", "outside", "ai"] = "ai",
272
272
  extra_output_handles: tuple[str, ...] = (),
273
+ output_in_run_row: bool = True,
273
274
  node_registry: NodeRegistry | None = None,
274
275
  action_registry: ActionRegistry | None = None,
275
276
  overwrite: bool = False,
@@ -337,6 +338,7 @@ def register_node(
337
338
  launches_nodes=launches_nodes,
338
339
  values_are=values_are,
339
340
  extra_output_handles=extra_output_handles,
341
+ output_in_run_row=output_in_run_row,
340
342
  )
341
343
  adapter = _ActionExecutor(spec=spec, fn=fn, admin_only=admin_only)
342
344
  (node_registry or default_registry()).register(adapter, overwrite=overwrite)
@@ -125,6 +125,7 @@ def build_action_node_spec(
125
125
  launches_nodes: bool = False,
126
126
  extra_output_handles: tuple[str, ...] = (),
127
127
  values_are: str = "ai",
128
+ output_in_run_row: bool = True,
128
129
  ) -> NodeSpec:
129
130
  """Build the NodeSpec that represents this action in the graph engine.
130
131
 
@@ -180,6 +181,7 @@ def build_action_node_spec(
180
181
  dynamic_output=dynamic_output,
181
182
  launches_nodes=launches_nodes,
182
183
  values_are=values_are,
184
+ output_in_run_row=output_in_run_row,
183
185
  )
184
186
 
185
187
 
@@ -907,6 +907,7 @@ BEGIN
907
907
 
908
908
  CREATE TABLE workflow.work_item (
909
909
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
910
+ organization_id UUID NOT NULL,
910
911
  run_id UUID NOT NULL REFERENCES workflow.run(id) ON DELETE CASCADE,
911
912
  set_name TEXT NOT NULL DEFAULT 'default',
912
913
  seq BIGINT GENERATED BY DEFAULT AS IDENTITY,
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import json
4
+ import logging
4
5
  from collections.abc import Sequence
5
6
  from datetime import UTC, datetime
6
7
  from typing import Any
@@ -13,6 +14,8 @@ from matrx_graph.errors import ExecutionError
13
14
  from matrx_graph.failure import RunFailure, failure_from_text
14
15
  from matrx_graph.types.primitives import RunControlStatus, RunStatus
15
16
 
17
+ logger = logging.getLogger(__name__)
18
+
16
19
  RECOVERABLE_STATUSES: tuple[str, ...] = ("errored", "paused", "interrupted", "awaiting_input")
17
20
  """Statuses the resume/recovery APIs may claim. Parked, awaiting a user.
18
21
  ``awaiting_input`` (INPUT-SURFACE.md park-not-die) is a start-time park —
@@ -843,6 +846,52 @@ class RunStore:
843
846
  failure: RunFailure | None = None,
844
847
  cancel_reason: str | None = None,
845
848
  stopped: dict[str, Any] | None = None,
849
+ ) -> bool:
850
+ """The terminal write, which never leaves a run "running" because the write itself failed.
851
+
852
+ When the write raises (a statement timeout on a huge output, a dropped connection), the run
853
+ is ended FAILED with a small error naming the write that failed and no output payload, then
854
+ the original error is re-raised for the caller to log. 2026-10-05: run 70601b15 finished all
855
+ its steps, its 11 MB final write timed out, every caller only logged it, and the run read
856
+ "running" forever."""
857
+ try:
858
+ return await self._apply_result(
859
+ run_id, status=status, steps_executed=steps_executed, output=output, interrupt=interrupt,
860
+ error=error, last_checkpoint_id=last_checkpoint_id, failure=failure,
861
+ cancel_reason=cancel_reason, stopped=stopped,
862
+ )
863
+ except Exception as exc:
864
+ if status is RunStatus.FAILED:
865
+ raise
866
+ try:
867
+ await self.mark_failed(
868
+ run_id,
869
+ error={
870
+ "cause": "final_write_failed",
871
+ "message": "The run finished its steps, but saving its final result failed, so it is "
872
+ "marked failed instead of staying 'running'. Its steps' results are kept.",
873
+ "technical": f"{type(exc).__name__}: {str(exc)[:500]} (intended status: "
874
+ f"{getattr(status, 'value', status)})",
875
+ },
876
+ steps_executed=steps_executed,
877
+ )
878
+ except Exception: # noqa: BLE001 — the reaper is the last backstop; the original error re-raises
879
+ logger.exception("[wf:%s] fallback failed-status write also failed", run_id[:8])
880
+ raise
881
+
882
+ async def _apply_result(
883
+ self,
884
+ run_id: str,
885
+ *,
886
+ status: RunStatus,
887
+ steps_executed: int,
888
+ output: dict[str, Any] | None,
889
+ interrupt: dict[str, Any] | None,
890
+ error: str | None,
891
+ last_checkpoint_id: str | None,
892
+ failure: RunFailure | None = None,
893
+ cancel_reason: str | None = None,
894
+ stopped: dict[str, Any] | None = None,
846
895
  ) -> bool:
847
896
  """Convenience: translate a scheduler RunResult into one workflow.run update.
848
897
 
@@ -257,6 +257,12 @@ def _reset_app_context(token: Any) -> None:
257
257
  pass
258
258
 
259
259
 
260
+ def elided_output_marker(node_id: str, step: int) -> dict[str, Any]:
261
+ """What ``workflow.run.output`` holds for a step that keeps its output out of the run row."""
262
+ return {"__kind": "node_output_elided", "node_id": node_id, "step": step,
263
+ "where": "workflow.node_outcome"}
264
+
265
+
260
266
  @dataclass(slots=True)
261
267
  class Invocation:
262
268
  """One scheduled call to a node executor within a super-step.
@@ -1458,6 +1464,11 @@ class Scheduler:
1458
1464
  # Capture outputs for return value
1459
1465
  for r in results:
1460
1466
  if r.output is not None:
1467
+ if not self._output_in_run_row(r.invocation.node_id):
1468
+ last_outputs[r.invocation.node_id] = elided_output_marker(
1469
+ r.invocation.node_id, step
1470
+ )
1471
+ continue
1461
1472
  last_outputs[r.invocation.node_id] = (
1462
1473
  r.settled_dump
1463
1474
  if r.settled_dump is not None
@@ -1822,6 +1833,16 @@ class Scheduler:
1822
1833
  stopped=declared_run_stop(self.graph, last_outputs),
1823
1834
  )
1824
1835
 
1836
+ def _output_in_run_row(self, node_id: str) -> bool:
1837
+ """False when the node's spec keeps its output out of the run row (``NodeSpec.output_in_run_row``)."""
1838
+ node = self.graph.nodes.get(node_id)
1839
+ if node is None:
1840
+ return True
1841
+ try:
1842
+ return bool(getattr(self.registry.get(node.spec_type).spec, "output_in_run_row", True))
1843
+ except Exception: # noqa: BLE001 — an unknown spec keeps today's behavior
1844
+ return True
1845
+
1825
1846
  async def _run_step(
1826
1847
  self,
1827
1848
  run_id: str,
@@ -122,6 +122,12 @@ class NodeSpec(BaseModel, Generic[InputT, OutputT, ConfigT]):
122
122
  # as "anything may still fire" and never refuses on reachability; a census
123
123
  # test fails any executor that calls ``ctx.send`` without declaring it.
124
124
  launches_nodes: bool = False
125
+ # RUN-ROW OUTPUT (2026-10-05). False when this step's output is a large working document that
126
+ # the NEXT step consumes (the news monitor's run document, ~2 MB). The output is still persisted
127
+ # in full on the step's own ``workflow.node_outcome`` row and still flows to the next step; only
128
+ # the ``workflow.run.output`` aggregate gets a small ``node_output_elided`` marker naming where it
129
+ # is. Without it a 20-step run wrote ~11 MB into one row and its final write timed out.
130
+ output_in_run_row: bool = True
125
131
  default_join_policy: Literal["all", "any"] | None = Field(
126
132
  default=None,
127
133
  description=(
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "matrx-graph"
7
- version = "0.2.259"
7
+ version = "0.2.261"
8
8
  description = "Channel-based, super-step workflow orchestration engine for the Matrx ecosystem"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -0,0 +1,46 @@
1
+ """A run whose final write fails ends FAILED, never "running" forever.
2
+
3
+ 2026-10-05: run 70601b15 finished all 19 steps; its 11 MB completion write timed out; every caller of
4
+ ``RunStore.apply_result`` only logged the error, so the run read "running" with no end. The terminal
5
+ write now falls back to a small FAILED write naming what failed, then re-raises for the caller.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from typing import Any
11
+
12
+ import pytest
13
+
14
+ from matrx_graph.types.primitives import RunStatus
15
+
16
+ RUN = "6f1e2d3c-4b5a-4968-8776-655443322111"
17
+
18
+
19
+ async def test_a_timed_out_completion_write_ends_the_run_failed(monkeypatch) -> None:
20
+ from matrx_graph.db import run_store as module
21
+ from matrx_graph.db.run_store import RunStore
22
+
23
+ writes: list[dict[str, Any]] = []
24
+
25
+ class _Result:
26
+ rows_affected = 1
27
+ updated_rows: list = []
28
+
29
+ class _Model:
30
+ @staticmethod
31
+ async def update_where(filters, **values):
32
+ if values.get("status") == "completed":
33
+ raise TimeoutError("statement timeout writing an 11 MB output")
34
+ writes.append(values)
35
+ return _Result()
36
+
37
+ monkeypatch.setattr(module, "get_model", lambda _name: _Model)
38
+ with pytest.raises(TimeoutError):
39
+ await RunStore().apply_result(
40
+ RUN, status=RunStatus.COMPLETED, steps_executed=19, output={"deliver": {"x": 1}},
41
+ interrupt=None, error=None, last_checkpoint_id=None,
42
+ )
43
+ assert writes and writes[-1]["status"] == "failed", writes
44
+ error = writes[-1]["error"]
45
+ assert error.get("cause") == "final_write_failed", error
46
+ assert "output" not in writes[-1], "the fallback must not carry the payload that failed"
@@ -0,0 +1,77 @@
1
+ """A step can keep its large output out of the run row (``NodeSpec.output_in_run_row=False``).
2
+
3
+ 2026-10-05: the news monitor's 20 steps each output its ~2 MB run document; the run row's ``output``
4
+ (and the ``run_completed`` event) is every step's output merged, so one run wrote ~11 MB into one row
5
+ and its final write timed out, leaving the run "running". A step that declares
6
+ ``output_in_run_row=False`` still hands its full output to the next step (and keeps it on its own
7
+ node_outcome row), while the run's ``last_outputs`` holds only a small marker naming where it is.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from pydantic import BaseModel, ConfigDict
13
+
14
+ from matrx_graph import (
15
+ ActionRegistry,
16
+ ActionTier,
17
+ Definition,
18
+ MemoryCheckpointer,
19
+ NodeCategory,
20
+ NodeRegistry,
21
+ RunStatus,
22
+ Scheduler,
23
+ compile_graph,
24
+ register_node,
25
+ )
26
+ from matrx_graph.types.result import NodeResult, success
27
+ from tests._fixtures import make_app_context
28
+
29
+ BIG = "x" * 200_000
30
+
31
+
32
+ class _In(BaseModel):
33
+ model_config = ConfigDict(extra="allow")
34
+
35
+
36
+ class _Doc(BaseModel):
37
+ doc: str = ""
38
+
39
+
40
+ class _Size(BaseModel):
41
+ received: int = 0
42
+
43
+
44
+ def _registry() -> NodeRegistry:
45
+ nreg, areg = NodeRegistry(), ActionRegistry()
46
+
47
+ @register_node(name="test.big_doc", category=NodeCategory.DATA, determinism=ActionTier.PURE,
48
+ input_schema=_In, output_schema=_Doc, output_in_run_row=False,
49
+ node_registry=nreg, action_registry=areg)
50
+ async def _big(_ctx, inputs: _In) -> NodeResult[_Doc]:
51
+ return success(_Doc(doc=BIG))
52
+
53
+ @register_node(name="test.reads_doc", category=NodeCategory.DATA, determinism=ActionTier.PURE,
54
+ input_schema=_In, output_schema=_Size, node_registry=nreg, action_registry=areg)
55
+ async def _reads(_ctx, inputs: _In) -> NodeResult[_Size]:
56
+ return success(_Size(received=len(getattr(inputs, "doc", "") or "")))
57
+
58
+ return nreg
59
+
60
+
61
+ async def test_a_large_step_output_reaches_the_next_step_but_not_the_run_row() -> None:
62
+ nreg = _registry()
63
+ definition = Definition.model_validate({
64
+ "nodes": [
65
+ {"id": "a", "type": "test.big_doc", "position": {"x": 0, "y": 0}, "data": {}},
66
+ {"id": "b", "type": "test.reads_doc", "position": {"x": 100, "y": 0}, "data": {}},
67
+ ],
68
+ "edges": [{"id": "e", "source": "a", "target": "b", "data": {"kind": "data"}}],
69
+ })
70
+ scheduler = Scheduler(compile_graph(definition, registry=nreg), MemoryCheckpointer(), make_app_context(),
71
+ registry=nreg)
72
+ result = await scheduler.run(run_id="run-large-step", inputs={})
73
+ assert result.status is RunStatus.COMPLETED
74
+ assert result.last_outputs["b"]["received"] == len(BIG), "the next step must still get the full output"
75
+ marker = result.last_outputs["a"]
76
+ assert marker.get("__kind") == "node_output_elided" and marker.get("node_id") == "a", marker
77
+ assert len(str(result.last_outputs)) < 2_000
@@ -23,7 +23,7 @@ MODEL_TABLES = {
23
23
  }
24
24
 
25
25
 
26
- def _baseline_columns(table: str) -> set[str]:
26
+ def _baseline_table_body(table: str) -> str:
27
27
  sql = BASELINE.read_text(encoding="utf-8")
28
28
  match = re.search(
29
29
  rf"CREATE TABLE workflow\.{table} \(\n(?P<body>.*?)\n \);",
@@ -31,8 +31,12 @@ def _baseline_columns(table: str) -> set[str]:
31
31
  flags=re.DOTALL,
32
32
  )
33
33
  assert match is not None, f"workflow.{table} missing from standalone baseline"
34
+ return match.group("body")
35
+
36
+
37
+ def _baseline_columns(table: str) -> set[str]:
34
38
  columns: set[str] = set()
35
- for line in match.group("body").splitlines():
39
+ for line in _baseline_table_body(table).splitlines():
36
40
  column_match = re.match(r"^ {8}([a-z][a-z0-9_]*)\s+", line)
37
41
  if column_match is not None:
38
42
  columns.add(column_match.group(1))
@@ -70,3 +74,13 @@ def test_node_data_slot_uses_canonical_created_by_owner() -> None:
70
74
  assert "created_by" in fields
71
75
  assert fields["created_by"].null is False
72
76
  assert "user_id" not in fields
77
+
78
+
79
+ def test_work_item_standalone_schema_requires_organization_context() -> None:
80
+ fields = build_standalone_models("standalone_work_item_organization_test")["WfWorkItem"]._fields
81
+ assert fields["organization_id"].null is False
82
+ assert re.search(
83
+ r"^ organization_id\s+UUID NOT NULL,",
84
+ _baseline_table_body("work_item"),
85
+ flags=re.MULTILINE,
86
+ )
File without changes
File without changes
File without changes
File without changes