AbstractRuntime 0.5.1__tar.gz → 0.6.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 (648) hide show
  1. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/CHANGELOG.md +125 -0
  2. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/PKG-INFO +6 -3
  3. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/README.md +5 -2
  4. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/README.md +1 -0
  5. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/api.md +53 -1
  6. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/architecture.md +68 -2
  7. abstractruntime-0.6.0/docs/automations.md +622 -0
  8. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/README.md +16 -8
  9. {abstractruntime-0.5.1/docs/backlog/planned → abstractruntime-0.6.0/docs/backlog/completed}/0847_automations_v1_controller_contracts_occurrences_triggers.md +113 -1
  10. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +10 -2
  11. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/faq.md +57 -0
  12. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/troubleshooting.md +115 -0
  13. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/llms-full.txt +928 -5
  14. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/llms.txt +2 -1
  15. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/pyproject.toml +7 -1
  16. abstractruntime-0.6.0/release-notes.md +122 -0
  17. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/scripts/generate_llms_full.py +1 -0
  18. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/__init__.py +14 -1
  19. abstractruntime-0.6.0/src/abstractruntime/automation_queries.py +201 -0
  20. abstractruntime-0.6.0/src/abstractruntime/automations/__init__.py +84 -0
  21. abstractruntime-0.6.0/src/abstractruntime/automations/adapters.py +86 -0
  22. abstractruntime-0.6.0/src/abstractruntime/automations/attention.py +310 -0
  23. abstractruntime-0.6.0/src/abstractruntime/automations/bundle.py +84 -0
  24. abstractruntime-0.6.0/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +161 -0
  25. abstractruntime-0.6.0/src/abstractruntime/automations/bundles/automation-controller/manifest.json +22 -0
  26. abstractruntime-0.6.0/src/abstractruntime/automations/commands.py +368 -0
  27. abstractruntime-0.6.0/src/abstractruntime/automations/controller.py +604 -0
  28. abstractruntime-0.6.0/src/abstractruntime/automations/ledger.py +260 -0
  29. abstractruntime-0.6.0/src/abstractruntime/automations/models.py +494 -0
  30. abstractruntime-0.6.0/src/abstractruntime/automations/service.py +544 -0
  31. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/core/__init__.py +2 -1
  32. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/core/models.py +2 -1
  33. abstractruntime-0.6.0/src/abstractruntime/core/run_attribution.py +303 -0
  34. abstractruntime-0.6.0/src/abstractruntime/core/run_identity.py +114 -0
  35. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/core/run_lifecycle.py +15 -0
  36. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/core/runtime.py +207 -7
  37. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/history_bundle.py +26 -110
  38. abstractruntime-0.6.0/src/abstractruntime/integrations/abstractcore/tool_effects.py +160 -0
  39. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +74 -2
  40. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/session_history.py +150 -14
  41. abstractruntime-0.6.0/src/abstractruntime/session_turns.py +289 -0
  42. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/storage/__init__.py +11 -1
  43. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/storage/base.py +56 -2
  44. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/storage/in_memory.py +35 -2
  45. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/storage/json_files.py +352 -9
  46. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/storage/offloading.py +57 -7
  47. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/storage/sqlite.py +346 -68
  48. abstractruntime-0.6.0/src/abstractruntime/triggers/__init__.py +52 -0
  49. abstractruntime-0.6.0/src/abstractruntime/triggers/manual.py +86 -0
  50. abstractruntime-0.6.0/src/abstractruntime/triggers/protocol.py +199 -0
  51. abstractruntime-0.6.0/src/abstractruntime/triggers/registry.py +202 -0
  52. abstractruntime-0.6.0/src/abstractruntime/triggers/schedule.py +249 -0
  53. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/utils/workspace_paths.py +85 -4
  54. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/compiler.py +30 -1
  55. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/visual/executor.py +41 -18
  56. abstractruntime-0.6.0/tests/automation_harness.py +177 -0
  57. abstractruntime-0.6.0/tests/test_automation_commands.py +414 -0
  58. abstractruntime-0.6.0/tests/test_automation_controller.py +201 -0
  59. abstractruntime-0.6.0/tests/test_automation_controller_recovery.py +205 -0
  60. abstractruntime-0.6.0/tests/test_automation_definition.py +166 -0
  61. abstractruntime-0.6.0/tests/test_automation_discussion_isolation.py +310 -0
  62. abstractruntime-0.6.0/tests/test_automation_growing_context.py +90 -0
  63. abstractruntime-0.6.0/tests/test_automation_index.py +275 -0
  64. abstractruntime-0.6.0/tests/test_automation_next_fire.py +100 -0
  65. abstractruntime-0.6.0/tests/test_automation_occurrence_recovery.py +169 -0
  66. abstractruntime-0.6.0/tests/test_automation_replay_read_only.py +77 -0
  67. abstractruntime-0.6.0/tests/test_automation_retry.py +100 -0
  68. abstractruntime-0.6.0/tests/test_automation_session_turns.py +310 -0
  69. abstractruntime-0.6.0/tests/test_automation_status.py +88 -0
  70. abstractruntime-0.6.0/tests/test_automation_tool_approval.py +181 -0
  71. abstractruntime-0.6.0/tests/test_controller_bundle_packaged.py +65 -0
  72. abstractruntime-0.6.0/tests/test_create_if_absent.py +227 -0
  73. abstractruntime-0.6.0/tests/test_discussion_session_anchor.py +123 -0
  74. abstractruntime-0.6.0/tests/test_run_index_workspace_root.py +106 -0
  75. abstractruntime-0.6.0/tests/test_run_mutation_lock.py +129 -0
  76. abstractruntime-0.6.0/tests/test_session_start_cost.py +189 -0
  77. abstractruntime-0.6.0/tests/test_trigger_registry.py +122 -0
  78. abstractruntime-0.6.0/tests/test_trigger_schedule_math.py +207 -0
  79. abstractruntime-0.6.0/tests/test_workspace_read_only.py +363 -0
  80. abstractruntime-0.5.1/release-notes.md +0 -12
  81. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/.github/workflows/ci.yml +0 -0
  82. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/.github/workflows/release.yml +0 -0
  83. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/.gitignore +0 -0
  84. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/ACKNOWLEDGMENTS.md +0 -0
  85. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/CODE_OF_CONDUCT.md +0 -0
  86. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/CONTRIBUTING.md +0 -0
  87. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/LICENSE +0 -0
  88. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/ROADMAP.md +0 -0
  89. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/SECURITY.md +0 -0
  90. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  91. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
  92. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  93. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
  94. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
  95. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
  96. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
  97. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/adr/README.md +0 -0
  98. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/artifacts.md +0 -0
  99. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  100. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  101. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
  102. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
  103. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
  104. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
  105. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
  106. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
  107. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/003_wait_primitives.md +0 -0
  108. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
  109. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
  110. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
  111. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
  112. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  113. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  114. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  115. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  116. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/009_artifact_store.md +0 -0
  117. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  118. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  119. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  120. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  121. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  122. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
  123. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
  124. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
  125. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
  126. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
  127. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
  128. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
  129. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
  130. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
  131. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
  132. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
  133. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  134. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  135. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  136. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  137. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
  138. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  139. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  140. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  141. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/deprecated/004_tests.md +0 -0
  142. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  143. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  144. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  145. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  146. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/deprecated/README.md +0 -0
  147. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  148. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
  149. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  150. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  151. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  152. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  153. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
  154. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
  155. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
  156. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
  157. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
  158. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
  159. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
  160. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
  161. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_portability/README.md +0 -0
  162. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
  163. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
  164. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
  165. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
  166. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
  167. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
  168. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
  169. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
  170. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
  171. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
  172. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
  173. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
  174. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
  175. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
  176. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
  177. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
  178. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
  179. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
  180. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
  181. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
  182. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
  183. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
  184. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
  185. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
  186. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
  187. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
  188. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
  189. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
  190. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
  191. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/entity-runtime.md +0 -0
  192. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/evidence.md +0 -0
  193. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/getting-started.md +0 -0
  194. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/integrations/abstractcore.md +0 -0
  195. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/limits.md +0 -0
  196. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/manual_testing.md +0 -0
  197. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/mcp-worker.md +0 -0
  198. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/proposal.md +0 -0
  199. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/provenance.md +0 -0
  200. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/snapshots.md +0 -0
  201. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/tool-approval.md +0 -0
  202. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/tools-comms.md +0 -0
  203. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/docs/workflow-bundles.md +0 -0
  204. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/emails.config.example.yaml +0 -0
  205. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/examples/01_hello_world.py +0 -0
  206. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/examples/02_ask_user.py +0 -0
  207. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/examples/03_wait_until.py +0 -0
  208. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/examples/04_multi_step.py +0 -0
  209. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/examples/05_persistence.py +0 -0
  210. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/examples/06_llm_integration.py +0 -0
  211. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/examples/07_react_agent.py +0 -0
  212. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/examples/README.md +0 -0
  213. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/mkdocs.yml +0 -0
  214. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/pytest.ini +0 -0
  215. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/scripts/backfill_diary_edges.py +0 -0
  216. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/core/config.py +0 -0
  217. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/core/effect_cancellation.py +0 -0
  218. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/core/event_keys.py +0 -0
  219. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/core/health.py +0 -0
  220. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/core/live_deltas.py +0 -0
  221. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/core/policy.py +0 -0
  222. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/core/progress_channel.py +0 -0
  223. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/core/spec.py +0 -0
  224. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/core/tool_scope.py +0 -0
  225. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/core/vars.py +0 -0
  226. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/documents/__init__.py +0 -0
  227. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/documents/charts.py +0 -0
  228. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/documents/docx.py +0 -0
  229. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/documents/pdf.py +0 -0
  230. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/evidence/__init__.py +0 -0
  231. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/evidence/recorder.py +0 -0
  232. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/__init__.py +0 -0
  233. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/act_only.py +0 -0
  234. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/chat.py +0 -0
  235. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/communities.py +0 -0
  236. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/diary.py +0 -0
  237. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/digest.py +0 -0
  238. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/entity_runtime.py +0 -0
  239. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/fingerprint.py +0 -0
  240. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/lease.py +0 -0
  241. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/life.py +0 -0
  242. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/memory_reader.py +0 -0
  243. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/night_voice.py +0 -0
  244. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/phase_graph.py +0 -0
  245. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/phase_spec.py +0 -0
  246. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/prelude.py +0 -0
  247. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/prompt_overlay.py +0 -0
  248. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/reflection.py +0 -0
  249. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
  250. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/substrate.py +0 -0
  251. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/tool_effects.py +0 -0
  252. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/tool_policy.py +0 -0
  253. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/tools.py +0 -0
  254. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/identity/visit_workflow.py +0 -0
  255. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/__init__.py +0 -0
  256. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
  257. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
  258. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
  259. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/config_facade.py +0 -0
  260. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  261. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
  262. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  263. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
  264. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
  265. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
  266. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  267. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
  268. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
  269. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/llm_client.py +0 -0
  270. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
  271. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  272. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  273. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
  274. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  275. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
  276. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
  277. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  278. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  279. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
  280. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
  281. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
  282. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  283. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
  284. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  285. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
  286. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
  287. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/memory/__init__.py +0 -0
  288. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/memory/active_context.py +0 -0
  289. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/memory/active_memory.py +0 -0
  290. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/memory/compaction.py +0 -0
  291. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/memory/kg_packets.py +0 -0
  292. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/memory/memact_composer.py +0 -0
  293. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/memory/recall_levels.py +0 -0
  294. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/memory/token_budget.py +0 -0
  295. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/rendering/__init__.py +0 -0
  296. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  297. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/rendering/json_stringify.py +0 -0
  298. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/scheduler/__init__.py +0 -0
  299. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/scheduler/convenience.py +0 -0
  300. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/scheduler/multi_store.py +0 -0
  301. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/scheduler/registry.py +0 -0
  302. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/scheduler/scheduler.py +0 -0
  303. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/storage/artifacts.py +0 -0
  304. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/storage/commands.py +0 -0
  305. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/storage/lease.py +0 -0
  306. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/storage/ledger_chain.py +0 -0
  307. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/storage/ledger_slim.py +0 -0
  308. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/storage/observable.py +0 -0
  309. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/storage/serialize.py +0 -0
  310. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/storage/snapshots.py +0 -0
  311. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/storage/steer_sidecar.py +0 -0
  312. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/turn_grounding.py +0 -0
  313. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/utils/__init__.py +0 -0
  314. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/utils/atomic_files.py +0 -0
  315. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/utils/file_filters.py +0 -0
  316. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  317. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  318. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  319. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  320. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  321. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
  322. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  323. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  324. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  325. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  326. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  327. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  328. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  329. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  330. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
  331. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
  332. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
  333. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
  334. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  335. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  336. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +0 -0
  337. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  338. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/workflow_bundle/models.py +0 -0
  339. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  340. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  341. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  342. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/README.md +0 -0
  343. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/conftest.py +0 -0
  344. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_abstractcore_comms_facade.py +0 -0
  345. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_abstractcore_discovery_facade.py +0 -0
  346. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_abstractcore_host_facade.py +0 -0
  347. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_abstractcore_run_facade.py +0 -0
  348. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_abstractcore_telegram_facade.py +0 -0
  349. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_active_context_policy.py +0 -0
  350. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_active_memory.py +0 -0
  351. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_agora_agent_alias_identity.py +0 -0
  352. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_agora_tools_http.py +0 -0
  353. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_analyze_media_addressing_and_walling.py +0 -0
  354. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_answer_user_effect.py +0 -0
  355. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_artifacts.py +0 -0
  356. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_browser_probe_target_walling.py +0 -0
  357. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_budget_law_no_unrequested_caps.py +0 -0
  358. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_capability_default_reasoning.py +0 -0
  359. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_chat_summarizer_integration.py +0 -0
  360. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_code_node_restricted_python.py +0 -0
  361. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_command_store.py +0 -0
  362. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_compaction_helpers.py +0 -0
  363. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_compaction_summarizer_route.py +0 -0
  364. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_config_facade_models_engines.py +0 -0
  365. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_control_adapter_while.py +0 -0
  366. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_crash_ordering_inversions.py +0 -0
  367. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_data_registry_facade.py +0 -0
  368. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_default_tools_camera_gating.py +0 -0
  369. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_default_tools_comms_gating.py +0 -0
  370. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_default_tools_include_skim_files.py +0 -0
  371. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_default_tools_include_skim_folders.py +0 -0
  372. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_default_tools_include_skim_web.py +0 -0
  373. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_default_tools_search_files_executor.py +0 -0
  374. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_diary_capture.py +0 -0
  375. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_diary_write_rescue.py +0 -0
  376. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_directory_lease.py +0 -0
  377. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_disabled_toolsets_seam.py +0 -0
  378. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_discovery_survives_unbuildable_default.py +0 -0
  379. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_document_markdown_tables.py +0 -0
  380. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_document_renderers_hr_quote.py +0 -0
  381. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_durable_toolsets.py +0 -0
  382. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_durable_write_discipline.py +0 -0
  383. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  384. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_effect_cancellation.py +0 -0
  385. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_effect_issuance_idempotency.py +0 -0
  386. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_effect_payload_stays_json_serializable.py +0 -0
  387. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_election_consequence_teaching.py +0 -0
  388. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_emergence_experiment.py +0 -0
  389. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_emit_event_uses_wait_index.py +0 -0
  390. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_emit_event_without_workflow_registry.py +0 -0
  391. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_endpoint_profile_route_context.py +0 -0
  392. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_awake_memory_fixes.py +0 -0
  393. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_brain_effects.py +0 -0
  394. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_chat_driver.py +0 -0
  395. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_chat_tools_reflection.py +0 -0
  396. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_diary.py +0 -0
  397. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_execute_tool.py +0 -0
  398. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_fetch_url_tool.py +0 -0
  399. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_life_loop.py +0 -0
  400. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_memory_richness.py +0 -0
  401. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_phase_graph_conformance.py +0 -0
  402. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_recent_memories.py +0 -0
  403. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_runtime.py +0 -0
  404. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_search_memory.py +0 -0
  405. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
  406. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_substrate_resolution.py +0 -0
  407. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_visit_honesty.py +0 -0
  408. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_workspace_cap.py +0 -0
  409. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_entity_workspace_tools.py +0 -0
  410. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_event_wait_index.py +0 -0
  411. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
  412. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_evidence_recorder.py +0 -0
  413. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
  414. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_execute_command_output_offload.py +0 -0
  415. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_execution_capability_discovery.py +0 -0
  416. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_explicit_eject_other_clients.py +0 -0
  417. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_factory_default_retry_policy.py +0 -0
  418. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  419. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_format_repair_nudge.py +0 -0
  420. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_fresh_install_no_provider.py +0 -0
  421. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_gateway_facades_c4899.py +0 -0
  422. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_git_read_only_refiner.py +0 -0
  423. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_hf_process_residency_merge.py +0 -0
  424. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_hot_path_store_reads.py +0 -0
  425. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_indexed_idempotency_lookup.py +0 -0
  426. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_integration_abstractcore.py +0 -0
  427. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_integrations_abstractcore.py +0 -0
  428. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_json_file_run_store_children_index.py +0 -0
  429. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_json_run_cache_bound.py +0 -0
  430. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_json_store_scan_memo.py +0 -0
  431. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_jsonl_ledger_recovery.py +0 -0
  432. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_kg_learn_and_recall_contract.py +0 -0
  433. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_ledger_chain.py +0 -0
  434. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_ledger_record_slimming.py +0 -0
  435. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_ledger_subscription.py +0 -0
  436. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_live_token_deltas.py +0 -0
  437. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_call_media_artifact_refs.py +0 -0
  438. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  439. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  440. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_call_payload_shape_refusal.py +0 -0
  441. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_call_requires_prompt.py +0 -0
  442. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_call_response_schema_normalization.py +0 -0
  443. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_call_structured_output_fallback.py +0 -0
  444. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_call_text_phase_progress.py +0 -0
  445. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  446. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  447. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  448. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_client_grounding_tail.py +0 -0
  449. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_client_media_artifacts.py +0 -0
  450. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_client_system_context.py +0 -0
  451. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_client_tool_call_parsing.py +0 -0
  452. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_retry_classification.py +0 -0
  453. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_llm_streaming_on_token.py +0 -0
  454. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_local_helper_tool_exposure.py +0 -0
  455. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_local_residency_host_sweep.py +0 -0
  456. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  457. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_max_iterations_ceiling.py +0 -0
  458. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_mcp_remote_tool_executor.py +0 -0
  459. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_mcp_worker_logging.py +0 -0
  460. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_mcp_worker_security.py +0 -0
  461. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_mcp_worker_stdio.py +0 -0
  462. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_media_artifact_resolution.py +0 -0
  463. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_media_capability_default_routing.py +0 -0
  464. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_media_subprocess.py +0 -0
  465. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memact_composer_from_kg_result.py +0 -0
  466. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memory_appraise_handler.py +0 -0
  467. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memory_communities.py +0 -0
  468. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  469. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memory_kg_packets.py +0 -0
  470. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  471. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  472. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  473. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  474. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memory_note_effect.py +0 -0
  475. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memory_query_effect.py +0 -0
  476. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memory_query_rich_filters.py +0 -0
  477. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  478. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memory_seam_handlers.py +0 -0
  479. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memory_seam_sqlite_durability.py +0 -0
  480. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_memory_tag_effect.py +0 -0
  481. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_mlx_generation_serialization.py +0 -0
  482. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_mlx_process_residency_merge.py +0 -0
  483. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_model_eject_cancel.py +0 -0
  484. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_model_residency_clean_switch.py +0 -0
  485. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_model_residency_control_plane.py +0 -0
  486. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
  487. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_multi_store_scheduler.py +0 -0
  488. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_multimodal_abstractcore_integration.py +0 -0
  489. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_native_mlx_application_wiring.py +0 -0
  490. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_native_mlx_execution_controls_live.py +0 -0
  491. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_native_tool_channel.py +0 -0
  492. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_night_voice.py +0 -0
  493. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_no_default_provider_refusal_ux.py +0 -0
  494. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_offload_answer_chain_c4978.py +0 -0
  495. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
  496. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_offloading.py +0 -0
  497. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_packaging_extras.py +0 -0
  498. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_parallel_readonly_tool_execution.py +0 -0
  499. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_pause_resume.py +0 -0
  500. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_pdf_unicode_rendering.py +0 -0
  501. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_personal_cycle.py +0 -0
  502. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_phantom_attachment_index.py +0 -0
  503. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_phase_graph_artifact_control.py +0 -0
  504. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_phase_graph_obedience.py +0 -0
  505. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_phase_vocabulary_migration.py +0 -0
  506. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
  507. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_prompt_cache_export_import.py +0 -0
  508. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
  509. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_prompt_cache_modules.py +0 -0
  510. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_prompt_cache_posture_inheritance.py +0 -0
  511. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
  512. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_prompt_overlay.py +0 -0
  513. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_provider_endpoint_profile_resolution.py +0 -0
  514. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_provider_pin_routing_isolation.py +0 -0
  515. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_queryable_run_store.py +0 -0
  516. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  517. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_read_idle_threading.py +0 -0
  518. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_readoption_experiment.py +0 -0
  519. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_real_integration.py +0 -0
  520. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_realize_election.py +0 -0
  521. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_recall_levels_policy.py +0 -0
  522. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_remote_client_cancel.py +0 -0
  523. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_remote_llm_client.py +0 -0
  524. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_remote_speculation_defaults.py +0 -0
  525. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_rendering_agent_trace_report.py +0 -0
  526. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_rendering_json_stringify.py +0 -0
  527. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_report_branding.py +0 -0
  528. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_resume_concurrent_same_wait.py +0 -0
  529. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_retry_idempotency.py +0 -0
  530. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_run_history_bundle.py +0 -0
  531. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_run_scoped_tool_policy.py +0 -0
  532. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_run_tool_scope_ceiling.py +0 -0
  533. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_runtime_browser_session_boundary.py +0 -0
  534. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  535. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_runtime_default_provider_model_refresh.py +0 -0
  536. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_runtime_effect_invocation_trace.py +0 -0
  537. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_runtime_health_and_bounded_vars.py +0 -0
  538. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_runtime_install_boundary.py +0 -0
  539. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
  540. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_runtime_node_traces.py +0 -0
  541. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  542. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_runtime_tick_step_gate.py +0 -0
  543. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_scheduler.py +0 -0
  544. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_send_email_refiner.py +0 -0
  545. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
  546. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_session_history.py +0 -0
  547. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_session_prompt_cache_attribution.py +0 -0
  548. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_session_prompt_cache_visibility.py +0 -0
  549. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_session_route_stamp.py +0 -0
  550. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_shell_tool_exposure.py +0 -0
  551. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_snapshots.py +0 -0
  552. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_speculation_inheritance.py +0 -0
  553. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_speculation_reaches_provider_construction.py +0 -0
  554. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_sqlite_ledger_store.py +0 -0
  555. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_start_subworkflow_async_wait.py +0 -0
  556. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  557. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  558. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_steer_sidecar.py +0 -0
  559. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_storage_deletion.py +0 -0
  560. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_structured_output_schema_enum.py +0 -0
  561. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_subworkflow.py +0 -0
  562. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_terminal_effect_completion.py +0 -0
  563. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  564. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_thinking_inheritance.py +0 -0
  565. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  566. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_approval_executor.py +0 -0
  567. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_approval_resume_executes.py +0 -0
  568. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_approval_wait_key_identity.py +0 -0
  569. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_calls_idempotency_keys.py +0 -0
  570. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_catalog.py +0 -0
  571. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_descriptor_registry.py +0 -0
  572. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_executor_argument_sanitization.py +0 -0
  573. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_executor_error_output_detection.py +0 -0
  574. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_executor_filename_alias.py +0 -0
  575. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  576. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_executor_read_file_aliases.py +0 -0
  577. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_executor_timeout.py +0 -0
  578. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_inventory_facade.py +0 -0
  579. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_invoke_effect.py +0 -0
  580. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_policy_and_mounts.py +0 -0
  581. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_tool_wait_allowlist_safety.py +0 -0
  582. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_topic_election_world_model.py +0 -0
  583. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_trace_context_propagation.py +0 -0
  584. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_turn_grounding_byte_stability.py +0 -0
  585. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_turn_grounding_carriers_a3.py +0 -0
  586. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_vars_query_effect.py +0 -0
  587. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visit_ab_fixture.py +0 -0
  588. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visit_history_replay_caps.py +0 -0
  589. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visit_midturn_elections.py +0 -0
  590. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visit_midturn_resume.py +0 -0
  591. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visit_workflow.py +0 -0
  592. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
  593. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
  594. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  595. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  596. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  597. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  598. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_entity_memory_nodes.py +0 -0
  599. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
  600. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_llm_call_partial_override.py +0 -0
  601. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  602. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_memact_compose_node.py +0 -0
  603. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  604. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  605. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  606. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_unknown_node_type_refuses.py +0 -0
  607. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
  608. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_add_message_builtin.py +0 -0
  609. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  610. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_agora_react_agent.py +0 -0
  611. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_call_tool_node.py +0 -0
  612. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
  613. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_compiler_basic.py +0 -0
  614. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  615. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_continue_on_error.py +0 -0
  616. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_edit_json_schema_node.py +0 -0
  617. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
  618. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_file_nodes_workspace.py +0 -0
  619. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_function_library.py +0 -0
  620. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_get_element_node.py +0 -0
  621. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_get_random_element_node.py +0 -0
  622. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_get_var_node.py +0 -0
  623. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_has_tools_builtin.py +0 -0
  624. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  625. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
  626. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_make_object_node.py +0 -0
  627. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_media_nodes.py +0 -0
  628. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  629. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_memory_source_pins.py +0 -0
  630. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_pin_expressions.py +0 -0
  631. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_prompt_only.py +0 -0
  632. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_random_nodes.py +0 -0
  633. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_schema_enum_switch.py +0 -0
  634. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_string_contains_replace.py +0 -0
  635. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_visualflow_tool_parameters_node.py +0 -0
  636. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_w4_feelings_lens.py +0 -0
  637. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_wait_event_deadline.py +0 -0
  638. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_wait_event_prompt_metadata.py +0 -0
  639. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_wait_until_streak.py +0 -0
  640. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_wait_until_utc_normalization.py +0 -0
  641. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_workflow_bundle_registry.py +0 -0
  642. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_workspace_builtin_deny.py +0 -0
  643. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
  644. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  645. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
  646. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
  647. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_workspace_prompt_context.py +0 -0
  648. {abstractruntime-0.5.1 → abstractruntime-0.6.0}/tests/test_write_chart.py +0 -0
@@ -5,6 +5,131 @@ All notable changes to AbstractRuntime will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.6.0] - 2026-09-27
9
+
10
+ Automations v1: run a workflow on a schedule or on request as a durable, crash-safe controller run. Hosts that
11
+ fold root runs into sessions should read the **Changed** notes (occurrences appear as session turns).
12
+
13
+ ### Added
14
+
15
+ - **Automations** (`abstractruntime.automations`, see `docs/automations.md`): run a workflow on a trigger. An
16
+ automation is a durable controller run (the packaged bundle `abstractframework.automation-controller@1.0.0`), and
17
+ each firing (an occurrence) is a child run with a deterministic id, so a crash never loses an occurrence or starts
18
+ one twice. Every transition is an `automation.*` record in the controller's ledger.
19
+ - `create_automation(runtime, request, *, actor_id=None)` returns `(automation_id, revision)`; the same request
20
+ returns the same automation and a reused `request_id` with a different request raises `identity_conflict`.
21
+ `get_automation`, `list_occurrences` and `drive_automation` (a run loop for hosts without one) complete the
22
+ service API.
23
+ - `apply_automation_command` pauses, resumes, runs now, revises, stops the current occurrence or archives. Commands
24
+ are idempotent per `command_id` (a reused id for a different command is refused with `identity_conflict`), are
25
+ checked against `expected_revision`, and never interleave with the controller. Pause stops scheduled runs only;
26
+ resume never fires missed runs; revising `policy` changes only the fields sent.
27
+ - Context: independent occurrences (the default) start fresh in their own session; in growing mode each occurrence
28
+ joins the automation's session and receives its previous turns (at most 40 messages / 24,000 characters).
29
+ - Failed occurrences are retried: 3 attempts by default, 30 s then 60 s apart, capped at 10 minutes. An occurrence's
30
+ inputs are frozen when it is admitted, so a later revision never changes it.
31
+ - Automations are quiet unless the output carries `notify: true` or `notify: {title, body}`, or an occurrence still
32
+ fails after its last retry. `list_attention` pages these items oldest first.
33
+ - `policy.tool_approval`: `"auto"` (default; creating the automation is the consent, and each occurrence receives a
34
+ frozen `_runtime.tool_policy.auto_approve_tools` grant) or `"ask"`. Unclassified tools still ask.
35
+ - `pending_waits` lists occurrence runs waiting on a person as typed waits: `ask_user`, `tool_approval` (with the
36
+ calls to approve in `details`) or `event` (with `{scope, name}` when known); `ANSWER_PAYLOADS` gives the resume
37
+ payload for each kind.
38
+ - `start_discussion(..., workspace_root=...)` forks a separate conversation at occurrence N: a new root run in its
39
+ own session, seeded once with the automation's whole conversation through N (every occurrence 1..N, in either
40
+ context mode, oldest dropped first under the history budget), working in its own writable workspace with the
41
+ automation's workspace mounted read-only alongside, and without the automation's tool grant. Discussion sessions
42
+ are scoped to their automation.
43
+ - `get_automation` and `list_automations` summaries carry `next_fire_at` for every active scheduled automation,
44
+ also while an occurrence runs (the tick the controller will admit next, coalescing included), and
45
+ `current_occurrence` (`{index, run_id, attempt, status}` of the occurrence in flight), so clients never
46
+ compute schedules themselves.
47
+ - `adopt_legacy_schedule_projection(run)` summarizes a legacy gateway `scheduled:*` root read-only.
48
+ - Limits: `every` is at most `366d`, `count` at most 1,000,000.
49
+ - **Trigger sources** (`abstractruntime.triggers`): `schedule@1` (fixed UTC intervals such as `5m` or `24h` on a grid
50
+ that does not drift; `start_at`, exclusive `until` and `count`; one-shot when `every` is absent; missed ticks run
51
+ once, marked `coalesced`) and `manual@1`. Other packages add sources through the `abstractruntime.trigger_sources`
52
+ entry-point group; a broken third-party source is listed as unavailable, and a missing built-in source is an error.
53
+ - VisualFlow node type `automation` (the controller's nodes, adapters `automation.<node_id>`).
54
+ - `abstractruntime.automation_queries`: `list_automations(store, status=, cursor=, limit=)` (automation summaries,
55
+ newest first, with a cursor that survives restarts; archived automations stay listed) and
56
+ `latest_occurrence(store, automation_id)`. `changed_since` is refused with `unsupported_feature`.
57
+ - Explicit run ids: `Runtime.start(..., run_id=...)` and `START_SUBWORKFLOW` `payload.run_id` create a run only if the
58
+ id is free. Starting it again with the same identity (workflow, session, parent, `vars._meta.occurrence`,
59
+ `vars._meta.creation_digest`) returns the existing run untouched; a different identity raises
60
+ `RunIdentityConflict` (a `ValueError`, `reason_code = "identity_conflict"`). A parent that crashes after starting
61
+ such a child, but before saving its wait, finds the same child on replay; if the child already finished, the parent
62
+ receives its result directly.
63
+ - `RunStore.create_if_absent(run) -> (run, created)` on the SQLite, JSON-file, in-memory and offloading stores (the JSON
64
+ store publishes a fully written temp file with an atomic hard link and never replaces an existing run file).
65
+ `store_supports_create_if_absent` / `require_create_if_absent` check a store. Recovery after a process crash is
66
+ covered; power-loss durability is not claimed.
67
+ - `run_mutation_lock(run_id)`: the per-run, per-process lock that `Runtime.tick` holds for the whole tick and
68
+ `Runtime.resume` for its commit. Hosts take it around their own read-modify-save of a run. v1 supports one writer
69
+ process per store.
70
+ - Run index attribution: rows carry `automation_id`, `role` (`controller`, `occurrence`, `descendant`, `discussion`,
71
+ `legacy_schedule` or empty), `occurrence_index` and `session_kind` (`chat`, `automation`, `occurrence`,
72
+ `discussion`), and `list_run_index` filters on them (`session_kind="chat,discussion"` works). Existing SQLite stores
73
+ fill the new columns once when opened; the JSON store re-reads each run file once. Every store has
74
+ `session_kinds(session_id)` and `latest_occurrence_row(automation_id)`.
75
+ - Run index rows carry `workspace_root`: the folder the run executes in (its top-level `vars["workspace_root"]` as
76
+ stored, stripped, never resolved; `None` when absent), so apps can open a session's folder without loading runs.
77
+ Existing SQLite stores fill it once when opened; the JSON store re-reads each run file once.
78
+ - `session_attribution(store, session_id)` (`abstractruntime.core.run_attribution`) reports what kind of session an id
79
+ is (`chat`, `automation`, `occurrence` or `discussion`, with the discussion's validated root, automation and
80
+ workspace). Every root run started in a discussion session gets the discussion's own workspace, access settings and
81
+ read-only mounts (the whole-workspace read-only flag only when the discussion carries it) and its provenance,
82
+ whatever the caller passed; when the session cannot be attributed (an invalid
83
+ discussion root, or a store without a run index) `Runtime.start` raises `SessionAttributionError`.
84
+ - `select_session_turns(store, session_id, ...)`: the one definition of a session's turns (parent-less runs except
85
+ automation controllers, plus automation occurrences; never child runs, internal runs, legacy scheduled wrappers or,
86
+ unless asked, draft-test runs), with `include_occurrences`, `automation_id`, `through_occurrence`, `until_ms`,
87
+ `include_drafts` and `limit`. `is_draft_lifecycle` is exported too.
88
+ - `session_chat_messages(..., automation_id=None, through_occurrence=None, strict=False)`: bound the replayed turns to
89
+ one automation or to the history as it stood at occurrence N, however old. In a discussion session the seed is
90
+ replayed first and dropped first under the budget. `strict=True` raises `SessionHistoryError`
91
+ (`reason_code = "history_unavailable"`) instead of returning a partial history.
92
+ - Read-only workspaces: a run started with `workspace_read_only: true` (or trusted runtime policy
93
+ `_runtime.workspace_read_only: true`) can read its workspace but not change it. Tools that write files or run
94
+ commands or code, and any tool the runtime has not classified, are refused, as are the VisualFlow `write_file`,
95
+ `write_pdf`, `write_docx`, `write_chart` and `export_artifact` nodes. A read-only workspace folder is never created,
96
+ a read-only run without one is refused, and child runs and nodes inherit the setting.
97
+ `tool_effects.TOOL_EFFECT_CLASSES` classifies every exposable tool (`read`, `write`, `exec`, `delegate`, `comms`,
98
+ `memory-write`).
99
+ - Read-only mounts: `_runtime.workspace_read_only_paths` (absolute folders, symlinks resolved) makes those folders
100
+ readable but not writable by the file tools (`write_file`, `edit_file`) and the VisualFlow file/export writers,
101
+ while the run's own workspace stays writable. Commands and code (`execute_command`, `execute_python`, ...) are not
102
+ restricted by a mount: the shell cannot be sandboxed, so mounts protect the file tools only. Child runs and
103
+ VisualFlow nodes inherit the mounts and can only add more. Helpers `read_only_paths(vars)` and
104
+ `path_is_read_only(vars, path)` in `abstractruntime.utils.workspace_paths`.
105
+ - `select_session_turns(..., automation_id=A)` gathers A's occurrences from every session (an independent-mode
106
+ automation runs each occurrence in its own session), interleaved with the session's own turns.
107
+ - `JsonFileRunStore.warm_session_index()` builds the session and children indexes at host startup.
108
+
109
+ ### Changed
110
+
111
+ - Session history bundles and session replay include automation occurrences as turns (kind `occurrence`, with
112
+ `automation_id` and `occurrence_index`); a retried occurrence counts once, as its last attempt. Draft-test runs are
113
+ left out of a session's history.
114
+ - `list_run_index(root_only=True)` returns turn roots: parent-less runs except automation controllers, plus automation
115
+ occurrences. Apps that fold root runs into sessions show an automation's session as a chat whose turns are its
116
+ occurrences.
117
+ - Children of an automation occurrence carry `vars._meta.occurrence` with `role = "descendant"`, and children of a
118
+ discussion carry its `vars._meta.discussion` (without the seed); a child cannot clear or change either.
119
+
120
+ ### Fixed
121
+
122
+ - Session lookups on the JSON run store use an index of each session's runs instead of scanning the store (about
123
+ 0.1 ms per new chat turn at 20,000 runs). Several store objects or processes on one run folder see each other's
124
+ created and deleted runs through a creation journal (`.runs_created.log`).
125
+ - History "through occurrence N" returns the history up to that occurrence in sessions of any length, and raises
126
+ (`strict`) or returns nothing when the session has no occurrence N.
127
+ - A discussion session's seed is read only from a validated root: every run of the session must name the same root,
128
+ and that root must belong to the session and carry the seed.
129
+ - The JSON run store removes run temp files left behind by a crash (older than 10 minutes) when it opens.
130
+ - Automation identity metadata (`vars._meta.automation`, `.occurrence`, `.discussion`, `.creation_digest`) always
131
+ stays inline when a finished run is offloaded.
132
+
8
133
  ## [0.5.1] - 2026-09-26
9
134
 
10
135
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: AbstractRuntime
3
- Version: 0.5.1
3
+ Version: 0.6.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
@@ -54,7 +54,7 @@ Description-Content-Type: text/markdown
54
54
 
55
55
  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.
56
56
 
57
- **Version:** 0.5.1 • **Python:** 3.10+
57
+ **Version:** 0.6.0 • **Python:** 3.10+
58
58
 
59
59
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
60
60
 
@@ -146,7 +146,7 @@ state = rt.resume(
146
146
  assert state.status.value == "completed"
147
147
  ```
148
148
 
149
- ## What’s included (v0.5.1)
149
+ ## What’s included (v0.6.0)
150
150
 
151
151
  Kernel (import-light):
152
152
  - workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
@@ -158,6 +158,8 @@ Kernel (import-light):
158
158
  - Stop that reaches the running effect: `Runtime.cancel_run(...)` signals the in-flight model or tool call, which ends as a `cancelled` ledger record (never retried); a model unload stops the calls using that model first (`docs/api.md`)
159
159
  - host pause at step boundaries: `Runtime.tick(..., step_gate=...)`
160
160
  - run-tree tool ceiling: an explicit `allowed_tools` list can only narrow across child runs, and approval policy never widens it
161
+ - automations: run a workflow on a schedule (`schedule@1`, fixed UTC intervals) or on request (`manual@1`) as a durable controller run whose occurrences are deterministic child runs and session turns, with commands, independent or growing context, discussions forked at any occurrence (own workspace, automation workspace mounted read-only), tool approval, typed waits and quiet-by-default notifications (`docs/automations.md`)
162
+ - explicit run ids: `Runtime.start(..., run_id=...)` creates a run only if the id is free (`RunStore.create_if_absent`), and `run_mutation_lock(run_id)` serializes a run's writers in a process
161
163
 
162
164
  Durability + storage:
163
165
  - stores: in-memory, JSON/JSONL, SQLite (`src/abstractruntime/storage/*`)
@@ -236,6 +238,7 @@ sr = create_scheduled_runtime(
236
238
  | [Architecture](docs/architecture.md) | Component map + diagrams |
237
239
  | [Overview](docs/proposal.md) | Design goals, core concepts, and scope |
238
240
  | [AbstractCore Integration](docs/integrations/abstractcore.md) | `LLM_CALL` / `TOOL_CALLS`, host facades, models/engines/host jobs |
241
+ | [Automations](docs/automations.md) | Scheduled and on-request workflows: controller, triggers, commands, context, discussions, storage guarantees |
239
242
  | [Artifacts](docs/artifacts.md) | Artifact identity, descriptors, catalog search and access stats |
240
243
  | [Tool Approval](docs/tool-approval.md) | Tool risk tiers, run-policy ceiling, per-call refiners |
241
244
  | [Comms Toolset](docs/tools-comms.md) | Opt-in email/WhatsApp/Telegram tools |
@@ -4,7 +4,7 @@
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.5.1 • **Python:** 3.10+
7
+ **Version:** 0.6.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
 
@@ -96,7 +96,7 @@ state = rt.resume(
96
96
  assert state.status.value == "completed"
97
97
  ```
98
98
 
99
- ## What’s included (v0.5.1)
99
+ ## What’s included (v0.6.0)
100
100
 
101
101
  Kernel (import-light):
102
102
  - workflow graphs: `WorkflowSpec` (`src/abstractruntime/core/spec.py`)
@@ -108,6 +108,8 @@ Kernel (import-light):
108
108
  - Stop that reaches the running effect: `Runtime.cancel_run(...)` signals the in-flight model or tool call, which ends as a `cancelled` ledger record (never retried); a model unload stops the calls using that model first (`docs/api.md`)
109
109
  - host pause at step boundaries: `Runtime.tick(..., step_gate=...)`
110
110
  - run-tree tool ceiling: an explicit `allowed_tools` list can only narrow across child runs, and approval policy never widens it
111
+ - automations: run a workflow on a schedule (`schedule@1`, fixed UTC intervals) or on request (`manual@1`) as a durable controller run whose occurrences are deterministic child runs and session turns, with commands, independent or growing context, discussions forked at any occurrence (own workspace, automation workspace mounted read-only), tool approval, typed waits and quiet-by-default notifications (`docs/automations.md`)
112
+ - explicit run ids: `Runtime.start(..., run_id=...)` creates a run only if the id is free (`RunStore.create_if_absent`), and `run_mutation_lock(run_id)` serializes a run's writers in a process
111
113
 
112
114
  Durability + storage:
113
115
  - stores: in-memory, JSON/JSONL, SQLite (`src/abstractruntime/storage/*`)
@@ -186,6 +188,7 @@ sr = create_scheduled_runtime(
186
188
  | [Architecture](docs/architecture.md) | Component map + diagrams |
187
189
  | [Overview](docs/proposal.md) | Design goals, core concepts, and scope |
188
190
  | [AbstractCore Integration](docs/integrations/abstractcore.md) | `LLM_CALL` / `TOOL_CALLS`, host facades, models/engines/host jobs |
191
+ | [Automations](docs/automations.md) | Scheduled and on-request workflows: controller, triggers, commands, context, discussions, storage guarantees |
189
192
  | [Artifacts](docs/artifacts.md) | Artifact identity, descriptors, catalog search and access stats |
190
193
  | [Tool Approval](docs/tool-approval.md) | Tool risk tiers, run-policy ceiling, per-call refiners |
191
194
  | [Comms Toolset](docs/tools-comms.md) | Opt-in email/WhatsApp/Telegram tools |
@@ -34,6 +34,7 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
34
34
 
35
35
  ## Features (reference)
36
36
 
37
+ - `automations.md` — automations: a workflow run on a schedule or on request as a durable controller run; triggers (`schedule@1`, `manual@1`, entry-point sources), commands, independent or growing context, discussions forked at any occurrence (own writable workspace, the automation's workspace mounted read-only), tool approval, typed waits, notifications and retries, and the storage guarantees (create-if-absent, per-run lock, turn roots, session kinds, one writer process per store)
37
38
  - `entity-runtime.md` — per-entity runtimes for summoned entities: homes, the one-writer lease, act-only diary privacy (`$act_only` refs), durable visit waits with deadlines
38
39
  - `evidence.md` — artifact-backed evidence capture for external-boundary tools
39
40
  - `mcp-worker.md` — MCP worker CLI (`abstractruntime-mcp-worker`)
@@ -62,8 +62,10 @@ Durability invariant: `RunState.vars` must remain JSON-serializable (`src/abstra
62
62
 
63
63
  Implementation: `src/abstractruntime/core/runtime.py`.
64
64
 
65
- - `Runtime.start(workflow, vars=..., actor_id=..., session_id=...) -> run_id`
65
+ - `Runtime.start(workflow, vars=..., actor_id=..., session_id=..., parent_run_id=..., run_id=...) -> run_id`
66
66
  - creates and persists a new `RunState`
67
+ - `run_id` starts the run under an id you choose (`[A-Za-z0-9_-]+`). The run is created only if that id is free; starting it again with the same identity (workflow, session, parent, `vars._meta.occurrence`, `vars._meta.creation_digest`) returns the existing run untouched, and a different identity raises `RunIdentityConflict` (a `ValueError`, `reason_code = "identity_conflict"`). The store must support `create_if_absent` (otherwise `NotImplementedError`). `START_SUBWORKFLOW` accepts the same explicit id as `payload.run_id`
68
+ - a root run that names a session is checked against the session's attribution: in a discussion session it gets the discussion's workspace setup (its own writable workspace and the read-only mount) and provenance, and when the attribution cannot be read (an invalid discussion root, or a store without a run index) the start raises `SessionAttributionError` (see [automations.md](automations.md#discussions))
67
69
  - `Runtime.tick(workflow, run_id, max_steps=..., step_gate=None) -> RunState`
68
70
  - executes node handlers and effects until the run becomes `WAITING`, `COMPLETED`, `FAILED`, or `CANCELLED`
69
71
  - optional `step_gate()` is consulted at every step boundary; when it returns `False` the tick returns the persisted state and the run stays `RUNNING` (a later tick continues where it stopped)
@@ -71,6 +73,7 @@ Implementation: `src/abstractruntime/core/runtime.py`.
71
73
  - validates the `wait_key`, writes `payload` to `WaitState.result_key` (if set), and continues from `WaitState.resume_to_node`
72
74
  - a wait is resumed at most once: a resume of a run that is no longer waiting, or that waits on another key, raises `StaleResumeError` (a `ValueError`), for example when another caller resumed it first
73
75
  - the check and the commit run under a per-run lock, and tools approved with `{"approved": true}` execute while that lock is held, so a long tool delays a competing resume of the same run, which is then refused
76
+ - `run_mutation_lock(run_id)` (package root): the per-run, per-process, re-entrant lock that `tick` holds for the whole tick and `resume` for its commit; take it around your own read-modify-save of a run so a tick cannot overwrite your change
74
77
  - `Runtime.get_state(run_id) -> RunState` and `Runtime.get_ledger(run_id) -> list[dict]`
75
78
  - host-facing read APIs for checkpoints and the append-only ledger
76
79
  - `Runtime.cancel_run(run_id, reason=None, cancelled_by="api") -> RunState`
@@ -117,6 +120,12 @@ Notes:
117
120
  - `from abstractruntime import SqliteRunStore, SqliteLedgerStore`, or
118
121
  - `from abstractruntime.storage.sqlite import SqliteRunStore, SqliteLedgerStore`
119
122
 
123
+ Run index and creation (all built-in run stores, including the offloading wrapper):
124
+ - `create_if_absent(run) -> (run, created)`: creates a run only if its id is free and never overwrites an existing one; `store_supports_create_if_absent(store)` / `require_create_if_absent(store)` check a store first. Process-crash safe; power-loss durability is not claimed
125
+ - `list_run_index(status=, workflow_id=, session_id=, root_only=, limit=, oldest_first=, automation_id=, role=, session_kind=)`: lightweight rows carrying `automation_id`, `role`, `occurrence_index`, `session_kind` and `workspace_root` (the run's top-level `vars["workspace_root"]` as stored, stripped; `None` when absent); the three attribution filters take a value, a comma-separated string or a list; `root_only=True` returns turn roots (parent-less runs except automation controllers, plus automation occurrences)
126
+ - `session_kinds(session_id) -> frozenset` and `latest_occurrence_row(automation_id)`: indexed lookups used by session attribution and automation listings
127
+ - `JsonFileRunStore.warm_session_index()` builds the session and children indexes at host startup. Store objects and processes sharing one JSON run folder see each other's created and deleted runs through the creation journal `.runs_created.log`; v1 supports one writer process per store
128
+
120
129
  Common decorators:
121
130
  - `ObservableLedgerStore` for subscriptions (`src/abstractruntime/storage/observable.py`)
122
131
  - `HashChainedLedgerStore` + `verify_ledger_chain(...)` for tamper-evidence (`src/abstractruntime/storage/ledger_chain.py`)
@@ -205,6 +214,49 @@ Public bundle APIs are exported from `src/abstractruntime/workflow_bundle/__init
205
214
 
206
215
  Docs: `workflow-bundles.md`.
207
216
 
217
+ ## Automations
218
+
219
+ Implementation: `src/abstractruntime/automations/*`, `src/abstractruntime/triggers/*`, `src/abstractruntime/automation_queries.py`.
220
+ Deep dive: [automations.md](automations.md).
221
+
222
+ ```python
223
+ from abstractruntime.automations import (
224
+ apply_automation_command, # pause / resume / run_now / revise / stop_current / archive
225
+ create_automation, # -> (automation_id, revision)
226
+ drive_automation, # standalone run loop
227
+ get_automation,
228
+ list_attention,
229
+ list_occurrences,
230
+ pending_waits,
231
+ register_controller_bundle,
232
+ start_discussion,
233
+ )
234
+ from abstractruntime.automation_queries import latest_occurrence, list_automations
235
+ from abstractruntime.triggers import get_trigger_adapter, trigger_sources
236
+ ```
237
+
238
+ - `create_automation(runtime, request, *, now=None, actor_id=None)`: creates the controller root run (the automation) with a deterministic id; raises `AutomationError` (`invalid_definition`, `unsupported_feature`, `unknown_trigger_source`, `identity_conflict`)
239
+ - `apply_automation_command(runtime, *, automation_id, command_id, type, payload=None, actor=None, expected_revision=None)`: the only writer of automation state; returns `{status: "applied" | "rejected", error?, duplicate}`; idempotent per `command_id`
240
+ - `record_automation_command_result(...)`: records a host-side failure of a command as a rejected result
241
+ - reads: `get_automation(run_store, id)`, `list_occurrences(runtime, id, cursor=, limit=)`, `list_attention(ledger_store, id, after_seq=, cursor=, limit=)`, `pending_waits(run_store, id, limit=)` with typed waits (`ask_user`, `tool_approval`, `event`) and `ANSWER_PAYLOADS`; `list_automations(run_store, status=, cursor=, limit=)`, `automation_summary(run)`, `latest_occurrence(run_store, id)`
242
+ - `start_discussion(runtime, *, automation_id, occurrence_index, request_id, prompt, workspace_root, actor_id=None)`: a separate conversation forked at any occurrence N, seeded with the automation's whole timeline 1..N, working in its own writable `workspace_root` with the automation's workspace mounted read-only
243
+ - controller bundle: `register_controller_bundle(registry)`, `controller_workflow_spec()`, `controller_bundle_path()`; `CONTROLLER_WORKFLOW_ID` is `abstractframework.automation-controller@1.0.0:controller`
244
+ - trigger sources: `trigger_sources()`, `get_trigger_adapter(id, version)`, built-ins `schedule@1` and `manual@1`, third-party sources through the `abstractruntime.trigger_sources` entry-point group
245
+ - `adopt_legacy_schedule_projection(run)`: read-only summary of a legacy gateway `scheduled:*` root
246
+ - read-only mounts: `_runtime.workspace_read_only_paths` (absolute folders; file write tools and VisualFlow writers refused inside, reads and command/code tools allowed); helpers `read_only_paths(vars)`, `path_is_read_only(vars, path)` and `READ_ONLY_PATHS_KEY` in `abstractruntime.utils.workspace_paths`
247
+ - read-only workspaces: run vars `workspace_read_only: true` (or `_runtime.workspace_read_only: true`); `abstractruntime.integrations.abstractcore.tool_effects.TOOL_EFFECT_CLASSES` classifies every exposable tool as `read`, `write`, `exec`, `delegate`, `comms` or `memory-write`
248
+
249
+ ## Sessions and history
250
+
251
+ Implementation: `src/abstractruntime/session_turns.py`, `src/abstractruntime/session_history.py`, `src/abstractruntime/core/run_attribution.py`.
252
+
253
+ - `select_session_turns(run_store, session_id, *, include_occurrences=True, until_ms=None, automation_id=None, through_occurrence=None, include_drafts=False, limit=50)` (package root): a session's turns, oldest first. Turns are parent-less runs except automation controllers, plus automation occurrences (a retried occurrence counts once, as its newest attempt); child runs, runtime-internal runs, legacy scheduled wrappers and draft-test runs are left out
254
+ - `session_chat_messages(run_store=, ledger_store=, artifact_store=, session_id=, max_messages=40, max_total_chars=24000, ..., automation_id=None, through_occurrence=None, strict=False)` (package root): the session's completed turns as user/assistant message pairs, newest kept under the budget; in a discussion session the discussion's seed comes first. `strict=True` raises `SessionHistoryError` (`reason_code = "history_unavailable"`) instead of returning a partial history
255
+ - `session_attribution(run_store, session_id)` (`abstractruntime.core.run_attribution`): `None` or `{"kind": "chat" | "automation" | "occurrence" | "discussion", ...}`; a discussion adds its validated root, automation, occurrence and workspace. Raises `SessionAttributionError` when the lookup cannot be completed
256
+ - `is_draft_lifecycle(run_lifecycle)` (package root): whether a run's lifecycle value marks a draft test run
257
+
258
+ History bundles (`export_run_history_bundle`) and session replay use the same turn selection, so automation occurrences appear as turns (kind `occurrence`, with `automation_id` and `occurrence_index`) in both.
259
+
208
260
  ## Run history bundle export (portable replay artifact)
209
261
 
210
262
  Implementation: `src/abstractruntime/history_bundle.py`.
@@ -1,7 +1,7 @@
1
1
  # AbstractRuntime — Architecture
2
2
 
3
- > Updated: 2026-09-26
4
- > Version: 0.5.1
3
+ > Updated: 2026-09-27
4
+ > Version: 0.6.0
5
5
  > Scope: this describes **what is implemented in this repository**.
6
6
 
7
7
  AbstractRuntime is a **durable workflow runtime**: it executes workflow graphs as a persisted state machine with explicit waits (user, time, events, jobs, subworkflows). A run can pause for hours/days and resume **without** keeping Python stacks/coroutines alive.
@@ -315,6 +315,71 @@ The scheduler is an in-process driver loop that resumes due waits and can delive
315
315
  - `Scheduler` (`src/abstractruntime/scheduler/scheduler.py`) polls `QueryableRunStore.list_due_wait_until(...)`
316
316
  - `ScheduledRuntime` + `create_scheduled_runtime()` (`src/abstractruntime/scheduler/convenience.py`) is the "zero-config" wrapper used in `examples/`
317
317
 
318
+ ## Automations
319
+
320
+ An automation runs a target workflow on a trigger, and is itself a durable run. The controller is a packaged
321
+ VisualFlow bundle (`abstractframework.automation-controller@1.0.0`) whose nodes are `automation` adapters; it waits on
322
+ one `WAIT_EVENT` with a deadline, starts each occurrence as an asynchronous `START_SUBWORKFLOW` child with a
323
+ deterministic id, and records every transition as an `automation.*` ledger record. No new effect type or driver is
324
+ involved: a host drives a controller like any other run. See [automations.md](automations.md).
325
+
326
+ ```mermaid
327
+ flowchart LR
328
+ subgraph Host["Host (AbstractGateway run loop, or drive_automation)"]
329
+ Loop["tick due runs /<br/>resume finished subworkflow parents"]
330
+ API["commands + reads"]
331
+ end
332
+ subgraph Automations["automations/ + triggers/"]
333
+ Commands["apply_automation_command"]
334
+ Controller["controller run<br/>(automation-controller@1.0.0)"]
335
+ Triggers["trigger registry<br/>schedule@1, manual@1,<br/>entry-point sources"]
336
+ Queries["get_automation / list_occurrences /<br/>list_attention / pending_waits /<br/>list_automations"]
337
+ end
338
+ subgraph Runs["runs"]
339
+ Occ["occurrence run<br/>(session turn)"]
340
+ Desc["descendant runs"]
341
+ Disc["discussion run<br/>(own workspace + read-only mount)"]
342
+ end
343
+ subgraph Stores["storage/"]
344
+ RS["RunStore<br/>create_if_absent + run index"]
345
+ LS["LedgerStore<br/>automation.* records"]
346
+ end
347
+
348
+ API --> Commands
349
+ API --> Queries
350
+ Commands -->|"run_mutation_lock,<br/>decision, wake"| Controller
351
+ Loop --> Controller
352
+ Loop --> Occ
353
+ Controller -->|"prepare / admit / rearm"| Triggers
354
+ Controller -->|"START_SUBWORKFLOW run_id"| Occ
355
+ Occ --> Desc
356
+ Controller --> RS
357
+ Controller --> LS
358
+ Occ --> RS
359
+ Disc --> RS
360
+ Queries --> RS
361
+ Queries --> LS
362
+ ```
363
+
364
+ Invariants the design rests on:
365
+
366
+ - **Create-if-absent.** Controllers, occurrences and discussions are created under explicit ids through
367
+ `RunStore.create_if_absent`, so replaying a creation after a crash finds the same run and never starts a second
368
+ one (`Runtime.start(..., run_id=...)`, `START_SUBWORKFLOW` `payload.run_id`).
369
+ - **One decision protocol.** Every controller step and command reconciles, looks its decision key up exactly, saves
370
+ an intent, appends the record and applies it, so a crash at any point yields exactly one record and one
371
+ application.
372
+ - **One lock per run.** `run_mutation_lock(run_id)` serializes `tick`, `resume` commits and automation commands in a
373
+ process. v1 supports one writer process per store.
374
+ - **Turns are defined once.** `select_session_turns` decides which runs are a session's turns (parent-less runs
375
+ except controllers, plus occurrences). History bundles, session replay, growing context and discussion seeds all
376
+ use it, and `list_run_index(root_only=True)` returns the same turn roots.
377
+ - **Attribution is indexed.** Each run index row carries `automation_id`, `role`, `occurrence_index` and
378
+ `session_kind`, derived from inline `vars._meta` that the offloading store never moves. `Runtime.start` uses
379
+ `session_attribution` to anchor every root run in a discussion session to the discussion's validated root and its
380
+ workspace setup (its own writable workspace plus the automation's workspace as a read-only mount), and refuses the
381
+ start when the attribution cannot be read.
382
+
318
383
  ## Observability: what you can export
319
384
 
320
385
  - Ledger (source of truth): `Runtime.get_ledger(run_id)` (`src/abstractruntime/core/runtime.py`)
@@ -343,6 +408,7 @@ AbstractRuntime includes a compiler and a portable bundle format:
343
408
  - `../README.md` — install + quick start
344
409
  - `getting-started.md` — first steps
345
410
  - `api.md` — public API surface (imports + pointers)
411
+ - `automations.md` — automations: controller, triggers, commands, context, discussions, storage guarantees
346
412
  - `limits.md` — `_limits` and RuntimeConfig
347
413
  - `snapshots.md` — snapshot/bookmark stores
348
414
  - `provenance.md` — hash chain and verification