AbstractRuntime 0.16.0__tar.gz → 0.17.0__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 (896) hide show
  1. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/CHANGELOG.md +49 -0
  2. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/PKG-INFO +23 -7
  3. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/README.md +19 -3
  4. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0002_execution_modes_local_remote_hybrid.md +1 -0
  5. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/api.md +5 -3
  6. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/architecture.md +6 -0
  7. abstractruntime-0.17.0/docs/backlog/proposed/0865_model_loaded_ledger_event.md +27 -0
  8. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/getting-started.md +1 -1
  9. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/integrations/abstractcore.md +2 -2
  10. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/replay.md +5 -2
  11. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/troubleshooting.md +16 -1
  12. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/workflow-bundles.md +12 -0
  13. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/llms-full.txt +66 -12
  14. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/llms.txt +2 -2
  15. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/pyproject.toml +5 -4
  16. abstractruntime-0.17.0/release-notes.md +46 -0
  17. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/scripts/changelog.py +63 -1
  18. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/skills/abstractruntime/SKILL.md +8 -2
  19. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/__init__.py +2 -0
  20. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/attention.py +11 -1
  21. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/effect_cancellation.py +15 -0
  22. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/live_deltas.py +1 -0
  23. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/runtime.py +19 -1
  24. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +18 -0
  25. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/output_specs.py +1 -1
  26. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/expected_view.json +4 -0
  27. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/expected_view.json +2 -0
  28. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/expected_view.json +2 -0
  29. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/expected_view.json +2 -0
  30. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/f_windowed_slim/expected_view.json +1 -0
  31. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/h_denied_approval/expected_view.json +1 -0
  32. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/view.py +8 -1
  33. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/builtins.py +101 -27
  34. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/executor.py +7 -1
  35. abstractruntime-0.17.0/tests/fixtures/visualflow/compare_text_operands.json +38 -0
  36. abstractruntime-0.17.0/tests/fixtures/visualflow/typed_literals_flow.json +223 -0
  37. abstractruntime-0.17.0/tests/fixtures/visualflow/typed_literals_flow.legacy.json +219 -0
  38. abstractruntime-0.17.0/tests/test_automation_occurrence_error.py +41 -0
  39. abstractruntime-0.17.0/tests/test_changelog_fragments.py +158 -0
  40. abstractruntime-0.17.0/tests/test_discovery_facade_model_errors.py +24 -0
  41. abstractruntime-0.17.0/tests/test_effect_interrupted.py +144 -0
  42. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_packaging_extras.py +3 -3
  43. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_public_updates.py +8 -0
  44. abstractruntime-0.17.0/tests/test_visual_compare_typed_values.py +117 -0
  45. abstractruntime-0.16.0/release-notes.md +0 -76
  46. abstractruntime-0.16.0/tests/test_changelog_fragments.py +0 -78
  47. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/.github/workflows/changelog.yml +0 -0
  48. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/.github/workflows/ci.yml +0 -0
  49. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/.github/workflows/release.yml +0 -0
  50. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/.gitignore +0 -0
  51. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/ACKNOWLEDGMENTS.md +0 -0
  52. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/CODE_OF_CONDUCT.md +0 -0
  53. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/CONTRIBUTING.md +0 -0
  54. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/LICENSE +0 -0
  55. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/ROADMAP.md +0 -0
  56. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/SECURITY.md +0 -0
  57. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/changelog.d/README.md +0 -0
  58. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/README.md +0 -0
  59. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  60. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  61. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
  62. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
  63. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
  64. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
  65. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0008_integration_facades_are_the_complete_host_surface.md +0 -0
  66. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0010_one_replay_many_views.md +0 -0
  67. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/0011_memory_facade_is_the_complete_host_surface_for_abstractmemory.md +0 -0
  68. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/adr/README.md +0 -0
  69. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/artifacts.md +0 -0
  70. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/automations.md +0 -0
  71. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/README.md +0 -0
  72. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  73. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  74. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
  75. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
  76. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
  77. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
  78. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
  79. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
  80. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/003_wait_primitives.md +0 -0
  81. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
  82. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
  83. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
  84. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
  85. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  86. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  87. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  88. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  89. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/009_artifact_store.md +0 -0
  90. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  91. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  92. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  93. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  94. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  95. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
  96. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
  97. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
  98. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
  99. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
  100. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
  101. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
  102. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
  103. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
  104. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
  105. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
  106. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
  107. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0851_per_account_voice_stores.md +0 -0
  108. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0852_capability_refusals_are_not_retried.md +0 -0
  109. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0855_prefix_stability_contract_of_consecutive_llm_calls.md +0 -0
  110. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0856_memory_facade_and_ledger_provenance.md +0 -0
  111. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0862_is_empty_accepts_lists.md +0 -0
  112. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0863_index_build_never_loses_a_run_created_during_it.md +0 -0
  113. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/completed/0864_facade_catalog_hub_search_pages.md +0 -0
  114. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  115. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  116. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  117. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  118. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
  119. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  120. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  121. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  122. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/004_tests.md +0 -0
  123. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  124. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  125. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  126. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  127. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/README.md +0 -0
  128. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  129. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
  130. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  131. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  132. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  133. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  134. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
  135. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
  136. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
  137. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
  138. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
  139. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
  140. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
  141. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0853_session_tool_policy_before_the_approval_wait.md +0 -0
  142. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0854_replay_view.md +0 -0
  143. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0857_entity_direct_memory_writes_provenance.md +0 -0
  144. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0858_typed_runs_run_type_stamped_at_start.md +0 -0
  145. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0859_replay_view_ephemeral_text_deltas.md +0 -0
  146. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/0866_queued_state_in_the_ledger_and_pools_lend_never_build.md +0 -0
  147. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
  148. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
  149. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_portability/README.md +0 -0
  150. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
  151. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
  152. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
  153. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
  154. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
  155. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
  156. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
  157. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
  158. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
  159. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
  160. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
  161. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
  162. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
  163. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
  164. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
  165. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
  166. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
  167. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
  168. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
  169. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
  170. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0849_conversation_search_tool_usage_outputs_and_thinking.md +0 -0
  171. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0850_growing_automation_history_out_of_the_controller_ledger.md +0 -0
  172. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0860_replay_view_stop_wording_from_the_ledger.md +0 -0
  173. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0861_replay_view_activity_tool_sandbox_and_call_timings.md +0 -0
  174. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/0862_replay_view_message_artifacts_exclude_bookkeeping.md +0 -0
  175. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
  176. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
  177. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
  178. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
  179. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
  180. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
  181. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
  182. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
  183. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
  184. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/email.md +0 -0
  185. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/entity-runtime.md +0 -0
  186. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/evidence.md +0 -0
  187. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/faq.md +0 -0
  188. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/integrations/abstractmemory.md +0 -0
  189. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/limits.md +0 -0
  190. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/manual_testing.md +0 -0
  191. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/mcp-worker.md +0 -0
  192. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/proposal.md +0 -0
  193. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/provenance.md +0 -0
  194. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/snapshots.md +0 -0
  195. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/tool-approval.md +0 -0
  196. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/docs/tools-comms.md +0 -0
  197. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/01_hello_world.py +0 -0
  198. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/02_ask_user.py +0 -0
  199. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/03_wait_until.py +0 -0
  200. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/04_multi_step.py +0 -0
  201. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/05_persistence.py +0 -0
  202. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/06_llm_integration.py +0 -0
  203. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/07_react_agent.py +0 -0
  204. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/examples/README.md +0 -0
  205. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/mkdocs.yml +0 -0
  206. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/pytest.ini +0 -0
  207. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/scripts/backfill_diary_edges.py +0 -0
  208. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/scripts/generate_llms_full.py +0 -0
  209. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/scripts/regen_replay_conformance.py +0 -0
  210. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automation_queries.py +0 -0
  211. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/__init__.py +0 -0
  212. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/adapters.py +0 -0
  213. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/bundle.py +0 -0
  214. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
  215. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
  216. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/commands.py +0 -0
  217. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/consumers.py +0 -0
  218. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/controller.py +0 -0
  219. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/ledger.py +0 -0
  220. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/models.py +0 -0
  221. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/samples.py +0 -0
  222. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/service.py +0 -0
  223. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/automations/wakes.py +0 -0
  224. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/conversation_search.py +0 -0
  225. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/__init__.py +0 -0
  226. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/config.py +0 -0
  227. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/event_keys.py +0 -0
  228. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/health.py +0 -0
  229. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/models.py +0 -0
  230. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/policy.py +0 -0
  231. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/progress_channel.py +0 -0
  232. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/publish.py +0 -0
  233. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/questions.py +0 -0
  234. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/run_attribution.py +0 -0
  235. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/run_identity.py +0 -0
  236. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/run_lifecycle.py +0 -0
  237. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/run_origin.py +0 -0
  238. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/spec.py +0 -0
  239. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/step_context.py +0 -0
  240. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/tool_scope.py +0 -0
  241. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/core/vars.py +0 -0
  242. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/documents/__init__.py +0 -0
  243. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/documents/charts.py +0 -0
  244. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/documents/docx.py +0 -0
  245. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/documents/pdf.py +0 -0
  246. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/email/__init__.py +0 -0
  247. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/email/actions.py +0 -0
  248. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/email/automations.py +0 -0
  249. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/email/binding.py +0 -0
  250. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/email/feeder.py +0 -0
  251. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/email/frame.py +0 -0
  252. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/email/inbox.py +0 -0
  253. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/evidence/__init__.py +0 -0
  254. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/evidence/recorder.py +0 -0
  255. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/history_bundle.py +0 -0
  256. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/__init__.py +0 -0
  257. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/act_only.py +0 -0
  258. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/chat.py +0 -0
  259. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/communities.py +0 -0
  260. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/diary.py +0 -0
  261. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/digest.py +0 -0
  262. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/entity_runtime.py +0 -0
  263. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/fingerprint.py +0 -0
  264. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/lease.py +0 -0
  265. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/life.py +0 -0
  266. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/memory_reader.py +0 -0
  267. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/night_voice.py +0 -0
  268. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/phase_graph.py +0 -0
  269. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/phase_spec.py +0 -0
  270. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/prelude.py +0 -0
  271. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/prompt_overlay.py +0 -0
  272. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/reflection.py +0 -0
  273. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
  274. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/substrate.py +0 -0
  275. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/tool_effects.py +0 -0
  276. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/tool_policy.py +0 -0
  277. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/tools.py +0 -0
  278. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/identity/visit_workflow.py +0 -0
  279. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/__init__.py +0 -0
  280. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
  281. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
  282. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/command_sandbox_host.py +0 -0
  283. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
  284. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/config_facade.py +0 -0
  285. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  286. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
  287. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  288. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
  289. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
  290. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/email_facade.py +0 -0
  291. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  292. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
  293. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
  294. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/llm_client.py +0 -0
  295. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
  296. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  297. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/mcp_facade.py +0 -0
  298. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  299. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
  300. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  301. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
  302. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/server_facade.py +0 -0
  303. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  304. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/structured_facade.py +0 -0
  305. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/structured_output.py +0 -0
  306. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  307. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
  308. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
  309. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
  310. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
  311. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/voice_facade.py +0 -0
  312. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/voice_library.py +0 -0
  313. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
  314. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  315. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
  316. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  317. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
  318. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/memory_facade.py +0 -0
  319. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
  320. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/mail_verbs.py +0 -0
  321. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/__init__.py +0 -0
  322. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/active_context.py +0 -0
  323. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/active_memory.py +0 -0
  324. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/compaction.py +0 -0
  325. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/kg_packets.py +0 -0
  326. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/memact_composer.py +0 -0
  327. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/recall_levels.py +0 -0
  328. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/memory/token_budget.py +0 -0
  329. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/rendering/__init__.py +0 -0
  330. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  331. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/rendering/json_stringify.py +0 -0
  332. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/__init__.py +0 -0
  333. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/__init__.py +0 -0
  334. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/manifest.json +0 -0
  335. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/records.json +0 -0
  336. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/runs.json +0 -0
  337. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/manifest.json +0 -0
  338. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/records.json +0 -0
  339. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/runs.json +0 -0
  340. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/expected_view.json +0 -0
  341. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/manifest.json +0 -0
  342. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/records.json +0 -0
  343. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/runs.json +0 -0
  344. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/manifest.json +0 -0
  345. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/records.json +0 -0
  346. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/runs.json +0 -0
  347. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/d_cancellation/expected_view.json +0 -0
  348. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/d_cancellation/manifest.json +0 -0
  349. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/d_cancellation/records.json +0 -0
  350. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/d_cancellation/runs.json +0 -0
  351. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/manifest.json +0 -0
  352. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/records.json +0 -0
  353. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/runs.json +0 -0
  354. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/expected_view.json +0 -0
  355. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/manifest.json +0 -0
  356. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/records.json +0 -0
  357. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/runs.json +0 -0
  358. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/f_windowed_slim/manifest.json +0 -0
  359. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/f_windowed_slim/records.json +0 -0
  360. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/f_windowed_slim/runs.json +0 -0
  361. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/g_ask_user/expected_view.json +0 -0
  362. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/g_ask_user/manifest.json +0 -0
  363. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/g_ask_user/records.json +0 -0
  364. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/g_ask_user/runs.json +0 -0
  365. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/h_denied_approval/manifest.json +0 -0
  366. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/h_denied_approval/records.json +0 -0
  367. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/h_denied_approval/runs.json +0 -0
  368. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/i_wait_kinds/expected_view.json +0 -0
  369. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/i_wait_kinds/manifest.json +0 -0
  370. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/i_wait_kinds/records.json +0 -0
  371. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/i_wait_kinds/runs.json +0 -0
  372. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/expected_view.json +0 -0
  373. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/manifest.json +0 -0
  374. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/records.json +0 -0
  375. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/runs.json +0 -0
  376. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/k_nested_delegation/expected_view.json +0 -0
  377. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/k_nested_delegation/manifest.json +0 -0
  378. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/k_nested_delegation/records.json +0 -0
  379. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/k_nested_delegation/runs.json +0 -0
  380. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/expected_view.json +0 -0
  381. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/manifest.json +0 -0
  382. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/records.json +0 -0
  383. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/runs.json +0 -0
  384. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/expected_view.json +0 -0
  385. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/manifest.json +0 -0
  386. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/records.json +0 -0
  387. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/runs.json +0 -0
  388. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/delta.py +0 -0
  389. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/replay/executions.py +0 -0
  390. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/scheduler/__init__.py +0 -0
  391. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/scheduler/convenience.py +0 -0
  392. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/scheduler/multi_store.py +0 -0
  393. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/scheduler/registry.py +0 -0
  394. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/scheduler/scheduler.py +0 -0
  395. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/session_history.py +0 -0
  396. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/session_turns.py +0 -0
  397. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/__init__.py +0 -0
  398. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/artifacts.py +0 -0
  399. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/base.py +0 -0
  400. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/change_ring.py +0 -0
  401. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/commands.py +0 -0
  402. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/in_memory.py +0 -0
  403. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/json_files.py +0 -0
  404. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/lease.py +0 -0
  405. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/ledger_chain.py +0 -0
  406. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/ledger_slim.py +0 -0
  407. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/observable.py +0 -0
  408. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/offloading.py +0 -0
  409. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/serialize.py +0 -0
  410. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/session_tool_policy.py +0 -0
  411. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/snapshots.py +0 -0
  412. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/sqlite.py +0 -0
  413. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/storage/steer_sidecar.py +0 -0
  414. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/__init__.py +0 -0
  415. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/cloudevents.py +0 -0
  416. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/connection_events.py +0 -0
  417. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/connections.py +0 -0
  418. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/email_received.py +0 -0
  419. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/event_frame.py +0 -0
  420. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/feed.py +0 -0
  421. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/manual.py +0 -0
  422. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/protocol.py +0 -0
  423. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/registry.py +0 -0
  424. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/schedule.py +0 -0
  425. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/triggers/webhook.py +0 -0
  426. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/turn_grounding.py +0 -0
  427. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/utils/__init__.py +0 -0
  428. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/utils/atomic_files.py +0 -0
  429. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/utils/file_filters.py +0 -0
  430. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/utils/workspace_paths.py +0 -0
  431. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  432. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  433. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  434. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  435. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  436. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
  437. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  438. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  439. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  440. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  441. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  442. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
  443. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  444. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  445. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  446. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
  447. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
  448. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
  449. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/loop_back_check.py +0 -0
  450. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/loop_limit_lowering.py +0 -0
  451. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  452. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  453. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +0 -0
  454. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/visualflow_compiler/visual/reroute_lowering.py +0 -0
  455. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  456. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/workflow_bundle/models.py +0 -0
  457. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  458. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  459. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  460. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/README.md +0 -0
  461. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/automation_harness.py +0 -0
  462. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/conftest.py +0 -0
  463. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/email_wp2_support.py +0 -0
  464. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/fixtures/feeds/atom.xml +0 -0
  465. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/fixtures/feeds/rdf-not-a-feed.xml +0 -0
  466. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/fixtures/feeds/rss1-malformed.xml +0 -0
  467. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/fixtures/feeds/rss1.xml +0 -0
  468. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/fixtures/feeds/rss2.xml +0 -0
  469. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/fixtures/schedule_v1_corpus.json +0 -0
  470. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/live_email/conftest.py +0 -0
  471. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/live_email/live_email_support.py +0 -0
  472. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/live_email/test_email_live_runtime.py +0 -0
  473. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/media_endpoint_profile_probe.py +0 -0
  474. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_abstractcore_comms_facade.py +0 -0
  475. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_abstractcore_discovery_facade.py +0 -0
  476. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_abstractcore_host_facade.py +0 -0
  477. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_abstractcore_run_facade.py +0 -0
  478. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_abstractcore_server_facade.py +0 -0
  479. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_abstractcore_structured_facade.py +0 -0
  480. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_abstractcore_telegram_facade.py +0 -0
  481. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_active_consumers_index.py +0 -0
  482. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_active_context_policy.py +0 -0
  483. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_active_index.py +0 -0
  484. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_active_memory.py +0 -0
  485. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_agora_agent_alias_identity.py +0 -0
  486. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_agora_tools_http.py +0 -0
  487. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_analyze_media_addressing_and_walling.py +0 -0
  488. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_answer_user_effect.py +0 -0
  489. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_artifact_session_candidates.py +0 -0
  490. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_artifacts.py +0 -0
  491. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_calendar_schedule.py +0 -0
  492. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_commands.py +0 -0
  493. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_controller.py +0 -0
  494. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_controller_recovery.py +0 -0
  495. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_definition.py +0 -0
  496. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_discussion_isolation.py +0 -0
  497. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_email_results.py +0 -0
  498. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_growing_context.py +0 -0
  499. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_index.py +0 -0
  500. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_list_reads.py +0 -0
  501. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_named_policy_compiler.py +0 -0
  502. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_next_fire.py +0 -0
  503. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_occurrence_input_resolver.py +0 -0
  504. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_occurrence_recovery.py +0 -0
  505. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_replay_read_only.py +0 -0
  506. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_retry.py +0 -0
  507. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_session_turns.py +0 -0
  508. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_status.py +0 -0
  509. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_automation_tool_approval.py +0 -0
  510. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_browser_probe_target_walling.py +0 -0
  511. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_budget_law_no_unrequested_caps.py +0 -0
  512. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_capability_default_reasoning.py +0 -0
  513. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_chat_summarizer_integration.py +0 -0
  514. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_code_node_imports.py +0 -0
  515. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_code_node_restricted_python.py +0 -0
  516. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_command_sandbox_host_facade.py +0 -0
  517. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_command_store.py +0 -0
  518. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_compaction_helpers.py +0 -0
  519. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_compaction_summarizer_route.py +0 -0
  520. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_config_facade_model_contexts.py +0 -0
  521. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_config_facade_models_engines.py +0 -0
  522. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_config_facade_voice_input_hint.py +0 -0
  523. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_control_adapter_while.py +0 -0
  524. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_controller_bundle_packaged.py +0 -0
  525. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_conversation_search.py +0 -0
  526. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_conversational_questions.py +0 -0
  527. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_crash_ordering_inversions.py +0 -0
  528. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_create_if_absent.py +0 -0
  529. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_data_registry_facade.py +0 -0
  530. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_decision_facade_and_node.py +0 -0
  531. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_decision_output.py +0 -0
  532. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_default_model_warmup_switch.py +0 -0
  533. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_default_tools_camera_gating.py +0 -0
  534. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_default_tools_comms_gating.py +0 -0
  535. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_default_tools_include_skim_files.py +0 -0
  536. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_default_tools_include_skim_folders.py +0 -0
  537. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_default_tools_include_skim_web.py +0 -0
  538. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_default_tools_search_files_executor.py +0 -0
  539. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_diary_capture.py +0 -0
  540. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_diary_write_rescue.py +0 -0
  541. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_directory_lease.py +0 -0
  542. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_disabled_toolsets_seam.py +0 -0
  543. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_discovery_survives_unbuildable_default.py +0 -0
  544. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_discovery_tts_unavailable_reason.py +0 -0
  545. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_discovery_voice_openai_api_key.py +0 -0
  546. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_discussion_session_anchor.py +0 -0
  547. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_document_markdown_tables.py +0 -0
  548. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_document_renderers_hr_quote.py +0 -0
  549. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_durable_toolsets.py +0 -0
  550. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_durable_write_discipline.py +0 -0
  551. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  552. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_effect_cancellation.py +0 -0
  553. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_effect_issuance_idempotency.py +0 -0
  554. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_effect_payload_stays_json_serializable.py +0 -0
  555. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_election_consequence_teaching.py +0 -0
  556. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_binding_and_refiner.py +0 -0
  557. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_feeder_batched.py +0 -0
  558. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_feeder_flags.py +0 -0
  559. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_gate_fixes.py +0 -0
  560. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_inbox_and_trigger.py +0 -0
  561. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_received_mailbox_id.py +0 -0
  562. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_regate_fixes.py +0 -0
  563. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_review_fixes.py +0 -0
  564. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_self_trigger_loop.py +0 -0
  565. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_stream_consumers.py +0 -0
  566. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_email_toolset_and_walls.py +0 -0
  567. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_emergence_experiment.py +0 -0
  568. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_emit_event_uses_wait_index.py +0 -0
  569. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_emit_event_without_workflow_registry.py +0 -0
  570. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_endpoint_profile_media_end_to_end.py +0 -0
  571. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_endpoint_profile_media_in_process.py +0 -0
  572. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_endpoint_profile_media_specs_keep_provider.py +0 -0
  573. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_endpoint_profile_route_context.py +0 -0
  574. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_awake_memory_fixes.py +0 -0
  575. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_brain_effects.py +0 -0
  576. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_chat_driver.py +0 -0
  577. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_chat_tools_reflection.py +0 -0
  578. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_diary.py +0 -0
  579. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_execute_tool.py +0 -0
  580. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_fetch_url_tool.py +0 -0
  581. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_history_window.py +0 -0
  582. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_life_loop.py +0 -0
  583. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_memory_richness.py +0 -0
  584. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_phase_graph_conformance.py +0 -0
  585. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_react_visit_window.py +0 -0
  586. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_recent_memories.py +0 -0
  587. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_runtime.py +0 -0
  588. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_search_memory.py +0 -0
  589. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
  590. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_substrate_resolution.py +0 -0
  591. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_visit_honesty.py +0 -0
  592. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_workspace_cap.py +0 -0
  593. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_entity_workspace_tools.py +0 -0
  594. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_event_index_cross_process.py +0 -0
  595. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_event_wait_index.py +0 -0
  596. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
  597. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_evidence_recorder.py +0 -0
  598. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
  599. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_execute_command_output_offload.py +0 -0
  600. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_execution_capability_discovery.py +0 -0
  601. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_explicit_eject_other_clients.py +0 -0
  602. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_factory_default_retry_policy.py +0 -0
  603. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  604. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_format_repair_nudge.py +0 -0
  605. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_fresh_install_no_provider.py +0 -0
  606. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_gateway_facades_c4899.py +0 -0
  607. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_git_read_only_refiner.py +0 -0
  608. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_hf_process_residency_merge.py +0 -0
  609. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_history_window_multimodal.py +0 -0
  610. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_hot_path_store_reads.py +0 -0
  611. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_indexed_idempotency_lookup.py +0 -0
  612. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_integration_abstractcore.py +0 -0
  613. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_integrations_abstractcore.py +0 -0
  614. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_json_file_run_store_change_token_after_build.py +0 -0
  615. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_json_file_run_store_children_index.py +0 -0
  616. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_json_file_run_store_index_build_race.py +0 -0
  617. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_json_run_cache_bound.py +0 -0
  618. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_json_store_scan_memo.py +0 -0
  619. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_jsonl_ledger_recovery.py +0 -0
  620. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_jsonl_ledger_seq_cross_process.py +0 -0
  621. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_jsonl_row_index.py +0 -0
  622. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_kg_learn_and_recall_contract.py +0 -0
  623. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_ledger_chain.py +0 -0
  624. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_ledger_cursor_invariants.py +0 -0
  625. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_ledger_get_record.py +0 -0
  626. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_ledger_record_slimming.py +0 -0
  627. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_ledger_subscription.py +0 -0
  628. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_live_token_deltas.py +0 -0
  629. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_media_artifact_refs.py +0 -0
  630. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  631. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  632. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_payload_shape_refusal.py +0 -0
  633. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_prefix_stability_contract.py +0 -0
  634. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_requires_prompt.py +0 -0
  635. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_response_schema_normalization.py +0 -0
  636. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_structured_output_fallback.py +0 -0
  637. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_text_phase_progress.py +0 -0
  638. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  639. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  640. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  641. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_client_grounding_tail.py +0 -0
  642. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_client_media_artifacts.py +0 -0
  643. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_client_system_context.py +0 -0
  644. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_client_tool_call_parsing.py +0 -0
  645. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_retry_classification.py +0 -0
  646. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_llm_streaming_on_token.py +0 -0
  647. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_local_helper_tool_exposure.py +0 -0
  648. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_local_residency_host_sweep.py +0 -0
  649. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  650. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mail_verbs.py +0 -0
  651. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mailbox_index.py +0 -0
  652. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_max_iterations_ceiling.py +0 -0
  653. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mcp_remote_tool_executor.py +0 -0
  654. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mcp_runs_untrusted_and_facade.py +0 -0
  655. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mcp_worker_logging.py +0 -0
  656. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mcp_worker_security.py +0 -0
  657. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mcp_worker_stdio.py +0 -0
  658. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_media_artifact_resolution.py +0 -0
  659. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_media_capability_default_routing.py +0 -0
  660. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_media_host_endpoint_resolver.py +0 -0
  661. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_media_only_requests_skip_text_client.py +0 -0
  662. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_media_subprocess.py +0 -0
  663. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memact_composer_from_kg_result.py +0 -0
  664. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_appraise_handler.py +0 -0
  665. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_communities.py +0 -0
  666. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_facade.py +0 -0
  667. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  668. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_kg_packets.py +0 -0
  669. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  670. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  671. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  672. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  673. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_note_effect.py +0 -0
  674. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_query_effect.py +0 -0
  675. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_query_rich_filters.py +0 -0
  676. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_revise.py +0 -0
  677. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  678. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_seam_handlers.py +0 -0
  679. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_seam_sqlite_durability.py +0 -0
  680. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_step_provenance.py +0 -0
  681. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_memory_tag_effect.py +0 -0
  682. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mlx_generation_serialization.py +0 -0
  683. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_mlx_process_residency_merge.py +0 -0
  684. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_model_eject_cancel.py +0 -0
  685. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_model_residency_clean_switch.py +0 -0
  686. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_model_residency_control_plane.py +0 -0
  687. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
  688. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_model_residency_release_and_readable_holders.py +0 -0
  689. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_multi_store_scheduler.py +0 -0
  690. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_multimodal_abstractcore_integration.py +0 -0
  691. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_native_mlx_application_wiring.py +0 -0
  692. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_native_mlx_execution_controls_live.py +0 -0
  693. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_native_tool_channel.py +0 -0
  694. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_night_voice.py +0 -0
  695. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_no_default_provider_refusal_ux.py +0 -0
  696. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_occurrence_named_inputs.py +0 -0
  697. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_occurrence_samples.py +0 -0
  698. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_offload_answer_chain_c4978.py +0 -0
  699. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
  700. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_offloading.py +0 -0
  701. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_parallel_readonly_tool_execution.py +0 -0
  702. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_pause_resume.py +0 -0
  703. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_pdf_unicode_rendering.py +0 -0
  704. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_personal_cycle.py +0 -0
  705. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_phantom_attachment_index.py +0 -0
  706. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_phase_graph_artifact_control.py +0 -0
  707. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_phase_graph_obedience.py +0 -0
  708. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_phase_vocabulary_migration.py +0 -0
  709. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
  710. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_prompt_cache_export_import.py +0 -0
  711. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
  712. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_prompt_cache_modules.py +0 -0
  713. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_prompt_cache_posture_inheritance.py +0 -0
  714. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
  715. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_prompt_overlay.py +0 -0
  716. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_provider_endpoint_profile_resolution.py +0 -0
  717. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_provider_pin_routing_isolation.py +0 -0
  718. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_public_action_approval_context.py +0 -0
  719. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_publish_event.py +0 -0
  720. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_queryable_run_store.py +0 -0
  721. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_r12_workspace_sandbox.py +0 -0
  722. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  723. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_read_idle_threading.py +0 -0
  724. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_readoption_experiment.py +0 -0
  725. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_real_integration.py +0 -0
  726. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_realize_election.py +0 -0
  727. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_recall_levels_policy.py +0 -0
  728. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_remote_client_cancel.py +0 -0
  729. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_remote_llm_client.py +0 -0
  730. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_remote_speculation_defaults.py +0 -0
  731. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_rendering_agent_trace_report.py +0 -0
  732. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_rendering_json_stringify.py +0 -0
  733. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_conformance.py +0 -0
  734. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_conformance_package.py +0 -0
  735. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_cursor_token.py +0 -0
  736. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_delta_cost.py +0 -0
  737. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_invariants.py +0 -0
  738. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_review_findings.py +0 -0
  739. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_replay_tool_policy.py +0 -0
  740. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_report_branding.py +0 -0
  741. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_residency_fit_refusal_broadcast.py +0 -0
  742. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_resident_media_generation.py +0 -0
  743. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_resume_concurrent_same_wait.py +0 -0
  744. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_retry_idempotency.py +0 -0
  745. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_run_history_bundle.py +0 -0
  746. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_run_index_workspace_root.py +0 -0
  747. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_run_mutation_lock.py +0 -0
  748. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_run_origin.py +0 -0
  749. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_run_scoped_tool_policy.py +0 -0
  750. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_run_store_change_token.py +0 -0
  751. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_run_tool_scope_ceiling.py +0 -0
  752. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_browser_session_boundary.py +0 -0
  753. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  754. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_default_provider_model_refresh.py +0 -0
  755. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_effect_invocation_trace.py +0 -0
  756. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_health_and_bounded_vars.py +0 -0
  757. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_install_boundary.py +0 -0
  758. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
  759. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_node_traces.py +0 -0
  760. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  761. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_runtime_tick_step_gate.py +0 -0
  762. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_schedule_run.py +0 -0
  763. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_schedule_v1_corpus.py +0 -0
  764. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_schedule_v2_calendar.py +0 -0
  765. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_scheduler.py +0 -0
  766. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_send_email_refiner.py +0 -0
  767. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_send_email_self_default_policy.py +0 -0
  768. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
  769. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_session_history.py +0 -0
  770. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_session_prompt_cache_attribution.py +0 -0
  771. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_session_prompt_cache_visibility.py +0 -0
  772. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_session_route_stamp.py +0 -0
  773. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_session_start_cost.py +0 -0
  774. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_session_tool_policy.py +0 -0
  775. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_shell_tool_exposure.py +0 -0
  776. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_snapshots.py +0 -0
  777. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_speculation_inheritance.py +0 -0
  778. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_speculation_reaches_provider_construction.py +0 -0
  779. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_sqlite_ledger_store.py +0 -0
  780. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_start_subworkflow_async_wait.py +0 -0
  781. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  782. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  783. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_steer_sidecar.py +0 -0
  784. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_step_context.py +0 -0
  785. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_storage_deletion.py +0 -0
  786. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_streamed_voice_namespace.py +0 -0
  787. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_structured_output_schema_enum.py +0 -0
  788. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_structured_schema_execution_client.py +0 -0
  789. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_subworkflow.py +0 -0
  790. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_terminal_effect_completion.py +0 -0
  791. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  792. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_thinking_inheritance.py +0 -0
  793. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  794. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_approval_executor.py +0 -0
  795. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_approval_resume_executes.py +0 -0
  796. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_approval_wait_key_identity.py +0 -0
  797. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_calls_idempotency_keys.py +0 -0
  798. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_catalog.py +0 -0
  799. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_descriptor_registry.py +0 -0
  800. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_executor_argument_sanitization.py +0 -0
  801. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_executor_error_output_detection.py +0 -0
  802. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_executor_filename_alias.py +0 -0
  803. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  804. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_executor_read_file_aliases.py +0 -0
  805. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_executor_timeout.py +0 -0
  806. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_inventory_facade.py +0 -0
  807. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_invoke_effect.py +0 -0
  808. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_policy_and_mounts.py +0 -0
  809. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_tool_wait_allowlist_safety.py +0 -0
  810. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_topic_election_world_model.py +0 -0
  811. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trace_context_propagation.py +0 -0
  812. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trigger_cloudevents.py +0 -0
  813. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trigger_connection_listening.py +0 -0
  814. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trigger_connections.py +0 -0
  815. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trigger_feed.py +0 -0
  816. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trigger_registry.py +0 -0
  817. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trigger_schedule_math.py +0 -0
  818. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trigger_webhook.py +0 -0
  819. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_trusted_run_index.py +0 -0
  820. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_turn_grounding_byte_stability.py +0 -0
  821. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_turn_grounding_carriers_a3.py +0 -0
  822. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_vars_query_effect.py +0 -0
  823. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visit_ab_fixture.py +0 -0
  824. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visit_live_guidance.py +0 -0
  825. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visit_midturn_elections.py +0 -0
  826. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visit_midturn_resume.py +0 -0
  827. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visit_workflow.py +0 -0
  828. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
  829. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
  830. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  831. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  832. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  833. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  834. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_entity_memory_nodes.py +0 -0
  835. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
  836. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_llm_call_partial_override.py +0 -0
  837. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  838. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_loop_back_out_of_body.py +0 -0
  839. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_loop_limit_and_list_nodes.py +0 -0
  840. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_loop_limit_on_wire.py +0 -0
  841. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_memact_compose_node.py +0 -0
  842. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  843. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  844. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  845. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_reroute_lowering.py +0 -0
  846. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_set_vars_pins.py +0 -0
  847. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_unknown_node_type_refuses.py +0 -0
  848. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
  849. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_add_message_builtin.py +0 -0
  850. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  851. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_agora_react_agent.py +0 -0
  852. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_call_tool_node.py +0 -0
  853. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
  854. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_compiler_basic.py +0 -0
  855. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  856. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_continue_on_error.py +0 -0
  857. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_edit_json_schema_node.py +0 -0
  858. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
  859. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_file_nodes_workspace.py +0 -0
  860. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_function_library.py +0 -0
  861. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_get_element_node.py +0 -0
  862. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_get_random_element_node.py +0 -0
  863. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_get_var_node.py +0 -0
  864. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_has_tools_builtin.py +0 -0
  865. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  866. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
  867. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_make_object_node.py +0 -0
  868. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_media_nodes.py +0 -0
  869. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  870. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_memory_source_pins.py +0 -0
  871. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_pin_expressions.py +0 -0
  872. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_prompt_only.py +0 -0
  873. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_random_nodes.py +0 -0
  874. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_schema_enum_switch.py +0 -0
  875. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_string_contains_replace.py +0 -0
  876. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_visualflow_tool_parameters_node.py +0 -0
  877. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_voice_library_facade.py +0 -0
  878. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_voice_openai_api_key_path.py +0 -0
  879. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_voice_projection_contract.py +0 -0
  880. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_voice_stream_is_not_a_wait.py +0 -0
  881. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_w4_feelings_lens.py +0 -0
  882. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_wait_event_deadline.py +0 -0
  883. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_wait_event_prompt_metadata.py +0 -0
  884. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_wait_until_streak.py +0 -0
  885. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_wait_until_utc_normalization.py +0 -0
  886. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workflow_bundle_registry.py +0 -0
  887. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_builtin_deny.py +0 -0
  888. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_context_allowed_workspaces.py +0 -0
  889. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
  890. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  891. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
  892. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
  893. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_prompt_context.py +0 -0
  894. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_read_only.py +0 -0
  895. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_workspace_writable_paths.py +0 -0
  896. {abstractruntime-0.16.0 → abstractruntime-0.17.0}/tests/test_write_chart.py +0 -0
@@ -10,6 +10,55 @@ Unreleased changes live in [`changelog.d/`](changelog.d/README.md), one file per
10
10
 
11
11
  ## [Unreleased]
12
12
 
13
+ ## [0.17.0] - 2026-11-03
14
+
15
+ ### Added
16
+
17
+ - **`EffectInterrupted`: a host stop interrupts an effect, it never fails it** (`core/effect_cancellation.py`,
18
+ exported as `abstractruntime.EffectInterrupted`; gateway backlog 1103). A host that stops on purpose (a gateway stop
19
+ or restart, a model-host restart for an update) raises it into the effect in flight. The runtime writes no terminal
20
+ record and re-raises: the ledger tail stays STARTED, the run stays RUNNING at its last durable step, and the next
21
+ tick (after the host is back) sends the effect again under the same idempotency key as attempt 1, so no retry is
22
+ consumed and nothing reaches an automation's outcome. A BaseException like `EffectKilled`, so no `except Exception`
23
+ on the way turns it into a failure. The interrupted call's live text ends `cancelled` with `detail: "interrupted"`.
24
+ - **Public updates carry their type in replay** (`replay/view.py`). A `public_update` message has
25
+ `update_kind`: `"finding"` when the actor typed the event `kind: "finding"` (a fact or piece of
26
+ evidence it established), otherwise `"progress"` (what it is doing), including events written
27
+ before the field existed. Clients use it as given, for example to list the findings of a
28
+ conversation. See [docs/replay.md](docs/replay.md#public-conversation-messages).
29
+ - **Hosts tell model errors apart through the discovery facade** (`integrations/abstractcore/discovery_facade.py`):
30
+ `ModelNotDownloadedError` and `ModelNotFoundError` are AbstractCore's own classes, so a host (the gateway's
31
+ "model not downloaded" sentence) catches exactly what Core raises and reads `model` / `provider` without importing
32
+ AbstractCore.
33
+ - **Replayed tool calls keep the model's call id** (`replay/view.py`). An `activities[].tool_calls[]`
34
+ row keyed by a runtime call id (`id`) also carries `call_id`, the model's own id, which is what a
35
+ public update's `source_call_ids` cite; a client can now resolve a finding to the results it cites.
36
+
37
+ ### Changed
38
+
39
+ - **Compare reads text next to a number or true/false exactly** (`visual/builtins.py` `_exact_from_text`, ADR 0049 as
40
+ amended 2026-11-03: "we must have automatic conversion"). When one side is a number or true/false and the other is
41
+ text, the text is read as that type by the Flow editor's literal grammar (a decimal number, ASCII, no `_`, finite,
42
+ a whole number kept exact beyond 2**53; or `true`/`false` in any case), so `5 == "5"` and `"9" < 10` are true. This
43
+ covers flows saved by AbstractFlow 0.13.0 (a typed value stored as text next to a wired number) and text arriving at
44
+ run time from a form, an API input or a model, with no re-save. `"1_000"`, `"0x10"`, `"inf"`, `"nan"`, full-width
45
+ digits and empty text are refused. Text against text is never converted (`"10" > "9"` compares text). The table is
46
+ `tests/fixtures/visualflow/compare_text_operands.json`.
47
+ - **Compare refuses values it cannot compare instead of answering False** (`visual/builtins.py` `control_compare`,
48
+ ADR 0049). Text that is not a number next to a number, or not `true`/`false` next to true/false (`5 == "five"`,
49
+ every operator; text that is a number or true/false is read as one, see "Compare reads text next to a number or true/false exactly" above), and `<`/`<=`/`>`/`>=` between values Python cannot order
50
+ (`None > 3`, a list and a number), now fail the step with an error naming the node and pins: "Compare 'Is five'
51
+ (node same) ==: b is text ('five'), not a number; a is a number (5)." Before, these answered False silently.
52
+ Equality of same-type values and Python's equality across other types (`None == 5`) are unchanged; true/false
53
+ compares with numbers as Python's booleans do (`True == 1`).
54
+ - **AbstractCore floor 2.33.0** in the base install and the `apple` and `gpu` extras (was 2.32.0).
55
+
56
+ ### Fixed
57
+
58
+ - **An automation occurrence whose agent completed with `success: false` names the agent's reason**
59
+ (`automations/attention.py`). The attention item and the `automation_failed` email said "completed" (the run's status
60
+ word); the reason is now read from the Agent node's `meta.error`, and when there is none it says so plainly.
61
+
13
62
  ## [0.16.0] - 2026-11-02
14
63
 
15
64
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: AbstractRuntime
3
- Version: 0.16.0
3
+ Version: 0.17.0
4
4
  Summary: AbstractRuntime: a durable graph runner designed to pair with AbstractCore.
5
5
  Project-URL: AbstractCore (website), https://www.abstractcore.ai/
6
6
  Project-URL: AbstractRuntime (GitHub), https://github.com/lpalbou/abstractruntime
@@ -20,7 +20,7 @@ Classifier: Programming Language :: Python :: 3.11
20
20
  Classifier: Programming Language :: Python :: 3.12
21
21
  Classifier: Programming Language :: Python :: 3.13
22
22
  Requires-Python: >=3.10
23
- Requires-Dist: abstractcore>=2.32.0
23
+ Requires-Dist: abstractcore>=2.33.0
24
24
  Requires-Dist: abstractmemory>=0.4.0
25
25
  Requires-Dist: abstractsemantics>=0.0.5
26
26
  Requires-Dist: anyio<5.0.0,>=4.12.1
@@ -35,14 +35,14 @@ Requires-Dist: reportlab<5.0.0,>=4.0.0
35
35
  Requires-Dist: restrictedpython>=7.0
36
36
  Requires-Dist: unstructured[docx,odt,pptx,rtf,xlsx]<0.19.0,>=0.18.32
37
37
  Provides-Extra: apple
38
- Requires-Dist: abstractcore[apple]>=2.32.0; extra == 'apple'
38
+ Requires-Dist: abstractcore[apple]>=2.33.0; extra == 'apple'
39
39
  Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'apple'
40
40
  Provides-Extra: docs
41
41
  Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
42
42
  Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
43
43
  Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
44
44
  Provides-Extra: gpu
45
- Requires-Dist: abstractcore[gpu]>=2.32.0; extra == 'gpu'
45
+ Requires-Dist: abstractcore[gpu]>=2.33.0; extra == 'gpu'
46
46
  Requires-Dist: setuptools<82.0.0,>=77.0.3; extra == 'gpu'
47
47
  Provides-Extra: test
48
48
  Requires-Dist: aiosmtpd<2.0.0,>=1.4.4; extra == 'test'
@@ -55,16 +55,32 @@ Description-Content-Type: text/markdown
55
55
 
56
56
  It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
57
57
 
58
- **Version:** 0.16.0 • **Python:** 3.10+
58
+ **Version:** 0.17.0 • **Python:** 3.10+
59
59
 
60
60
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
61
61
 
62
+ ## What's new in 0.17.0
63
+
64
+ - **A host stop suspends a run, it never fails it**: a host that stops on purpose raises `EffectInterrupted` into
65
+ the effect in flight; the runtime writes no terminal record, the run stays running at its last durable step, and
66
+ the next tick sends the call again as attempt 1 (no retry used, no automation outcome, nothing notified).
67
+ - **Public updates are typed**: a `public_update` in the replay view carries `update_kind`, `"finding"` (a fact or
68
+ piece of evidence the actor established) or `"progress"` (what it is doing), so a client can list a conversation's
69
+ findings. See [docs/replay.md](docs/replay.md#public-conversation-messages).
70
+ - **Replayed tool calls keep the model's call id**: an `activities[].tool_calls[]` row also carries `call_id`, the id
71
+ a public update's `source_call_ids` cite, so a finding resolves to the results it cites.
72
+ - **Compare reads text next to a number or true/false exactly**: `5 == "5"` and `"9" < 10` are true, text it
73
+ cannot read as that type (`"five"`, `"0x10"`, empty) fails the step with an error naming the node and pins, and
74
+ text against text is never converted.
75
+ - **An automation occurrence says why it failed**: when the agent finished without success, the attention item and
76
+ the notification carry the agent's own error, never "completed". Full list: [CHANGELOG.md](CHANGELOG.md).
77
+
62
78
  ## What's new in 0.16.0
63
79
 
64
80
  - **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
65
81
  (`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
66
82
  durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
67
- 2.32.0. See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
83
+ 2.32.0 or newer (AbstractRuntime 0.17.0 requires 2.33.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
68
84
  - **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
69
85
  clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
70
86
  words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
@@ -145,7 +161,7 @@ Remote-light runtime:
145
161
  pip install abstractruntime
146
162
  ```
147
163
 
148
- The base install includes AbstractCore 2.32.0 or newer (its light install:
164
+ The base install includes AbstractCore 2.33.0 or newer (its light install:
149
165
  remote providers, tools, vision, voice, audio, music, and decision integration), plus the
150
166
  `abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
151
167
  default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
@@ -4,16 +4,32 @@
4
4
 
5
5
  It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
6
6
 
7
- **Version:** 0.16.0 • **Python:** 3.10+
7
+ **Version:** 0.17.0 • **Python:** 3.10+
8
8
 
9
9
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
10
10
 
11
+ ## What's new in 0.17.0
12
+
13
+ - **A host stop suspends a run, it never fails it**: a host that stops on purpose raises `EffectInterrupted` into
14
+ the effect in flight; the runtime writes no terminal record, the run stays running at its last durable step, and
15
+ the next tick sends the call again as attempt 1 (no retry used, no automation outcome, nothing notified).
16
+ - **Public updates are typed**: a `public_update` in the replay view carries `update_kind`, `"finding"` (a fact or
17
+ piece of evidence the actor established) or `"progress"` (what it is doing), so a client can list a conversation's
18
+ findings. See [docs/replay.md](docs/replay.md#public-conversation-messages).
19
+ - **Replayed tool calls keep the model's call id**: an `activities[].tool_calls[]` row also carries `call_id`, the id
20
+ a public update's `source_call_ids` cite, so a finding resolves to the results it cites.
21
+ - **Compare reads text next to a number or true/false exactly**: `5 == "5"` and `"9" < 10` are true, text it
22
+ cannot read as that type (`"five"`, `"0x10"`, empty) fails the step with an error naming the node and pins, and
23
+ text against text is never converted.
24
+ - **An automation occurrence says why it failed**: when the agent finished without success, the attention item and
25
+ the notification carry the agent's own error, never "completed". Full list: [CHANGELOG.md](CHANGELOG.md).
26
+
11
27
  ## What's new in 0.16.0
12
28
 
13
29
  - **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
14
30
  (`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
15
31
  durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
16
- 2.32.0. See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
32
+ 2.32.0 or newer (AbstractRuntime 0.17.0 requires 2.33.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
17
33
  - **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
18
34
  clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
19
35
  words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
@@ -94,7 +110,7 @@ Remote-light runtime:
94
110
  pip install abstractruntime
95
111
  ```
96
112
 
97
- The base install includes AbstractCore 2.32.0 or newer (its light install:
113
+ The base install includes AbstractCore 2.33.0 or newer (its light install:
98
114
  remote providers, tools, vision, voice, audio, music, and decision integration), plus the
99
115
  `abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
100
116
  default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
@@ -30,6 +30,7 @@ effect payloads, client construction arguments, or Runtime-owned environment var
30
30
  - Thin-mode clients can run the workflow logic while delegating inference to a server.
31
31
  - Remote mode supports AbstractCore per-request `base_url` routing (dynamic endpoint selection).
32
32
  - Tool execution can be gated by trust/sandbox policy outside the router.
33
+ - In every mode, a host stop interrupts an effect (`EffectInterrupted`: no terminal record, re-issued on the next tick); only a failure the effect itself met is recorded as failed.
33
34
 
34
35
  ### See Also
35
36
  - Implementation: [`backlog/completed/005_abstractcore_integration.md`](../backlog/completed/005_abstractcore_integration.md)
@@ -139,8 +139,9 @@ tool-approval waits retain their own contracts.
139
139
  An opt-in actor may inherit `_runtime.conversation: {enabled: true}` through native child
140
140
  workflows and VisualFlow Agent nodes. This flag does not create an extra inference call.
141
141
  Public updates enter replay only through an explicit completed `EMIT_EVENT` named
142
- `public_update`, with payload `id`, `text`, `run_id`, optional `session_id`, `iteration` and
143
- `source_call_ids`. The event's owner must match `run_id`; private diary/thinking fences are
142
+ `public_update`, with payload `id`, `text`, `run_id`, optional `session_id`, `iteration`,
143
+ `source_call_ids` and optional `kind` (`"progress"` or `"finding"`, replayed as the message's
144
+ `update_kind`). The event's owner must match `run_id`; private diary/thinking fences are
144
145
  excluded. See [replay.md](replay.md#public-conversation-messages).
145
146
 
146
147
  Actors may attach `public_action` to a proposed `TOOL_CALLS` payload with `text`,
@@ -458,13 +459,14 @@ Implementation: `src/abstractruntime/replay/` (ADR 0010). Guide: [replay.md](rep
458
459
 
459
460
  ### AbstractCore (LLM + tools)
460
461
 
461
- Requires: `pip install abstractruntime` (AbstractCore 2.32.0 or newer is part of the base install).
462
+ Requires: `pip install abstractruntime` (AbstractCore 2.33.0 or newer is part of the base install).
462
463
 
463
464
  Implementation: `src/abstractruntime/integrations/abstractcore/*`.
464
465
 
465
466
  Entry points:
466
467
  - `create_local_runtime(...)`, `create_remote_runtime(...)`, `create_hybrid_runtime(...)` (`src/abstractruntime/integrations/abstractcore/factory.py`)
467
468
  - public discovery facade: `AbstractCoreDiscoveryFacade`, `get_abstractcore_discovery_facade(...)` (`src/abstractruntime/integrations/abstractcore/discovery_facade.py`)
469
+ - model errors a host tells apart, AbstractCore's own classes: `from abstractruntime.integrations.abstractcore.discovery_facade import ModelNotDownloadedError, ModelNotFoundError` (`ModelNotDownloadedError` is a `ModelNotFoundError` whose `model` and `provider` name what to download); a host never imports `abstractcore` for them
468
470
  - public host facade: `AbstractCoreHostFacade`, `get_abstractcore_host_facade(...)` (`src/abstractruntime/integrations/abstractcore/host_facade.py`)
469
471
  - public voice library facade: `AbstractCoreVoiceFacade`, `get_abstractcore_voice_facade(...)`, `VoiceLibraryError` (`src/abstractruntime/integrations/abstractcore/voice_facade.py`): languages, cloned voices (list by language, read, rename or replace the transcript, delete), cloning from a recording, voice design, the capability catalog; local in process, remote over the AbstractCore server's `/v1` voice routes (see [Voice library](integrations/abstractcore.md#voice-library))
470
472
  - email facade: `email_facade` (AbstractCore's mail library for hosts; see [Email](#email))
@@ -259,6 +259,12 @@ ONE ordering law ([backlog 0045](backlog/planned/runtime_systemic_reliability/00
259
259
  completion/resume path increments `RuntimeHealth` (`record_error`) and
260
260
  logs a warning. Best-effort observability records (progress events,
261
261
  status events) may stay quiet; records that replay depends on may not.
262
+ 4. **A requested host stop is a crash the host announces: identical replay, no terminal record.**
263
+ A host that stops on purpose (a gateway stop or restart, a model-host restart for an update)
264
+ raises `EffectInterrupted` (`core/effect_cancellation.py`) into the effect in flight. The
265
+ runtime appends nothing terminal and re-raises; the run stays RUNNING, and the next tick sends
266
+ the effect again under the same idempotency key as attempt 1 (no retry consumed). Only a
267
+ failure the effect itself met is recorded as failed.
262
268
 
263
269
  Kill-and-replay coverage for this law lives in the crash harness
264
270
  (`tests/harness.py`, backlog 0045): for every persistence point, kill →
@@ -0,0 +1,27 @@
1
+ # 0865 — A `model_loaded` ledger event with the reserved context
2
+
3
+ > Package: AbstractRuntime (with AbstractCore residency claims)
4
+ > Type: task
5
+ > Created: 2026-10-29
6
+ > Priority: normal
7
+ > Labels: residency, ledger, observability
8
+
9
+ ## Summary
10
+
11
+ Operator ruling (2026-10-29): when a model loads it reserves the maximum context that fits (AbstractCore ADR 0010
12
+ point 8), and "never silently: the choice is written to the ledger (a model_loaded event with model, advertised context,
13
+ reserved context, free memory, buffer, reason) and to the log". AbstractCore already logs it and carries it on the
14
+ provider's residency claim (`context_reservation`: advertised, reserved, free_bytes, buffer, reason). The ledger event
15
+ is not written yet: a load happens inside a client build, outside any run's effect, so there is no step record to
16
+ attach it to.
17
+
18
+ ## Scope
19
+
20
+ - When a pooled client is built for a local model (`MultiLocalAbstractCoreLLMClient._get_client`), read the provider's
21
+ `context_reservation` and append one `model_loaded` record to the ledger of the run that triggered the build (or a
22
+ host-level ledger when no run did), with model, advertised context, reserved context, free memory, buffer, reason.
23
+ - The replay view and Observer show it as one readable line.
24
+
25
+ ## Acceptance criteria
26
+
27
+ - A chat that loads the default model leaves one `model_loaded` record with the numbers; a test is red without it.
@@ -12,7 +12,7 @@ Remote-light runtime:
12
12
  pip install abstractruntime
13
13
  ```
14
14
 
15
- This installs AbstractCore 2.32.0 or newer with remote provider, vision,
15
+ This installs AbstractCore 2.33.0 or newer with remote provider, vision,
16
16
  voice, audio, music, decision, tool, and MCP-worker support. The base install is
17
17
  remote-light: it can route multimodal workflows to hosted or OpenAI-compatible
18
18
  endpoints, but it does not select local inferencer stacks such as MLX, vLLM,
@@ -16,7 +16,7 @@ Implementation pointers (this repo):
16
16
  pip install abstractruntime
17
17
  ```
18
18
 
19
- The base install includes AbstractCore 2.32.0 or newer. That is the supported baseline for the `decision` output modality (the `output.decision` route and `/v1/decisions`), the current server auth split (`Authorization` for server auth, `X-AbstractCore-Provider-API-Key` for provider overrides), generated-media contracts, image upscaling, capability catalog, prompt-cache control-plane endpoints (including session attribution via `/acore/prompt_cache/key_meta`), host memory snapshots, the host-wide loaded-model sweep used by residency listings, the process-wide MLX residency report and eject used by model unload, durable bloc prompt-cache helpers, bindings and lifecycle operations, task-aware model residency for text/image/video/TTS/STT, current tool catalog, AbstractCore's public output-selector contract, async/sync text-generation output-selector parity, video generation endpoints, the public local vision-cache catalog helper used by Runtime discovery, vision adapter discovery plus batch/LoRA media controls, and the released shared workspace/file-filter utility surface used by Runtime packaging and integration checks.
19
+ The base install includes AbstractCore 2.33.0 or newer. That is the supported baseline for the `decision` output modality (the `output.decision` route and `/v1/decisions`), the current server auth split (`Authorization` for server auth, `X-AbstractCore-Provider-API-Key` for provider overrides), generated-media contracts, image upscaling, capability catalog, prompt-cache control-plane endpoints (including session attribution via `/acore/prompt_cache/key_meta`), host memory snapshots, the host-wide loaded-model sweep used by residency listings, the process-wide MLX residency report and eject used by model unload, durable bloc prompt-cache helpers, bindings and lifecycle operations, task-aware model residency for text/image/video/TTS/STT, current tool catalog, AbstractCore's public output-selector contract, async/sync text-generation output-selector parity, video generation endpoints, the public local vision-cache catalog helper used by Runtime discovery, vision adapter discovery plus batch/LoRA media controls, and the released shared workspace/file-filter utility surface used by Runtime packaging and integration checks.
20
20
 
21
21
  The base install also includes the remote-light media/capability plugins needed
22
22
  for AbstractCore's multimodal `generate(..., output=...)` path. Local
@@ -486,7 +486,7 @@ When both hold, every `LLM_CALL` of the run streams from the provider and the ru
486
486
  - `call_id` is the `step_id` of the `LLM_CALL` ledger record that later holds the final answer, so a client can replace its live text with the durable result.
487
487
  - `seq` counts the events of one call from 0, `llm.delta_end` included.
488
488
  - `channel` is `content` (the answer) or `reasoning` (the model's thinking). Reasoning arrives from the provider's reasoning stream, and inline `<think>…</think>` markup is split out of the content live, so clients can hide or fold it. The markup itself is never sent.
489
- - `reason` is `completed`, `failed`, `cancelled` or `unavailable`. Every live fragment of a call is sent before the call's durable record is written (the last batch is flushed first, and later fragments are dropped); every call then ends with exactly one `llm.delta_end`, sent after that record is in the ledger. Each retry attempt is its own call with its own `call_id`; so is the rare re-run of an attempt interrupted by a stray kill (`<step_id>:reinvoke`), whose interrupted first run ends `cancelled` with `detail: "reinvoked"` (the run goes on; a client can say "reply restarted" rather than "stopped").
489
+ - `reason` is `completed`, `failed`, `cancelled` or `unavailable`. Every live fragment of a call is sent before the call's durable record is written (the last batch is flushed first, and later fragments are dropped); every call then ends with exactly one `llm.delta_end`, sent after that record is in the ledger. Each retry attempt is its own call with its own `call_id`; so is the rare re-run of an attempt interrupted by a stray kill (`<step_id>:reinvoke`), whose interrupted first run ends `cancelled` with `detail: "reinvoked"` (the run goes on; a client can say "reply restarted" rather than "stopped"). A call interrupted because its host stopped on purpose (`EffectInterrupted`) ends `cancelled` with `detail: "interrupted"`: the run is suspended, not stopped, and the call is sent again when the host is back.
490
490
  - Tool-call markup a local model writes as text (`<tool_call>`, `<|tool_call|>`, `<function_call>`, …) never reaches the live text. AbstractCore already removes it from streamed content; the runtime also stops the live content of a call at the first such marker. The final record carries the tool calls.
491
491
  - Harmony transcripts (gpt-oss) are split live: the `final` channel streams as content, `analysis` as reasoning, and a tool call (`commentary to=functions.…`) is held back. The framing tokens are never sent.
492
492
  - Text is coalesced: the first fragment is sent immediately, later fragments are grouped over about 40 ms.
@@ -25,7 +25,10 @@ client_copy = apply_delta(doc, delta) # == view.to_json()
25
25
 
26
26
  Explicit completed `public_update` events become assistant messages with
27
27
  `kind: "public_update"`, stable run-scoped `id`, `text`, `run_id`, optional `session_id`,
28
- `iteration`, `source_call_ids`, and normal ledger provenance. Replay does not turn reasoning,
28
+ `iteration`, `source_call_ids`, `update_kind`, and normal ledger provenance. `update_kind` is
29
+ the producer's type for the update: `"finding"` (a fact or piece of evidence the actor
30
+ established) or `"progress"` (what it is doing); an event without a `kind` of `"finding"`
31
+ replays as `"progress"`. Replay copies the type and never infers it from the text. Replay does not turn reasoning,
29
32
  raw tool output or a marker inside model text into public speech. Diary/thinking fences
30
33
  are excluded. These are actor-authored updates; their wording alone is not proof of a fact
31
34
  or of completed work.
@@ -102,7 +105,7 @@ Each rule below was once a divergence between clients:
102
105
  | `interaction` | the person-facing wait, or `null`: `kind` (`tool_approval`, `ask_user`, `event`), `run_id`, `wait_key`, `step_id`, `seq`, `prompt`, `choices`, `allow_free_text`, `details`, `tool_calls` (resolved), `activity_id`, `answer_payload`, and `command` (the resume a client sends to answer it) |
103
106
  | `open_waits[]` | every open wait of the tree, with `person_facing` |
104
107
  | `messages[]` | verbatim turns: `role`, `kind` (`prompt`, `answer`, `question`, `final`, `event`), `text`, provenance (`run_id`, `step_ids`, `seqs`, `artifact_ids`, `source`) |
105
- | `activities[]` | one per execution: `kind`, `name`, `status`, `node_id`, `execution_id`, `seqs`, `step_ids`, `tool_calls[]` (each call's status, output, error), `wait` (`kind`, `wait_key`, `ended_by`: `resume`, `later_step`, `terminal`), `usage`, `child_run_id`, `progress` |
108
+ | `activities[]` | one per execution: `kind`, `name`, `status`, `node_id`, `execution_id`, `seqs`, `step_ids`, `tool_calls[]` (each call's `id`, status, output, error, and `call_id`, the model's own call id, when `id` is a runtime call id; public updates cite `call_id`), `wait` (`kind`, `wait_key`, `ended_by`: `resume`, `later_step`, `terminal`), `usage`, `child_run_id`, `progress` |
106
109
  | `artifacts[]` | every `{"$artifact": id}` reference, with the run, step, seq and JSON path that produced it |
107
110
  | `usage` | tokens and LLM calls summed over the tree |
108
111
  | `warnings[]` | what the view could not show (records before a window, an unresolved `$slim`) |
@@ -20,7 +20,7 @@ Fix:
20
20
  - Install or upgrade the base Runtime package. LLM/tools integration, common
21
21
  remote-light multimodal dependencies, and the MCP worker entry point are part
22
22
  of the base install.
23
- - The current AbstractCore integration expects `abstractcore>=2.32.0`.
23
+ - The current AbstractCore integration expects `abstractcore>=2.33.0`.
24
24
 
25
25
  Verify:
26
26
 
@@ -383,6 +383,21 @@ Cause and fix:
383
383
 
384
384
  See [automations.md, `feed.item@1`](automations.md#feeditem1).
385
385
 
386
+ ## A Compare step fails with "is text (...), not a number"
387
+
388
+ Symptom:
389
+ - A run stops at a Compare node: "Compare 'Is five' (node same) ==: b is text ('five'), not a number; a is a number
390
+ (5)."
391
+
392
+ Cause and fix:
393
+ - One side is a number (or true/false) and the other is text that is not one. Compare reads text next to a number as
394
+ that number (`"5"`, `" 5 "`, `"-2.5"`, `"1e3"`) and text next to true/false as `true` or `false` (any case), so
395
+ `5 == "5"` is true. Anything else is refused: words (`"five"`), `"1_000"`, `"0x10"`, `"inf"`, `"nan"`, full-width
396
+ digits, and empty text. Give that input a number (or true/false), or, if both sides are meant to be text, wire them
397
+ so both carry text. See [Pin defaults are typed values](workflow-bundles.md#pin-defaults-are-typed-values).
398
+ - An error ending in "these cannot be ordered" means `<`, `<=`, `>` or `>=` met values Python cannot order, often an
399
+ unset value (`None`): give the input a value, or compare with `==`.
400
+
386
401
  ## MCP worker command is not found
387
402
 
388
403
  Symptom:
@@ -100,6 +100,18 @@ Authoring guidance:
100
100
  - keep route keys unique per target node
101
101
  - use one normal data edge or `pinDefaults` for the fallback value, then add `inputRouteOverrides` only for routes that need a different value
102
102
 
103
+ ## Pin defaults are typed values
104
+
105
+ A `pinDefaults` value is a JSON value with its type (`5`, `"5"`, `true`, `[]`), and the runtime uses it as stored.
106
+ AbstractFlow stores a value typed on a node card with the type of its input (ADR 0049 in the AbstractFramework
107
+ repository). Compare (`compare`) makes one conversion: when one side is a number or true/false and the other is text,
108
+ the text is read exactly as that type, by the editor's grammar (a decimal number: `"5"`, `"-2.5"`, `".5"`, `"1e3"`; or
109
+ `true`/`false` in any case), so `5 == "5"` and `"9" < 10` are true, whether the text was saved by AbstractFlow 0.13.0
110
+ or arrives at run time from a form, an API input or a model. Text that is not such a value (`"five"`, `"1_000"`,
111
+ `"0x10"`, `"inf"`, empty), or an order between values Python cannot order (`None > 3`), fails the step with an error
112
+ that names the node, instead of answering `False`. Text against text is never converted (`"10" > "9"` compares text).
113
+ true/false compares with numbers as Python's booleans do (`True == 1`).
114
+
103
115
  ## See also
104
116
 
105
117
  - `architecture.md` — VisualFlow → WorkflowSpec compilation path
@@ -55,16 +55,32 @@ See llms.txt for the linked index.
55
55
 
56
56
  It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
57
57
 
58
- **Version:** 0.16.0 • **Python:** 3.10+
58
+ **Version:** 0.17.0 • **Python:** 3.10+
59
59
 
60
60
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
61
61
 
62
+ ## What's new in 0.17.0
63
+
64
+ - **A host stop suspends a run, it never fails it**: a host that stops on purpose raises `EffectInterrupted` into
65
+ the effect in flight; the runtime writes no terminal record, the run stays running at its last durable step, and
66
+ the next tick sends the call again as attempt 1 (no retry used, no automation outcome, nothing notified).
67
+ - **Public updates are typed**: a `public_update` in the replay view carries `update_kind`, `"finding"` (a fact or
68
+ piece of evidence the actor established) or `"progress"` (what it is doing), so a client can list a conversation's
69
+ findings. See [docs/replay.md](docs/replay.md#public-conversation-messages).
70
+ - **Replayed tool calls keep the model's call id**: an `activities[].tool_calls[]` row also carries `call_id`, the id
71
+ a public update's `source_call_ids` cite, so a finding resolves to the results it cites.
72
+ - **Compare reads text next to a number or true/false exactly**: `5 == "5"` and `"9" < 10` are true, text it
73
+ cannot read as that type (`"five"`, `"0x10"`, empty) fails the step with an error naming the node and pins, and
74
+ text against text is never converted.
75
+ - **An automation occurrence says why it failed**: when the agent finished without success, the attention item and
76
+ the notification carry the agent's own error, never "completed". Full list: [CHANGELOG.md](CHANGELOG.md).
77
+
62
78
  ## What's new in 0.16.0
63
79
 
64
80
  - **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
65
81
  (`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
66
82
  durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
67
- 2.32.0. See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
83
+ 2.32.0 or newer (AbstractRuntime 0.17.0 requires 2.33.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
68
84
  - **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
69
85
  clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
70
86
  words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
@@ -145,7 +161,7 @@ Remote-light runtime:
145
161
  pip install abstractruntime
146
162
  ```
147
163
 
148
- The base install includes AbstractCore 2.32.0 or newer (its light install:
164
+ The base install includes AbstractCore 2.33.0 or newer (its light install:
149
165
  remote providers, tools, vision, voice, audio, music, and decision integration), plus the
150
166
  `abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
151
167
  default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
@@ -361,7 +377,7 @@ Remote-light runtime:
361
377
  pip install abstractruntime
362
378
  ```
363
379
 
364
- This installs AbstractCore 2.32.0 or newer with remote provider, vision,
380
+ This installs AbstractCore 2.33.0 or newer with remote provider, vision,
365
381
  voice, audio, music, decision, tool, and MCP-worker support. The base install is
366
382
  remote-light: it can route multimodal workflows to hosted or OpenAI-compatible
367
383
  endpoints, but it does not select local inferencer stacks such as MLX, vLLM,
@@ -764,6 +780,12 @@ ONE ordering law ([backlog 0045](backlog/planned/runtime_systemic_reliability/00
764
780
  completion/resume path increments `RuntimeHealth` (`record_error`) and
765
781
  logs a warning. Best-effort observability records (progress events,
766
782
  status events) may stay quiet; records that replay depends on may not.
783
+ 4. **A requested host stop is a crash the host announces: identical replay, no terminal record.**
784
+ A host that stops on purpose (a gateway stop or restart, a model-host restart for an update)
785
+ raises `EffectInterrupted` (`core/effect_cancellation.py`) into the effect in flight. The
786
+ runtime appends nothing terminal and re-raises; the run stays RUNNING, and the next tick sends
787
+ the effect again under the same idempotency key as attempt 1 (no retry consumed). Only a
788
+ failure the effect itself met is recorded as failed.
767
789
 
768
790
  Kill-and-replay coverage for this law lives in the crash harness
769
791
  (`tests/harness.py`, backlog 0045): for every persistence point, kill →
@@ -1215,8 +1237,9 @@ tool-approval waits retain their own contracts.
1215
1237
  An opt-in actor may inherit `_runtime.conversation: {enabled: true}` through native child
1216
1238
  workflows and VisualFlow Agent nodes. This flag does not create an extra inference call.
1217
1239
  Public updates enter replay only through an explicit completed `EMIT_EVENT` named
1218
- `public_update`, with payload `id`, `text`, `run_id`, optional `session_id`, `iteration` and
1219
- `source_call_ids`. The event's owner must match `run_id`; private diary/thinking fences are
1240
+ `public_update`, with payload `id`, `text`, `run_id`, optional `session_id`, `iteration`,
1241
+ `source_call_ids` and optional `kind` (`"progress"` or `"finding"`, replayed as the message's
1242
+ `update_kind`). The event's owner must match `run_id`; private diary/thinking fences are
1220
1243
  excluded. See [replay.md](replay.md#public-conversation-messages).
1221
1244
 
1222
1245
  Actors may attach `public_action` to a proposed `TOOL_CALLS` payload with `text`,
@@ -1534,13 +1557,14 @@ Implementation: `src/abstractruntime/replay/` (ADR 0010). Guide: [replay.md](rep
1534
1557
 
1535
1558
  ### AbstractCore (LLM + tools)
1536
1559
 
1537
- Requires: `pip install abstractruntime` (AbstractCore 2.32.0 or newer is part of the base install).
1560
+ Requires: `pip install abstractruntime` (AbstractCore 2.33.0 or newer is part of the base install).
1538
1561
 
1539
1562
  Implementation: `src/abstractruntime/integrations/abstractcore/*`.
1540
1563
 
1541
1564
  Entry points:
1542
1565
  - `create_local_runtime(...)`, `create_remote_runtime(...)`, `create_hybrid_runtime(...)` (`src/abstractruntime/integrations/abstractcore/factory.py`)
1543
1566
  - public discovery facade: `AbstractCoreDiscoveryFacade`, `get_abstractcore_discovery_facade(...)` (`src/abstractruntime/integrations/abstractcore/discovery_facade.py`)
1567
+ - model errors a host tells apart, AbstractCore's own classes: `from abstractruntime.integrations.abstractcore.discovery_facade import ModelNotDownloadedError, ModelNotFoundError` (`ModelNotDownloadedError` is a `ModelNotFoundError` whose `model` and `provider` name what to download); a host never imports `abstractcore` for them
1544
1568
  - public host facade: `AbstractCoreHostFacade`, `get_abstractcore_host_facade(...)` (`src/abstractruntime/integrations/abstractcore/host_facade.py`)
1545
1569
  - public voice library facade: `AbstractCoreVoiceFacade`, `get_abstractcore_voice_facade(...)`, `VoiceLibraryError` (`src/abstractruntime/integrations/abstractcore/voice_facade.py`): languages, cloned voices (list by language, read, rename or replace the transcript, delete), cloning from a recording, voice design, the capability catalog; local in process, remote over the AbstractCore server's `/v1` voice routes (see [Voice library](integrations/abstractcore.md#voice-library))
1546
1570
  - email facade: `email_facade` (AbstractCore's mail library for hosts; see [Email](#email))
@@ -2114,7 +2138,7 @@ Fix:
2114
2138
  - Install or upgrade the base Runtime package. LLM/tools integration, common
2115
2139
  remote-light multimodal dependencies, and the MCP worker entry point are part
2116
2140
  of the base install.
2117
- - The current AbstractCore integration expects `abstractcore>=2.32.0`.
2141
+ - The current AbstractCore integration expects `abstractcore>=2.33.0`.
2118
2142
 
2119
2143
  Verify:
2120
2144
 
@@ -2477,6 +2501,21 @@ Cause and fix:
2477
2501
 
2478
2502
  See [automations.md, `feed.item@1`](automations.md#feeditem1).
2479
2503
 
2504
+ ## A Compare step fails with "is text (...), not a number"
2505
+
2506
+ Symptom:
2507
+ - A run stops at a Compare node: "Compare 'Is five' (node same) ==: b is text ('five'), not a number; a is a number
2508
+ (5)."
2509
+
2510
+ Cause and fix:
2511
+ - One side is a number (or true/false) and the other is text that is not one. Compare reads text next to a number as
2512
+ that number (`"5"`, `" 5 "`, `"-2.5"`, `"1e3"`) and text next to true/false as `true` or `false` (any case), so
2513
+ `5 == "5"` is true. Anything else is refused: words (`"five"`), `"1_000"`, `"0x10"`, `"inf"`, `"nan"`, full-width
2514
+ digits, and empty text. Give that input a number (or true/false), or, if both sides are meant to be text, wire them
2515
+ so both carry text. See [Pin defaults are typed values](workflow-bundles.md#pin-defaults-are-typed-values).
2516
+ - An error ending in "these cannot be ordered" means `<`, `<=`, `>` or `>=` met values Python cannot order, often an
2517
+ unset value (`None`): give the input a value, or compare with `==`.
2518
+
2480
2519
  ## MCP worker command is not found
2481
2520
 
2482
2521
  Symptom:
@@ -2515,7 +2554,7 @@ Implementation pointers (this repo):
2515
2554
  pip install abstractruntime
2516
2555
  ```
2517
2556
 
2518
- The base install includes AbstractCore 2.32.0 or newer. That is the supported baseline for the `decision` output modality (the `output.decision` route and `/v1/decisions`), the current server auth split (`Authorization` for server auth, `X-AbstractCore-Provider-API-Key` for provider overrides), generated-media contracts, image upscaling, capability catalog, prompt-cache control-plane endpoints (including session attribution via `/acore/prompt_cache/key_meta`), host memory snapshots, the host-wide loaded-model sweep used by residency listings, the process-wide MLX residency report and eject used by model unload, durable bloc prompt-cache helpers, bindings and lifecycle operations, task-aware model residency for text/image/video/TTS/STT, current tool catalog, AbstractCore's public output-selector contract, async/sync text-generation output-selector parity, video generation endpoints, the public local vision-cache catalog helper used by Runtime discovery, vision adapter discovery plus batch/LoRA media controls, and the released shared workspace/file-filter utility surface used by Runtime packaging and integration checks.
2557
+ The base install includes AbstractCore 2.33.0 or newer. That is the supported baseline for the `decision` output modality (the `output.decision` route and `/v1/decisions`), the current server auth split (`Authorization` for server auth, `X-AbstractCore-Provider-API-Key` for provider overrides), generated-media contracts, image upscaling, capability catalog, prompt-cache control-plane endpoints (including session attribution via `/acore/prompt_cache/key_meta`), host memory snapshots, the host-wide loaded-model sweep used by residency listings, the process-wide MLX residency report and eject used by model unload, durable bloc prompt-cache helpers, bindings and lifecycle operations, task-aware model residency for text/image/video/TTS/STT, current tool catalog, AbstractCore's public output-selector contract, async/sync text-generation output-selector parity, video generation endpoints, the public local vision-cache catalog helper used by Runtime discovery, vision adapter discovery plus batch/LoRA media controls, and the released shared workspace/file-filter utility surface used by Runtime packaging and integration checks.
2519
2558
 
2520
2559
  The base install also includes the remote-light media/capability plugins needed
2521
2560
  for AbstractCore's multimodal `generate(..., output=...)` path. Local
@@ -2985,7 +3024,7 @@ When both hold, every `LLM_CALL` of the run streams from the provider and the ru
2985
3024
  - `call_id` is the `step_id` of the `LLM_CALL` ledger record that later holds the final answer, so a client can replace its live text with the durable result.
2986
3025
  - `seq` counts the events of one call from 0, `llm.delta_end` included.
2987
3026
  - `channel` is `content` (the answer) or `reasoning` (the model's thinking). Reasoning arrives from the provider's reasoning stream, and inline `<think>…</think>` markup is split out of the content live, so clients can hide or fold it. The markup itself is never sent.
2988
- - `reason` is `completed`, `failed`, `cancelled` or `unavailable`. Every live fragment of a call is sent before the call's durable record is written (the last batch is flushed first, and later fragments are dropped); every call then ends with exactly one `llm.delta_end`, sent after that record is in the ledger. Each retry attempt is its own call with its own `call_id`; so is the rare re-run of an attempt interrupted by a stray kill (`<step_id>:reinvoke`), whose interrupted first run ends `cancelled` with `detail: "reinvoked"` (the run goes on; a client can say "reply restarted" rather than "stopped").
3027
+ - `reason` is `completed`, `failed`, `cancelled` or `unavailable`. Every live fragment of a call is sent before the call's durable record is written (the last batch is flushed first, and later fragments are dropped); every call then ends with exactly one `llm.delta_end`, sent after that record is in the ledger. Each retry attempt is its own call with its own `call_id`; so is the rare re-run of an attempt interrupted by a stray kill (`<step_id>:reinvoke`), whose interrupted first run ends `cancelled` with `detail: "reinvoked"` (the run goes on; a client can say "reply restarted" rather than "stopped"). A call interrupted because its host stopped on purpose (`EffectInterrupted`) ends `cancelled` with `detail: "interrupted"`: the run is suspended, not stopped, and the call is sent again when the host is back.
2989
3028
  - Tool-call markup a local model writes as text (`<tool_call>`, `<|tool_call|>`, `<function_call>`, …) never reaches the live text. AbstractCore already removes it from streamed content; the runtime also stops the live content of a call at the first such marker. The final record carries the tool calls.
2990
3029
  - Harmony transcripts (gpt-oss) are split live: the `final` channel streams as content, `analysis` as reasoning, and a tool call (`commentary to=functions.…`) is held back. The framing tokens are never sent.
2991
3030
  - Text is coalesced: the first fragment is sent immediately, later fragments are grouped over about 40 ms.
@@ -6543,7 +6582,10 @@ client_copy = apply_delta(doc, delta) # == view.to_json()
6543
6582
 
6544
6583
  Explicit completed `public_update` events become assistant messages with
6545
6584
  `kind: "public_update"`, stable run-scoped `id`, `text`, `run_id`, optional `session_id`,
6546
- `iteration`, `source_call_ids`, and normal ledger provenance. Replay does not turn reasoning,
6585
+ `iteration`, `source_call_ids`, `update_kind`, and normal ledger provenance. `update_kind` is
6586
+ the producer's type for the update: `"finding"` (a fact or piece of evidence the actor
6587
+ established) or `"progress"` (what it is doing); an event without a `kind` of `"finding"`
6588
+ replays as `"progress"`. Replay copies the type and never infers it from the text. Replay does not turn reasoning,
6547
6589
  raw tool output or a marker inside model text into public speech. Diary/thinking fences
6548
6590
  are excluded. These are actor-authored updates; their wording alone is not proof of a fact
6549
6591
  or of completed work.
@@ -6620,7 +6662,7 @@ Each rule below was once a divergence between clients:
6620
6662
  | `interaction` | the person-facing wait, or `null`: `kind` (`tool_approval`, `ask_user`, `event`), `run_id`, `wait_key`, `step_id`, `seq`, `prompt`, `choices`, `allow_free_text`, `details`, `tool_calls` (resolved), `activity_id`, `answer_payload`, and `command` (the resume a client sends to answer it) |
6621
6663
  | `open_waits[]` | every open wait of the tree, with `person_facing` |
6622
6664
  | `messages[]` | verbatim turns: `role`, `kind` (`prompt`, `answer`, `question`, `final`, `event`), `text`, provenance (`run_id`, `step_ids`, `seqs`, `artifact_ids`, `source`) |
6623
- | `activities[]` | one per execution: `kind`, `name`, `status`, `node_id`, `execution_id`, `seqs`, `step_ids`, `tool_calls[]` (each call's status, output, error), `wait` (`kind`, `wait_key`, `ended_by`: `resume`, `later_step`, `terminal`), `usage`, `child_run_id`, `progress` |
6665
+ | `activities[]` | one per execution: `kind`, `name`, `status`, `node_id`, `execution_id`, `seqs`, `step_ids`, `tool_calls[]` (each call's `id`, status, output, error, and `call_id`, the model's own call id, when `id` is a runtime call id; public updates cite `call_id`), `wait` (`kind`, `wait_key`, `ended_by`: `resume`, `later_step`, `terminal`), `usage`, `child_run_id`, `progress` |
6624
6666
  | `artifacts[]` | every `{"$artifact": id}` reference, with the run, step, seq and JSON path that produced it |
6625
6667
  | `usage` | tokens and LLM calls summed over the tree |
6626
6668
  | `warnings[]` | what the view could not show (records before a window, an unresolved `$slim`) |
@@ -6865,6 +6907,18 @@ Authoring guidance:
6865
6907
  - keep route keys unique per target node
6866
6908
  - use one normal data edge or `pinDefaults` for the fallback value, then add `inputRouteOverrides` only for routes that need a different value
6867
6909
 
6910
+ ## Pin defaults are typed values
6911
+
6912
+ A `pinDefaults` value is a JSON value with its type (`5`, `"5"`, `true`, `[]`), and the runtime uses it as stored.
6913
+ AbstractFlow stores a value typed on a node card with the type of its input (ADR 0049 in the AbstractFramework
6914
+ repository). Compare (`compare`) makes one conversion: when one side is a number or true/false and the other is text,
6915
+ the text is read exactly as that type, by the editor's grammar (a decimal number: `"5"`, `"-2.5"`, `".5"`, `"1e3"`; or
6916
+ `true`/`false` in any case), so `5 == "5"` and `"9" < 10` are true, whether the text was saved by AbstractFlow 0.13.0
6917
+ or arrives at run time from a form, an API input or a model. Text that is not such a value (`"five"`, `"1_000"`,
6918
+ `"0x10"`, `"inf"`, empty), or an order between values Python cannot order (`None > 3`), fails the step with an error
6919
+ that names the node, instead of answering `False`. Text against text is never converted (`"10" > "9"` compares text).
6920
+ true/false compares with numbers as Python's booleans do (`True == 1`).
6921
+
6868
6922
  ## See also
6869
6923
 
6870
6924
  - `architecture.md` — VisualFlow → WorkflowSpec compilation path
@@ -3,10 +3,10 @@
3
3
  > Durable workflow runtime (interrupt → checkpoint → resume) with an append-only execution ledger.
4
4
 
5
5
  - Python: 3.10+ (see `pyproject.toml`)
6
- - Version: 0.16.0
6
+ - Version: 0.17.0
7
7
  - Ecosystem: [AbstractFramework](https://github.com/lpalbou/AbstractFramework) umbrella, integrates with [AbstractCore](https://github.com/lpalbou/abstractcore)
8
8
  - Hard invariant: `RunState.vars` must be JSON-serializable (`src/abstractruntime/core/models.py`)
9
- - Current AbstractCore baseline: base `abstractruntime` requires AbstractCore 2.32.0 or newer with its light install (remote providers, tools and the MCP worker, media routing, the `decision` output modality); `abstractruntime[apple]` and `abstractruntime[gpu]` require AbstractCore's `apple` and `gpu` settings (`pyproject.toml`)
9
+ - Current AbstractCore baseline: base `abstractruntime` requires AbstractCore 2.33.0 or newer with its light install (remote providers, tools and the MCP worker, media routing, the `decision` output modality); `abstractruntime[apple]` and `abstractruntime[gpu]` require AbstractCore's `apple` and `gpu` settings (`pyproject.toml`)
10
10
  - Install profiles: base `abstractruntime` is remote-light with MCP, generated media routing, and Runtime-owned permissive PDF read/write nodes; `abstractruntime[apple]` and `abstractruntime[gpu]` add local inferencer stacks.
11
11
  - Config boundary: Runtime does not read `ABSTRACTGATEWAY_*`; Gateway-owned config should be translated into explicit Runtime inputs or Runtime-owned env names. Hosts can attach `resolve_provider_endpoint_profile(provider_id)` to the LLM client; Runtime treats it as an optional resolver hook, injects transient provider/base URL/key params for the call, and redacts secret-like params from persisted observability.
12
12
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "AbstractRuntime"
7
- version = "0.16.0"
7
+ version = "0.17.0"
8
8
  description = "AbstractRuntime: a durable graph runner designed to pair with AbstractCore."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -69,7 +69,8 @@ dependencies = [
69
69
  # AbstractVoice/Vision/Music/3D plugin floors.
70
70
  # 2.32.0: the `decision` output modality (`output.decision` route, `/v1/decisions`,
71
71
  # `MultimodalGenerateResponse.decision`).
72
- "abstractcore>=2.32.0",
72
+ # 2.33.0: the release wave's Core (typed `ModelNotDownloadedError`, AbstractVoice 0.20.0 floor).
73
+ "abstractcore>=2.33.0",
73
74
  "openai<3.0.0,>=1.109.1",
74
75
  "httpx<1.0.0,>=0.28.1",
75
76
  "anyio<5.0.0,>=4.12.1",
@@ -86,12 +87,12 @@ dependencies = [
86
87
 
87
88
  [project.optional-dependencies]
88
89
  apple = [
89
- "abstractcore[apple]>=2.32.0",
90
+ "abstractcore[apple]>=2.33.0",
90
91
  "setuptools<82.0.0,>=80.10.2",
91
92
  ]
92
93
 
93
94
  gpu = [
94
- "abstractcore[gpu]>=2.32.0",
95
+ "abstractcore[gpu]>=2.33.0",
95
96
  # vLLM 0.9-0.19 caps setuptools below 80; 77.0.3 is still a modern floor.
96
97
  "setuptools<82.0.0,>=77.0.3",
97
98
  ]