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.
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/PKG-INFO +1 -1
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/actions/decorator.py +2 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/actions/spec.py +2 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0100_baseline_post_reorg.sql +1 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/run_store.py +49 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/scheduler.py +21 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/node_spec.py +6 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/pyproject.toml +1 -1
- matrx_graph-0.2.261/tests/test_a_failed_final_write_ends_the_run_failed.py +46 -0
- matrx_graph-0.2.261/tests/test_a_large_step_output_stays_out_of_the_run_row.py +77 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_standalone_db_models.py +16 -2
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/.gitignore +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/AGENTS.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/CLAUDE.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/README.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/ENGINE_SPEC.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/GAPS_AND_ROADMAP.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/OPERATING_PRIORITIES.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/README.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/RUN_LIFECYCLE.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/WORKFLOW_ARCHITECTURE.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/action-authoring.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/architecture.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/node-authoring.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/docs/testing.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/actions/ACTION_STANDARDS.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/actions/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/actions/registry.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/candidate.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/checkpoint/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/checkpoint/memory.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/checkpoint/postgres.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/checkpoint/protocol.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/compile.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/composition.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/FEATURE.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/accessor.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/audit.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/authoring_gate.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/availability.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/directives.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/edge_routing.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/envelope.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/fingerprint.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/graph_adapter.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/markers.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/model.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/occurrences.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/partial.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/pg_emitter.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/runtime_view.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/sample.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/sdk.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/subscriptions.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/translate.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/triggers.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/well_known.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/content_ir/wrappers.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/contract_kinds.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/contracts/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/contracts/audit.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/FEATURE.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/_registry.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/db_requirements.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/definition_store.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/event_store.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0020_wf_run_announce.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0021_join_semantics.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0022_node_data_slot.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0023_fanout_identity.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0024_definition_variables.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0101_run_request_attribution.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0102_visibility_and_kind_verdicts.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0103_work_item.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0104_soft_delete_columns.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0105_plan.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0106_definition_visibility_internal_default.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0107_plan_anchor_integrity.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0108_plan_persistence_invariants.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0109_node_data_slot_created_by.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0110_run_log.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0111_awaiting_input_status.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0111_event_triggers.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0112_definition_io_kind_declaration.sql +0 -0
- {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
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/README.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0001_wf_initial.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0002_wf_queue.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0003_wf_node_events.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0004_wf_trigger.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0005_wf_rls.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0006_wf_run_cancelling.sql +0 -0
- {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
- {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
- {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
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0010_wf_idempotency.sql +0 -0
- {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
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0012_wf_trigger_fire.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0013_wf_recovery_audit.sql +0 -0
- {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
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0016_wf_template.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/0017_wf_hardening.sql +0 -0
- {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
- {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
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/README.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/node_data_slot_store.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/pool.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/standalone.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/store_change.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/trigger_event_store.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/trigger_proof.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/trigger_store.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/wf_manager.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/decisions.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/diagnostics/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/diagnostics/compile_validation.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/dry_run.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/emptiness.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/errors.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/examples/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/examples/self_validating_news.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/FEATURE.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/_retry.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/channels.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/client_payload.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/execution.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/introspect.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/json_dump.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/primitives.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/registry.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/resume_chain.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/resume_preflight.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/run_stop.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/executor/schema_validation.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/extract.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/failure.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/input_bindings.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/kind_control_keys.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/kind_fields.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/kinds.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/knobs.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/mapping_sources.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/_sandbox.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/_template.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/content_ir/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/content_ir/validate.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/FEATURE.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/branch.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/gather.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/human_input.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/loop.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/map.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/send.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/work_queue.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/control/work_seed.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/crypto/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/crypto/ops.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/FEATURE.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/assert_.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/collections.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/criteria_gate.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/data_table.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/filter.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/flatten.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/json_io.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/map_template.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/merge.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/pick_omit.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/read_record.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/tabular.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/data/transform.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/datetime_/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/datetime_/ops.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/flow/FEATURE.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/flow/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/flow/noop.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/flow/sleep.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/flow/throttle.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/http/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/http/_shared.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/http/custom_api.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/http/get.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/http/graphql.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/http/post.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/io/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/io/user_input.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/log/FEATURE.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/log/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/log/record.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/math_/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/math_/evaluate.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/output/FEATURE.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/output/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/output/to_frontend.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/pipe/FEATURE.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/pipe/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/pipe/contract.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/pipe/step.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/plan/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/plan/step.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/subgraph/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/subgraph/call.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/text/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/text/custom_extract.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/text/json_path.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/text/manipulate.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/text/regex.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/text/render_list.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/tool/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/nodes/tool/call.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/observability/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/patch.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/paths.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/py.typed +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/records.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/references.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/shape_probe.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/table_kind_mapping.json +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/table_kinds.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/canonical_payloads.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/channel.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/compiled.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/context.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/definition.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/deliverables.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/events.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/handle.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/identity_inputs.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/input_surface.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/primitives.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/result.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/run.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/send.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/usl.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/value_objects.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/types/variables.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/validation.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workers/FEATURE.md +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workers/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workers/cron_watcher.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workers/event_watcher.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workers/queue.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workers/runner.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workers/sleep_wake.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/workset.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/_db_guard.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/_fixtures.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/ci/00_supabase_shim.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/ci/10_canonical_reorg_shim.sql +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/ci/bootstrap_test_db.sh +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/conftest.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/fixtures/kind_control_keys_golden.json +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/fixtures/kind_registry_variants.json +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/fixtures/table_kind_golden.json +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/fixtures/w59_empty_prescriber_output.json +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/fixtures/watson_rulebook_ids.json +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/judge/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/judge/test_self_validating_news_e2e.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/level2/__init__.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/level2/test_anthropic_provider.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_a_bound_graph_hash_moves_with_content_only.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_a_condition_stop_is_said_at_run_level.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_a_leg_knows_whether_it_ran_fresh.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_a_started_leg_keeps_the_queues_guarantees.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_a_step_that_was_answered_is_not_called_skipped.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_action_output_handles.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_actions.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_adversarial_engine_core.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_adversarial_kind_routing.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_adversarial_partial_wire.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_adversarial_registry.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_authoring_gate.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_back_edges.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_barrier_removed.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_candidate_node_gate.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_channel.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_channels_reducers.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_checkpoint_postgres_org_write.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_checkpoint_summaries.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_checkpoint_write_budget.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_client_bound_error_redaction.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_config_output_handles_normalized.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_audit.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_envelope.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_markers.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_model.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_partial.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_pg_emitter.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_runtime_view.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_sample.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_stamped_marker_equality.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_content_ir_translate.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_context_propagation.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_contract_artifact_eviction.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_contract_audit.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_contract_kinds.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_criteria_gate.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_data_collections.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_data_nodes.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_db_guard.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_decision_attribution.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_definition.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_definition_store_archive_filter.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_definition_store_list_skip.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_definition_store_publish_is_a_change.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_definition_store_save_draft_author.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_definition_store_version_load.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_deliverables_rule.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_dry_run.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_dry_run_source_input.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_dynamic_topology_guards.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_edge_field_selection.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_empty_deliverable_is_named.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_empty_fanout.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_end_to_end.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_event_store_error_redaction.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_event_triggers.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_every_dispatcher_is_seen_by_lineage.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_extract.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_failure.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_failure_is_not_the_users_words.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_flow_nodes.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_gather_ai_projection.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_http_nodes.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_http_nodes_refuse_internal_addresses.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_human_answer_kind_declaration.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_human_input_bare_context.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_human_input_pause_round_trip.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_human_input_presentation.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_identity_input_broadcast.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_inert_predicate_guard.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_ingestion_gate.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_input_gate_failure_is_routable.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_input_surface.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_input_surface_variant_registry.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_invocation_budget.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_io_nodes.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_json_dump.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_accessor.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_availability.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_control_keys.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_enforcement.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_fields.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_native_node_library.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_routing.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kind_sdk.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_kinds.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_knobs.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_list_include_ids.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_list_shaping_nodes.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_live_injection.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_log_record_node.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_loop_scale.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_map_payload_template.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_mapping_source_sigils.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_multi_dispatch_fanin.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_cost_event.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_data_slot_store.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_data_slot_validation.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_emitter_settle.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_error_kind.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_input_capture.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_result_envelope.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_node_spec.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_outage_path_is_not_an_agent_choice.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_output_channel_binding.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_output_kind_stamping.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_patch.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_pause_cancel_and_recovery.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_pipe_step.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_plan_identity_consistency.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_plan_step.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_postgres_checkpointer.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_postgres_workset_store.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_predicate_preview_per_item.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_primitives.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_public_media_scope.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_read_record_node.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_references.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_registry.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_required_inputs_gate.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_resume_payload_folding.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_resume_preflight_soundness.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_run_conversation_identity.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_run_store_control.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_run_variables.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_conditional_edge.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_config_override.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_events.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_failsoft.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_failure_cost_settlement.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_fanout_identity.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_fork_to_new_run.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_interrupt_siblings.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_join_hardening.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_joins.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_loop_contract.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_mock_response.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_node_retry_override.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_node_timeout.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_retry_policy.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_skip_edge_ids.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_step_mode.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_scheduler_step_wall_clock.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_self_validating_news.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_send_unwired_items_is_loud.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_store_event_source.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_subgraph_call.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_table_kind_round_trip.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_template_path_shape_gate.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_text_nodes.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_tool_loop_stall_is_a_cause.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_transform_output_shape.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_triggers_and_observability.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_user_input_filled_from_data.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_utility_nodes.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_validation_expression_sandbox.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_validation_fanned_edge_needs_items.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_validation_hints.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_validation_s4.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_workers.py +0 -0
- {matrx_graph-0.2.259 → matrx_graph-0.2.261}/tests/test_workset.py +0 -0
- {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.
|
|
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
|
|
{matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0100_baseline_post_reorg.sql
RENAMED
|
@@ -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=(
|
|
@@ -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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0020_wf_run_announce.sql
RENAMED
|
File without changes
|
{matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0021_join_semantics.sql
RENAMED
|
File without changes
|
{matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0022_node_data_slot.sql
RENAMED
|
File without changes
|
{matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0023_fanout_identity.sql
RENAMED
|
File without changes
|
{matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0024_definition_variables.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0104_soft_delete_columns.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0107_plan_anchor_integrity.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0111_awaiting_input_status.sql
RENAMED
|
File without changes
|
{matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/0111_event_triggers.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matrx_graph-0.2.259 → matrx_graph-0.2.261}/matrx_graph/db/migrations/legacy_pre_reorg/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|